2022年数据结构C语言版_双向链表表示和实现 .pdf
《2022年数据结构C语言版_双向链表表示和实现 .pdf》由会员分享,可在线阅读,更多相关《2022年数据结构C语言版_双向链表表示和实现 .pdf(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C 语言版#include #include #include typedef int ElemType; / 线性表的双向链表存储结构typedef struct DuLNode ElemType data; /数据域struct DuLNode *prior,*next; /前驱后继指针DuLNode,*DuLinkList; / 产生空的双向循环链表L int InitList(DuLinkList *L) *L=(DuLinkList)malloc(sizeof(DuLNode); / *L指向头结点if(*L) / 将头结点的前驱后继都指向头结点,这样构成了一个空表(*L)-next
2、=(*L)-prior=*L; return 1; else return 0; / 销毁双向循环链表L int DestroyList(DuLinkList *L) DuLinkList q,p=(*L)-next; / p指向第一个结点while(p!=*L) / p没到表头 q=p-next; free(p); p=q; free(*L); *L=NULL; return 1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 7 页 - - - - - - - -
3、- / 将 L 重置为空表int ClearList(DuLinkList L) DuLinkList q,p=L-next; / p指向第一个结点while(p!=L) / p没到表头 q=p-next; free(p); p=q; L-next=L-prior=L; / 头结点的两个指针域均指向自身,构成空表return 1; / 若 L 为空表(空表就是头结点的前驱后继都指向头结点),则返回1,否则返回0 int ListEmpty(DuLinkList L) if(L-next=L&L-prior=L) return 1; else return 0; / 返回 L 中数据元素个数in
4、t ListLength(DuLinkList L) int i=0; DuLinkList p=L-next; / p指向第一个结点while(p!=L) / p没到表头 i+; p=p-next; return i; / 当第 i 个元素存在时,其值赋给 e 并返回 1,否则返回0 int GetElem(DuLinkList L,int i,ElemType *e) int j=1; / j 为计数器DuLinkList p=L-next; / p指向第一个结点while(p!=L&jnext; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - -
5、 - - - - - 名师精心整理 - - - - - - - 第 2 页,共 7 页 - - - - - - - - - j+; if(p=L|ji) / 第 i 个元素不存在return 0; *e=p-data; / 取第 i 个元素return 1; / 返回 L 中第 1 个与 e 满足关系compare()的数据元素的位序。/ 若这样的数据元素不存在,则返回值为0 int LocateElem(DuLinkList L,ElemType e,int(*compare)(ElemType,ElemType) int i=0; DuLinkList p=L-next; / p指向第 1
6、 个元素while(p!=L) i+; if(compare(p-data,e) / 找到这样的数据元素return i; p=p-next; return 0; / 若 cur_e 是 L 的数据元素,且不是第一个,则用pre_e 返回它的前驱int PriorElem(DuLinkList L,ElemType cur_e,ElemType *pre_e) DuLinkList p=L-next-next; / p指向第 2 个元素while(p!=L) / p没到表头 if(p-data=cur_e) *pre_e=p-prior-data; return 1; p=p-next; re
7、turn 0; / 若 cur_e 是 L 的数据元素,且不是最后一个,则用next_e 返回它的后继int NextElem(DuLinkList L,ElemType cur_e,ElemType *next_e) DuLinkList p=L-next-next; / p指向第 2 个元素while(p!=L) / p没到表头名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 7 页 - - - - - - - - - if(p-prior-data=cur_e) *n
8、ext_e=p-data; return 1; p=p-next; return 0; / 在双向链表L 中返回第i 个元素的位置指针(算法 2.18、2.19 要调用的函数 ) DuLinkList GetElemP(DuLinkList L,int i) int j; DuLinkList p=L; for(j=1;jnext; return p; / 改进算法2.18 P36 / 在带头结点的双链循环线性表L 中第 i 个位置之前插入元素e,/ i 的合法值为1 i表长 +1 int ListInsert(DuLinkList L,int i,ElemType e) DuLinkList
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年数据结构C语言版_双向链表表示和实现 2022 数据结构 语言版 双向 表表 实现
限制150内