双向循环.c

来自「将单链表变成双向循环链表」· C语言 代码 · 共 89 行

C
89
字号
#include<stdio.h>
#include<malloc.h>

typedef struct node
{int data;
 struct node *next,*prior;
}Node,*lklist,*pointer;
lklist setup()  
{lklist head;
 pointer p,q;
 int x;
 head=(lklist)malloc(sizeof(Node));
 p=head;
 scanf("%d",&x);
 while(x!=32767)
  {q=(lklist)malloc(sizeof(Node));
   q->data=x;
   p->next=q;
   p->prior=0;
   p=q;
   scanf("%d",&x);
  }
  p->next=0;
  return head;
}


void display(lklist head)  
{pointer p;
 p=head->next;
 while(p)
  {printf("%5d",p->data);
   p=p->next;
  }
}
lklist merg(lklist head) //将单链表变成双向循环链表
{pointer p,q,s;
 p=head;
 while(p->next)
	 p=p->next;
 p->next=head->next;
 free(head);
 s=p;
 q=p->next;
 while(q!=p)
 {q->prior=s;
  s=q;
  q=q->next;
 }
 q->prior=s;
 return p;

 

}
void display1(lklist p) //用NEXT来遍历
{pointer q;
 q=p->next;
 while(q!=p)
  {printf("  %d",q->data);
   q=q->next;
  }
 printf("  %d",q->data);
}
void display2(lklist q)//用PRIOR来遍历
{pointer p;
 p=q->next;
 while(q!=p)
 {printf("  %d",q->data);
  q=q->prior;
  }
  printf("  %d",p->data);
}
void main()
{lklist head;
 head=setup();
 display(head);
 printf("\n\n");
 head=merg(head); //调用单链表变双向循环链表函数
 display1(head); 
 printf("\n\n");
 display2(head);
 }




  

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?