[计算机类论文精品]c语言数据结构双链表源代码.doc
《[计算机类论文精品]c语言数据结构双链表源代码.doc》由会员分享,可在线阅读,更多相关《[计算机类论文精品]c语言数据结构双链表源代码.doc(7页珍藏版)》请在三一办公上搜索。
1、c语言数据结构双链表源代码/*双链表的创建。此双链表要求为带头节点的,为了算法方便特采用了循环双链表。通过编程发现带头节点的也有其不便之处。为了保持表的一直有序性思考如下:1:表的一开始的创建就要有序。2:插入元素后要做到仍然有序。3:删除元素不会改变表的有序性4:所谓有序,即为非降序或者非升序排列。5:为了做到以上几点,考虑到链表的不易排序性质,特设置一个线性表作为输入缓存空间进行事先排序。关于排序的方法有多种,为了快速完成采用了较为简单的插入排序。copyright :yywill 帖请注明,做人要厚道*/#include typedef struct LNode int data; st
2、ruct LNode *next; struct LNode *prior;*Link,Position;typedef struct List_Struct /* 头节点 */ Link head,tail; int len; int value; /* 0表示升序/非降序排列,1表示降序/非升序排列 */LinkList,*List;/*/MakeNode(Link p,List l,int e) /* 创建节点 */ List InitList(); p-data=e; l-tail=p;/* 此函数只设置尾节点,因为头节点只要设置一次 */*/List InitList() /* 初始
3、化建立双链表 */ LinkList *l; l=(LinkList *)malloc(sizeof(LinkList); l-len=0; l-head=l-tail;/* 当头节点和尾节点指向同一地址时候表示为空表 */ return l;/*/CreateList(int n,List l,int *e) /* 1.建立一个有序的带表头结点的双链表 */ /* n为元素个数 */int i,elem;Position *p1,*p2;Sort(n,e) ;p1=(Position *)malloc(sizeof(Position);elem=e1 ;MakeNode(p1,l,elem)
4、;/* 第一个节点 */p1-next=p1;p1-prior=p1;l-head=p1;l-len=1; if(n=0)return;/* 如果链表只有一个项则不用执行下面的函数,直接退出 */ for(i=2;ilen)+;/* 表长度计数,每循环一次加一 */ p1-next=p2;p2-next=l-head; l-head-prior=p2;p2-prior=p1;p1=p2; l-value=1;/* 默认为非升序创建 */*/ListTraverse(List l) /* 遍历链表 */int i=0;Link p;p=l-head;printf(); for(;ilen;i+)
5、 printf(%d,p-data); p=p-next ; printf();/*/ConListTraverse(List l) /* 反向遍历链表 */int i=0;Link p;p=l-tail;printf(); for(;ilen;i+) printf(%d,p-data); p=p-prior ; printf();/*/Reverse(List l) /* 5.逆置该双链表 */int i=0;Link p1,p2;List l1,l2;p1=l-head;l1=l;p2=l1-head;l1-head=l1-tail;l1-tail=p2; for(;ilen;i+) p2
6、=p1-next; p1-next=p1-prior; p1-prior=p2; p1=p1-prior; if(l-value=1)l-value=0; else l-value=1;/*/LocateElem(int i,List l) /* 3.按位置号查找该双链表 */int j,n;Link p;n=l-len;if(in&n1) printf(nerror!it is not exist!);return ;if(ihead ; for(j=0;jnext; printf(nthe elem_value is:%d,p-data); else p=l-tail ; for(;ipr
7、ior; printf(nthe elem_value is:%d,p-data); /*/int GetCurElem(int n,List l) /* 4.按结点值查找该双链表 */ /* 如查找成功则返回所在位置,如找不到则返回0 */Link p;int i;p=l-head; for(i=0;ilen;i+) if(p-data=n)return i+1; p=p-next; return 0;/*/int InsBefore(Position *p,int e,List l) /* 6.向前插入一个元素 */ /* 1=ndata=e ;s-prior=p-prior;p-prio
8、r-next=s;s-next=p;p-prior=s;l-len=(l-len+1);return 1;/*/int Ins(int e,List l) /* 6.插入一个元素 ,使表仍然保持有序 */Link p,p1,p2;int i;if(l-value=1)/* 降序 */ p=l-head; /* 从头部开始搜寻 */ for(i=1;ilen;i+) p=p-next; if(p-data=e&ehead-data)InsBefore(p,e,l);return 1; /* e比当前元素大且比头元素(即最大的元素)小 */ else if(l-value=0)/* 升序 */ p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机类论文精品 计算机 论文 精品 语言 数据结构 双链表 源代码

链接地址:https://www.31ppt.com/p-2385069.html