c语言编程之双向循环链表
双向循环链表就是形成两个环,注意每个环的首尾相连基本就可以了。
程序中采用尾插法进行添加节点。
1 #include<stdio.h> 2 #include<stdlib.h> 3 #define element int 4 typedef struct Node{ 5 element data; 6 struct Node *next; 7 struct Node *prior; 8 }*pNode; 9 10 //build a new double loop list 11 element Init_list(pNode p) 12 { 13 //pNode r=NULL; 14 //*p=(pNode)malloc(sizeof(pNode)); 15 p->next=p; 16 p->prior=p; 17 return 0; 18 } 19 //creat a new double loop list 20 element Build_list(pNode *L,element num) 21 { 22 pNode p=NULL; 23 pNode r=NULL; 24 int i=0; 25 int j=0; 26 p=*L; 27 for(j=0;j<num;j++) 28 { 29 r=(pNode)malloc(sizeof(pNode)); 30 r->data=j; 31 p->next=r; 32 r->prior=p; 33 r->next=p; 34 p->prior=r; 35 printf("flag:%d\n",p->next->data); 36 p=r; 37 //printf("flag:%d\n",p->next->data); 38 } 39 return 0; 40 } 41 element Print_list(pNode L) 42 { 43 if(!L) 44 { 45 printf("it is empty\n"); 46 } 47 pNode p=L; 48 p=p->next; 49 int i=0; 50 while(i<16) 51 { 52 printf("data:%d\n",p->data); 53 p=p->next; 54 i++; 55 } 56 57 return 0; 58 } 59 int main() 60 { 61 pNode P=NULL; 62 pNode M=NULL; 63 P=(pNode)malloc(sizeof(pNode)); 64 Init_list(P); 65 M=Build_list(&P,10); 66 Print_list(P); 67 return 0; 68 }