⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 双向循环.c

📁 将单链表变成双向循环链表
💻 C
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -