收藏 分享(赏)

第2章+链表.ppt

上传人:sjmd695 文档编号:4857433 上传时间:2019-01-16 格式:PPT 页数:25 大小:114.50KB
下载 相关 举报
第2章+链表.ppt_第1页
第1页 / 共25页
第2章+链表.ppt_第2页
第2页 / 共25页
第2章+链表.ppt_第3页
第3页 / 共25页
第2章+链表.ppt_第4页
第4页 / 共25页
第2章+链表.ppt_第5页
第5页 / 共25页
点击查看更多>>
资源描述

1、1,单链表(Singly Linked List) 循环链表(Circular List) 多项式及其相加 双向链表(Doubly Linked List) 稀疏矩阵,第二章 链表,2,单链表,特点每个元素(表项)由结点(Node)构成。线性结构 结点可以不连续存储表可扩充,3,单链表的存储映像,4,单链表中的插入与删除,插入第一种情况:在第一个结点前插入newnodelink = first ; first = newnode;,(插入前) (插入后),5,(插入前) (插入后),第二种情况:在链表中间插入newnodelink = plink; plink = newnode;,6,第三种

2、情况:在链表末尾插入newnodelink = plink; plink = last = newnode;,(插入前) (插入后),7,void List:Insert ( const int x, const int i ) /在链表第 i 个结点处插入新元素 x Node *p = first; int k = 0; while ( p != NULL ,8,删除 第一种情况: 删除表中第一个元素 第二种情况: 删除表中或表尾元素,在单链表中删除含ai的结点,9,带表头结点的单链表,表头结点位于表的最前端,本身不带数据,仅标志表头。 设置表头结点的目的是统一空表与非空表的操作,简化链表操

3、作的实现。,非空表 空表,10,在带表头结点的单链表:插入新结点,newnodelink = plink; if ( plink =NULL ) last = newnode;plink = newnode;,11,q = plink;plink = qlink;delete q;if ( plink = NULL ) last = p;,从带表头结点的单链表中删除一个结点,12,静态链表结构: 利用数组定义,运算过程中存储空间大小不变,13,循环链表 (Circular List),循环链表是单链表的变形。 循环链表最后一个结点的link 指针不为0(NULL),而是指向了表的前端。 为简化

4、操作,在循环链表中往往加入表头结点。 循环链表的特点是:只要知道表中某一结点的地址,就可搜寻到所有其他结点的地址。,14,循环链表的示例带表头结点的循环链表,15,用循环链表求解约瑟夫问题,约瑟夫问题的提法n 个人围成一个圆圈,首先从1开始一个人一个人顺时针报数, 报到第m个人,令其出列。然后再从下一个人开始,从1顺时针报数,报到第m个人,再令其出列,如此下去, 直到圆圈中只剩一个人为止。此人即为优胜者。 例如 n = 8 m = 3,16,17,约瑟夫问题的解法void Josephus ( int n, int m ) for ( int i=0; in-1; i+ ) /执行n-1次fo

5、r ( int j=0; jm-1; j+ ) Next ( );cout “Delete person ” getData ( ) endl; /数m-1个人Remove ( ); /删去 ,18,多项式及其相加,在多项式的链表表示中每个结点增加了一个数据成员link,作为链接指针。优点是: 多项式的项数可以动态地增长,不存在存储溢出问题。 插入、删除方便,不移动元素。,19,多项式(polynomial)类的链表定义 struct Term int coef; int exp; void Init ( int c, int e ) coef = c; exp = e; ;,20,多项式链表

6、的相加,AH = 1 - 10x6 + 2x8 +7x14 BH = - x4 + 10x6 - 3x10 + 8x14 +4x18,21,双向链表 (Doubly Linked List),双向链表是指在前驱和后继方向都能游历(遍历)的线性链表。 双向链表每个结点结构:前驱方向 后继方向 双向链表通常采用带表头结点的循环链表形式。,22,结点指向 p = plLinkrLink = prLinklLink,非空表 空表,23,搜索成功,搜索不成功,双向循环链表的搜索算法,24,plLink = current; prLink =currentrLink; currentrLink = p; current = currentrLink; currentrLinklLink = current;,双向循环链表的插入算法,25,currentrLinklLink = currentlLink; currentlLinkrLink = currentrLink;,双向循环链表的删除算法,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 统计图表

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报