- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]数据结构第二章:线性表
第 * 页 n a4 2.3 线性表的链式存储与实现 静态链表 用数组实现的链式结构,称为静态链表。 0 1 2 3 4 5 6 7 8 9 10 a4 a3 a1 a2 2 0 4 1 5 7 8 9 3 10 0 6 a3 a2 a1 L 通过下标,记录结点之间的关系 第 * 页 2.3 线性表的链式存储与实现 线性链表的特点 用一组任意的存储单元存储线性表中数据元素; 通过指针保存直接后继元素的存储地址来表示数据元素之间的逻辑关系; 通过头指针(或首结点)给出线性链表; 链表中结点空间是动态分配的; 插入、删除操作通过修改结点的指针实现; 只能顺序存取元素,不能直接存取元素。 第 * 页 2.3 线性表的链式存储与实现 循环链表(带有头结点的单向环表) 最后一个结点的指针域的指针又指回第一个结点(头结点)的链表。 a1 a2 … ... an 与单向链表的差别仅在于,判别链表中最后一个结点的条件不再是“后继是否为空”,而是“后继是否为头结点”。 h 空表 判断为是否空表的条件: h-next == h 第 * 页 2.3 线性表的链式存储与实现 循环链表的特点 从一个结点可找到链表中的任意一个结点; 判断是否为表尾结点的条件:p-next == L。 有时,用表尾指针表示循环链表。 p ai-1 ai a1 ai+1 n an L r ai-1 ai a1 ai+1 n an 第 * 页 2.3 线性表的链式存储与实现 双向链表 typedef struct DuLNode { ElemType data; // 数据域 struct DuLNode *prior; // 指向前驱的指针域 struct DuLNode *next; // 指向后继的指针域 } DuLNode, *DuLinkList; prior element next L 空双向循环链表: 非空双向循环链表: L A B 第 * 页 2.3 线性表的链式存储与实现 L 空双向循环链表: 非空双向循环链表: L A B p-prior-next = p = p-next-proir; a p b c 第 * 页 2.4 线性表的应用实例 一元多项式的表示及相加 可用线性表P表示 但对S(x)多项式浪费空间 一般 其中 用数据域含两个数据项的线性表表示 其存储结构可以用顺序存储结构,也可以用单链表 第 * 页 2.4 线性表的应用实例 单链表的结点定义 typedef struct node { int coef,exp; struct node *next; }JD; coef exp next -1 A 7 0 3 1 9 8 5 17 ^ -1 B 8 1 22 7 -9 8 ^ -1 C 7 0 11 1 22 7 5 17 ^ 第 * 页 2.4 线性表的应用实例 运算规则 假设:p,q分别指向A,B中某一结点,p,q初值是第一结点,结果放入A链中。 比较 p-exp与 q-exp p-exp q-exp: p结点是和多项式中的一项 p后移,q不动 p-exp q-exp: q结点是和多项式中的一项 将q插在p之前,q后移,p不动 p-exp = q-exp: 系数相加 =0:从A表中删去p, 释放p,q,p,q后移 ?0:修改p系数域, 释放q,p,q后移 直到p或q为NULL 若q==NULL,结束 若p==NULL,将B中剩余部分连到A上 第 * 页 线性表—链式存储与实现 1、线性表的顺序存储结构是通过何种方式表示元素之间的关系______。 A. 保存后继元素地址 B. 元素的存储顺序 C. 保存左、右孩子地址 D. 后继元素的数组下标 答案:B 2、当对一个线性表经常进行的是存取操作,而很少进行插入和删除操作时,则采用 ① 存储结构为宜,相反,当经常进行的是插入和删除操作时,则采用 ② 存储结构为宜。 答案:① 顺序 ② 链式 第 * 页 线性表—链式
文档评论(0)