欢迎来到天天文库
浏览记录
ID:44869123
大小:34.01 KB
页数:3页
时间:2019-10-31
《数据结构双链表实现代码》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、数据结构双链表实现函数#include#include/*――――――――――――双向链表的定义――――――――――――*/structllist{structllist*prior;intnum;structllist*next;};typedefstructllistnode;typedefnode*llink;/*――――――――――――双向链表的输出――――――――――――*/voidprintllist(llinkhead){llinkptr;ptr=head->next;while(ptr!=NULL){printf("[%d]",ptr
2、->num);ptr=ptr->next;}printf("");}/*――――――――――――双向链表的倒序输出――――――――――*/voidprintllist2(llinkhead){llinkptr;ptr=head;while(ptr->next!=NULL){ptr=ptr->next;}while(ptr!=head){printf("[%d]",ptr->num);ptr=ptr->prior;}printf("");}/*――――――――――――双向链表的创建―――――――――――*/llinkcreatellist(int*array,intlen){lli
3、nkhead;/*双向链表的开始指针*/llinkptr,ptr1;inti;/*建立开头结点*/head=(llink)malloc(sizeof(node));/*分配内存*/if(!head)/*检查指针*/returnNULL;ptr=head;/*将ptr指向链表开始*/for(i=0;inum=array[i];/*建立结点内容*/ptr1->next=NULL;/*设定指针初值*/ptr1->prior=NULL;
4、ptr->next=ptr1;/*连接结点*/ptr1->prior=ptr;ptr=ptr->next;}returnhead;}/*―――――――――――双向链表的结点插入――――――――――*/llinkinsertnode(llinkhead,llinkptr,intvalue){llinknew1,ptr1=head;/*新结点指针变量*/while(ptr1!=ptr)ptr1=ptr1->next;if(!ptr1){printf("找不到插入位置,插入位置有误");returnhead;}new1=(llink)malloc(sizeof(node));if(!new
5、1)returnNULL;new1->num=value;/*设定初值*/new1->next=NULL;new1->prior=NULL;new1->next=ptr->next;/*交换4个指针*/ptr->next->prior=new1;ptr->next=new1;new1->prior=ptr;returnhead;/*返回头结点*/}/*―――――――――――双向链表的结点删除――――――――――-*/llinkdeletenode(llinkhead,llinkptr){if(!(head->next)){/*链表为空直接返回头指针*/printf("删除链表为空")
6、;returnhead;}llinkprevious;previous=head;if(ptr){while(previous->next!=ptr)/*找结点ptr前一结点*/previous=previous->next;/*找结点ptr前一结点之后进行删除操作*/previous->next=ptr->next;ptr->next->prior=previous;/*删除中间结点*/}else{while(previous->next->next!=NULL)previous=previous->next;ptr=previous->next;previous->next=ptr-
7、>next;}free(ptr);returnhead;/*返回头结点*/}/*―――――――――――――主程序――――――――――――――*/voidmain(){intllist1[6]={1,2,3,4,5,6};llinkhead;/*建立链表并输出*/head=createllist(llist1,6);if(!head){printf("内存分配失败!");exit(1);}printf("原来的链表:");prin
此文档下载收益归作者所有