第2章-3数据结构循环链表.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第2章-3数据结构循环链表

循环链表的概念 循环链表是线性表的另一种链式存储结构,它的特点是将线性链表的最后一个结点的指针指向链表的头结点 循环链表图示 说明 对循环链表,有时不给出头指针,而是给出尾指针 循环链表与线性链表操作的主要差别是算法中循环结束的条件不是p或p-next是否为NULL,而是它们是否等于某一特定指针(头指针/尾指针); 在解决某些实际问题时,循环链表要比线性链表方便些。如将一个链表链在另一个链表的后面; 双向链表的概念 双向链表中,每个结点有两个指针域,一个指向直接后继元素结点,另一个指向直接前趋元素结点。 双向链表图示 顺序表和链式表的比较 基于时间的考虑 顺序存储是一种随机存取的结构, 而链表则是一种顺序存取的结构。 基于空间的考虑 顺序表的存储空间是静态分配的 链表的存储空间是动态分配的 基于语言考虑 作业: 一元多项式的表示及相加 数学表示: 1. 用顺序表实现一元多项式的相加 2. 用单向链表实现一元多项式的相加 2. 用单向链表实现一元多项式的相加 3. 用单向链表实现一元多项式相加的算法 一元多项式的乘法() 稀疏矩阵的运算与实现 * * (a) 非空表 (b)空表 head head a1 an a2 2.3.2 循环链表 (c) 给出尾指针的循环链表 rear a1 an a2 p=a-next; q=b-next; a-next=q-next; b-next=p; free(q); p a a1 an a2 q b b1 bn b2 p a a1 an a2 q b b1 bn b2 存储数据元素 存储后继结点 的地址 存储前趋结点 的地址 data prior next 结点 (a) 结点图示 2.3.3 双向链表 (b)空的双向循环链表 head-prior=head-next (c)非空的双向循环链表 typedef struct DulNode { ElemType data; struct DulNode *prior; struct DulNode *next; }dulNode,*DulLinkList; head a b head 双向链表结点结构类型定义: p ① ② ③ ④ a b x s … … 双向链表的基本操作算法 插入 ① S-prior=p-prior; ② p-prior-next=S; ③ S-next=p; ④ p-prior=S ; 删除 ① p-prior-next=p-next; ②?p-next-prior=p-prior; p a c b … … ① ② p-prior p-next 插入操作算法 status ListInsert_DulSL(DulLinkList L, int i, Elemtype e) { dulLinkList p=L; int j=0; do { p=p-next; j++; }while(p!=L ji); if (p==L || ji) return ERROR; s=(DulNode*) malloc (sizeof(dulNode)) if (!s) return OVERFLOW; s-data=e; s-prior=p-prior; p-prior-next=s; s-next=p; p-prior=s; return OK; } p ① ② ③ ④ a b e s … … 删除操作算法 status ListDelete_dulLS(DulLinkList L, int i, Elemtype e) { dulLinkList p=L; int j=0; do { p=p-next; j++; }while(p!=L ji); if(p==L || ji) return ERROR; e=p-data; p-prior-next=p-next; p-next-prior=p-prior; free(p); return OK; } p a c b … … ① ② 在不设“指针” 的编程语言中能否使用线性链表?我们可用一维数组来表示并实现线性链表及其相关操作。 首先定义一下数据类型: #define MAXSIZE 1000 //链表的最大长度 typedef struct{ ElemType data; int cur; }SNode, SLinkList[MAXSIZE]; 用数组的一个分量表示一个结点

文档评论(0)

jgx3536 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档