- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4讲其他形式链表
第4讲 其他形式链表 4.1 循环链表 4.2 双链表 单链表: 循环单链表: 特点: 尾结点的指针指向表头结点(head = rear-next) 可从表中任一结点出发遍历链表 空循环链表: head-next==head 与单链表的异同: 遍历中止及判断尾结点条件不同 数据类型相同,各种运算基本一致 4.1 循环单链表 head ^ head head rear 例1:已建有一个学生循环链表,打印输出该表中的所有学生的相关信息 void Output(LinkList head) { LinkList p; for(p=head-next; p!=head; p=p-next) printf(\n%d\t%s\t%d,p-info.num, p-info.name, p-info.score); } 例2:已知尾指针的两个循环单链表的合并 LinkList Connect(LinkList ra, LinkList rb) { LinkList p, q; p=ra-next; q=rb-next; ra-next=q-next; rb-next=p; free(q); return rb; } ra rb p q 1 1 2 3 释放 T(n)=O(1) 4 思考:若是单链表合并则 T(n)=? 4.2 双向链表 prior info next 数据域 后继地址 存储结构: 一个结点有两个指针域,一个记录前躯地址,一个记录后继地址 结点组成: 前躯地址 双向(循环)链表示例: info info info ∧ ∧ head 类型定义: 设数据域类型为datatype,结点类型为: typedef struct dnode{ datatype info; struct dnode *prior, *next;/*prior指向前驱,next指向后继*/ }DLNode, *DList; 定义双向链表的头指针 DList head; 或 DLNode *head; 运算实现: a b c 把s结点插入p结点之前 p x 3 1 4 2 (1) s-prior=p-prior; (2) s-next=p; (3) p-prior-next=s; (4) p-prior=s; s 运算实现: a b c 把s结点插入p结点之后 p x 4 1 3 2 (1) s-next=p-next; (2) s-prior=p; (3) p-next-prior=s; (4) p-next=s; s 运算实现: a b c 删除p结点 p (1) p-prior-next=p-next; (2) p-next-prior=p-prior; (3) free(p); 2 1 3 释放 例:建一个按成绩升序的双向循环学生链表(带头结点) 先建一个双向循环空链表 head=(DList)malloc(sizeof(DLNode)); head-prior=head-next=head; 每次生成一个学生结点插入到链表中 head 算法实现: DList Create() { int n; DList head,p,s; head=(DList)malloc(sizeof(DLNode)); head-prior=head-next=head; /*建空表*/ while(1) { scanf(%d,n); if(n0) break; s=(DList)malloc(sizeof(DLNode)); s-info.num=n; scanf(%s%d,s-info.name,s-info.score); for(p=head-next; p!=head p-info.scores-info.score; ) p=p-next; /*s插在p之前*/ s-prior=p-prior; snext=p; p-prior-next=s; p-prior=s; /*插入*/ } return head; } ? 本讲小结 循环单链表与单链表区别、运算实现 双向链表结点数据类型、插入删除
您可能关注的文档
最近下载
- u市场管理规范.doc VIP
- 癫痫病人的围术期麻醉管理.pptx VIP
- 特殊教育概论第二版全套完整教学课件.pptx
- 《银屑病的治疗》课件.ppt VIP
- 2023年下第三套广播操舞动青春全套教案.doc VIP
- 新人教版八年级上册物理全册课件(2024年秋季新版教材).pptx
- 中建七局《准代建模式EPC项目策划总结交流材料》.pptx VIP
- 2025南京卫生高等职业技术学校工作人员招聘考试真题.docx VIP
- 运动控制系统安装与调试(第2版)课件全套 甄久军 项目1--5 典型运动控制系统的认知与装调 ---伺服电动机运动控制系统的调试.pptx
- 成都高新区街道面向社会公开招聘2025年第一批次编外聘用人员笔试备考试题及答案解析.docx VIP
文档评论(0)