杭州电子科技大学数据结构课件chap002.ppt

  1. 1、本文档共105页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
杭州电子科技大学数据结构课件chap002

第二章 线性表 线性表是一种最简单的线性结构 线性表的概念 本章提要 2.1 线性表的类型定义 抽象数据类型线性表的定义: InitList( L ) DestroyList( L ) ListEmpty( L ) ListLength( L ) PriorElem( L, cur_e, pre_e ) NextElem( L, cur_e, next_e ) GetElem( L, i, e ) LocateElem( L, e, compare( ) ) ListTraverse(L, visit( )) ClearList( L ) PutElem( L, i, e ) ListInsert( L, i, e ) ListDelete(L, i, e) 利用上述定义的线性表 可以实现其它更复杂的操作 例 2-1 上述问题可演绎为: 操作步骤: 例 2-2 处理思路: // La 和 Lb 均非空,i = j = 1, k = 0 while (i = La_len) { // 当La不空时 GetElem(La, i++, ai); ListInsert(Lc, ++k, ai); } // 插入 La 表中剩余元素 2.2 线性表类型的实现 ----顺序映象 顺序映象 顺序映像的 C 语言描述 线性表的基本操作在顺序表中的实现 例 2-2在顺序结构下实现的算法 Status InitList_Sq( SqList L ) { 例如:顺序表 int LocateElem_Sq(SqList L, ElemType e, Status (*compare)(ElemType, ElemType)) { 线性表操作 ListInsert(L, i, e)的实现: (a1, …, ai-1, ai, …, an) 改变为 (a1, …, ai-1, e, ai, …, an) 考虑移动元素的平均情况: 线性表操作 ListDelete(L, i, e)的实现: 考虑移动元素的平均情况: 2.3 线性表类型的实现 ---链式映象 讨论: 一、单链表 二、结点和单链表的 C 语言描述 三、单链表操作的实现 对于例2.2(有序表的合并),可直接写出在链式存储结构下的算法: 线性表的操作 GetElem(L, i, e) 在单链表中的实现: Status GetElem_L(LinkList L, int i, ElemType e) { 线性表的操作 ListInsert(L, i, e) 在单链表中的实现: Status ListInsert_L(LinkList L, int i, ElemType e) { 线性表的操作ListDelete (L, i, e) 在单链表中的实现: Status ListDelete_L(LinkList L, int i, ElemType e) { 操作 ClearList(L) 在单链表中的实现: 如何生成一个单链表? 例如:逆位序输入 n 个数据元素的值, 建立带头结点的单链表。 void CreateList_L(LinkList L, int n) { 用上述定义的单链表实现线性表的操作时, 应注意的问题: 四、其它形式的链表 1. 循环链表 Status GetElem_L(LinkList L, int i, ElemType e) { Status GetElem_L(LinkList L, int i, ElemType e) { 循环链表的一种变形: 例:将两个循环链表首尾相接。 2. 双向链表 双向链表的结构可定义如下: 双向链表示意图 若p为指向双向链表中的某一个结点ai的指针,则显然有:  p-next-prior==p-prior-next==p 在双向链表中,有些操作如:求长度、取元素、定位等,因仅需涉及一个方向的指针,故它们的算法与线性链表的操作相同;但在插入、删除时,则需同时修改两个方向上的指针,两者的操作的时间复杂度均为O(n)。 双向链表的操作特点: 插入-1 插入-2 双向链表的插入算法 删除 双向链表的删除算法 3. 双向循环链表 2.4 一元多项式的表示及相加 一元多项式 例如: 抽象数据类型一元多项式的定义如下: 基本操作: 一元多项式的实现: void add_poly(polynomial pa, polynomial pb) { //多项式加法:pa=pa+pb. 本章小结 顺序存储结构与链式存储结构的优缺点比较: 在计算机中,可以用一个线性表来

文档评论(0)

153****9595 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档