Tag:双向链表

Tag (双向链表)'s result:

Two-way linked-list

双向链表在链表的基础上新增了指向前一个结点的指针prior, 由于链表没设表长属性,我在程序用了count变量记录表长以方便插入操作。这里我实现的是双向链表的创建,打印,插入和删除操作。 #include <stdio.h> 2 #include <malloc.h> 3 4 typedef struct shuang 5 { 6 struct shuang *prior; //指向前一个结点 7 int data; 8 struct shuang *next; //指向后一个结点 9 } snode, *slinklist; 10 11 //打印双向链表元素 12 void print_shuang(slinklist L) 13 { 14 slinklist p; 15 p = L->next; 16 while (p!=NULL) 17 { 18 printf(“%d “,p->data); 19 p = p->next; 20 } 21 printf(“\n”); 22 } 23 24 //创建双向链表 25 void creat_shuang(slinklist L) //得结点地址 26 { 27 slinklist p,q; 28 L->next = NULL; //头结点的后指针先指向null 29 printf(“请输入链表元素\n”); 30 q = (snode *)malloc(sizeof(snode)); 31 scanf(“%d”,&(q->data)); 32 q->next = L->next; //NULL给了q->next 33 L->next = q; //L(头结点)指向新的q 34 q->prior = L; //新的q的前指针指向前一个L 35 p = (snode *)malloc(sizeof(snode)); 36 while (scanf(“%d”,&(p->data))!=EOF) 37 { 38 p->next = q->next; //p的后指针指向q的后指针 39 q->next = p; //q的后指针改为指向新的p 40 p->prior = q; //新的p的前指针指向上一个q 41 q = p; //上一个q变成这次新的p(q记录p) 42 p = (snode *)malloc(sizeof(snode)); //p再新开 43 } 44 } 45 46 //插入 47 int ins(slinklist L,int i,int e) 48 { 49 slinklist p,q,s; 50 int j = 1; 51 int count =……