第4讲+其他形式链表.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 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; } ? 本讲小结 循环单链表与单链表区别、运算实现 双向链表结点数据类型、插入删除

文档评论(0)

wyjy + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档