双向循环链表的增删改查

双向循环链表的增删改查
#include<stdio.h> #include<stdlib.h> typedef struct List { int data; struct List *font; struct List *next; }Listdouble; Listdouble *CreatList() //双循环链表的创建 { Listdouble *p1=NULL,*p2=NULL,*head=NULL; p1=(Listdouble*)malloc(sizeof(Listdouble)); scanf("%d",&p1->data); while(p1->data!=0) { if(head==NULL) { head=p1; p2=head; head->font=NULL; } else { p2->next=p1; p1->font=p2; p2=p1; } p1=(Listdouble*)malloc(sizeof(Listdouble)); scanf("%d",&p1->data); } p2->next=head; head->font=p2; return head; } Listdouble *Insert(Listdouble *head)//链表的插入数据 { Listdouble *p1,*q; q=(Listdouble*)malloc(sizeof(Listdouble)); printf("请输入要插入的数据:\n");

scanf("%d",&q->data); p1=head; while(p1->next!=head) { if(q->data<=p1->data&&p1==head) { q->next=head; q->font=head->font; head->font->next=q; head->font=q; head=q; break; } if(p1->data<q->data&&p1->next->data>=q->data) { q->next=p1->next; q->font=p1; p1->next->font=q; p1->next=q; break; } p1=p1->next; } if(p1->next==head&&q->data>p1->data)//判断最后一个节点的与插入值得大小 { q->next=head; q->font=p1; p1->next=q; head->font=q; } return head; } Listdouble *Del(Listdouble *head)//链表的删除 { Listdouble *p1,*p2=NULL; int temp; printf("请输入要删除的节点元素:\n"); scanf("%d",&temp); p2=p1; while(p1->next!=head) { if(p1->data==temp&&p1==head)

{ head=head->next; p1->next->font=p1->font; p1->font->next=p1->next; } if(p1->data==temp) { p2->next=p1->next; p1->next->font=p2; } p2=p1; p1=p1->next; } if(p1->data==temp)//判断最后一个节点 { p2->next=p1->next; p1->next->font=p2; } p1=NULL; free(p1); return head; }

Listdouble* change(Listdouble *head)//修改链表中的数据 { Listdouble *p1; int data,temp; printf("请输入修改前的值:\n"); scanf("%d",&data); printf("请输入修改后的值:\n"); scanf("%d",&temp); p1=head; while(p1->next!=head) { if(p1->data==data) p1->data=temp; p1=p1->next; } if(p1->data==data)//判断最后一个节点 p1->data=temp; else

printf("未找到要修改的数据!\n"); return head; } void print(Listdouble *head) { int i; Listdouble *p1; p1=head; // while(p1!=NULL) for(i=0;i<10;++i) { printf("%d ",p1->data); p1=p1->next; // p1=p1->font;//倒序输出 } } void main() { Listdouble* head; head=CreatList(); // head=Del(head); // head=Insert(head); head=change(head); print(head); }


相关文档

链表的增删改查
双链表增删改查
双向循环链表,最易读懂的插入,删除,查找,并且显示长度
C语言中双向链表的增删改查输出头文件代码
c++课程设计《链表的实现-增删改查》
C语言中双向链表的增删改查输出源文件代码
c言语链表的增删查改(最简单)
C语言 双向循环链表、增删查改、判断回文、排序、论文+代码
C语言链表实现增删改查
链表的操作(增删改查)及逆置链表
电脑版