数据结构(C语言版)第二章 线性表.ppt_第1页
数据结构(C语言版)第二章 线性表.ppt_第2页
数据结构(C语言版)第二章 线性表.ppt_第3页
数据结构(C语言版)第二章 线性表.ppt_第4页
数据结构(C语言版)第二章 线性表.ppt_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章线性表 线性结构 线性结构是一个数据元素的有序 次序 集合 它有四个基本特征 1 集合中必存在唯一的一个 第一元素 2 集合中必存在唯一的一个 最后元素 3 除最后元素之外 其它数据元素均有唯一的 后继 4 除第一元素之外 其它数据元素均有唯一的 前驱 第一节线性表的类型定义2 1 1抽象数据类型线性表的定义 通常可以下列 n个数据元素的序列 表示线性表 Linear List a1 a2 ai 1 ai ai 1 an 序列中数据元素的个数n定义为线性表的表长n 0时的线性表被称为空表称i为ai在线性表中的位序 线性表的抽象数据类型的定义 ADTList 数据对象 D ai ai ElemSet i 1 2 n n 0 数据关系 R1 ai 1 ai D i 2 n 基本操作 结构初始化 InitList L 操作结果 构造一个空的线性表L 销毁结构 DestroyList L 初始条件 线性表L已存在 操作结果 销毁线性表L 引用型操作 ListEmpty L 初始条件 线性表L已存在 操作结果 若L为空表 则返回TRUE 否则返回FALSE ListLength L 初始条件 线性表L已存在 操作结果 返回L中元素个数 PriorElem L cur e pre e 初始条件 线性表L已存在 操作结果 若cur e是L中的数据元素 则用pre e返回它的前驱 否则操作失败 pre e无定义 NextElem L cur e next e 初始条件 线性表L已存在 操作结果 若cur e是L中的数据元素 则用next e返回它的后继 否则操作失败 next e无定义 GetElem L i e 初始条件 线性表L已存在 1 i LengthList L 操作结果 用e返回L中第i个元素的值 LocateElem L e compare 初始条件 线性表L已存在 compare 是元素判定函数 操作结果 返回L中第1个与e满足关系compare 的元素的位序 若这样的元素不存在 则返回值为0 ListTraverse L visit 初始条件 线性表L已存在 visit 为元素的访问函数 操作结果 依次对L的每个元素调用函数visit 一旦visit 失败 则操作失败 加工型操作 ClearList L 初始条件 线性表L已存在 操作结果 将L重置为空表 PutElem L i e 初始条件 线性表L已存在 1 i LengthList L 操作结果 L中第i个元素赋值同e的值 ListInsert L i e 初始条件 线性表L已存在 1 i LengthList L 1 操作结果 在L的第i个元素之前插入新的元素e L的长度增1 ListDelete L i e 初始条件 线性表L已存在且非空 1 i LengthList L 操作结果 删除L的第i个元素 并用e返回其值 L的长度减1 ADTList 2 1 2线性表类型的应用 例1已知集合A和B 求两个集合的并集 使A A B 且B不再单独存在 分析 以线性表LA和LB分别表示集合A和B 对集合B中的所有元素一个一个地检查 将存在于线性表LB中而不存在于线性表LA中的数据元素插入到线性表LA中去 具体操作步骤为 1 从线性表LB中取出一个数据元素 2 依值在线性表LA中进行查询 3 若不存在 则将它插入到LA中 重复上述三步直至LB为空表止 对应的线性表基本操作 1 ListDelete LB 1 e 2 LocateElem LA e equal 3 ListInsert LA n 1 e voidunion List 销毁线性表LB union 例2已知一个 非纯集合 B 试构造一个集合A 使A中只包含B中所有值各不相同的数据元素 分析 将每个从B中取出的元素和已经加入到集合A中的元素相比较 voidpurge List for purge 例3判别两个集合是否相等 分析 首先判别两者的表长是否相等 在表长相等的前提下 对于一个表中的所有元素 是否都能在另一个表中找到和它相等的元素 如果 集合 中的元素不能保证都相异 还应反过来判别LB中每个元素都能在LA中找到相同者 2 2线性表的顺序存储结构 线性表的顺序存储结构是指用一组连续的存储单元依次存储线性表中的每个数据元素 L为每个数据元素所占据的存储单元数目 位置的计算公式为 LOC ai 1 LOC a1 i 1 L 顺序存储结构的特点 1 利用数据元素的存储位置表示线性表中相邻数据元素之间的前后关系 即线性表的逻辑结构与存储结构 物理结构 一致 2 在访问线性表时 可以利用上述给出的数学公式 快速地计算出任何一个数据元素的存储地址 defineLIST MAX LENGTH100 线性表的最大长度typedefstruct EntryType item 指向存放线性表中数据元素的基地intlength 线性表的当前长度 SQ LIST 典型操作的算法实现 1 初始化线性表LintInitList SQ LIST 成功返回OK 2 销毁线性表LvoidDestroyList SQ LIST 释放线性表占据的所有存储空间 3 清空线性表LvoidClearList SQ LIST 将线性表的长度置为0 4 求线性表L的长度intGetLength SQ LISTL return L length 5 判断线性表L是否为空intIsEmpty SQ LISTL if L length 0 returnTRUE elsereturnFALSE 6 获取线性表L中的某个数据元素的内容intGetElem SQ LISTL inti EntryType 7 在线性表L中检索值为e的数据元素intLocateELem SQ LISTL EntryTypee for i 0 i L length i if L item i e returni 1 return0 8 在线性表L中第i个数据元素之前插入数据元素eintListInsert SQ LIST 9 将线性表L中第i个数据元素删除intListDelete SQ LIST 2 3线性表的链式存储结构 线性表顺序存储结构的特点 它是一种简单 方便的存储方式 它要求线性表的数据元素依次存放在连续的存储单元中 从而利用数据元素的存储顺序表示相应的逻辑顺序 这种存储方式属于静态存储形式 暴露的问题l在做插入或删除元素的操作时 会产生大量的数据元素移动 l对于长度变化较大的线性表 要一次性地分配足够的存储空间 但这些空间常常又得不到充分的利用 l线性表的容量难以扩充 链式存储结构是指用一组任意的存储单元 可以连续 也可以不连续 存储线性表中的数据元素 为了反映数据元素之间的逻辑关系 对于每个数据元素不仅要表示它的具体内容 还要附加一个表示它的直接后继元素存储位置的信息 假设有一个线性表 a b c d 术语 每个数据元素的两部分信息组合在一起被称为结点其中表示数据元素内容的部分被称为数据域 data 表示直接后继元素存储地址的部分被称为指针或指针域 next 单链表简化的图形描述形式 head是头指针 它指向单链表中的第一个结点 这是单链表操作的入口点由于最后一个结点没有直接后继结点 所以 它的指针域放入一个特殊的值NULL NULL值在图示中常用 符号表示 带头结点的单链表 为了简化对链表的操作 人们经常在链表的第一个结点之前附加一个结点 并称为头结点 这样可以免去对链表第一个结点的特殊处理 链式存储结构的特点 1 线性表中的数据元素在存储单元中的存放顺序与逻辑顺序不一定一致 2 在对线性表操作时 只能通过头指针进入链表 并通过每个结点的指针域向后扫描其余结点 这样就会造成寻找第一个结点和寻找最后一个结点所花费的时间不等 具有这种特点的存取方式被称为顺序存取方式 链式存储结构的类型定义 typedefstrcutnode 结点类型EntryTypeitem structnode next NODE typedefstruct 链表类型NODE head LINK LIST 典型操作的算法实现 1 初始化链表LintInitList LINK LIST 2 销毁链表LvoidDestoryList LINK LIST 3 清空链表LvoidClearList LINK LIST 释放p结点占据的存储空间 4 求链表L的长度intListLength LINK LISTL NODE p intlen for p L head len 0 p next NULL p p next len return len 5 判链表L空否 intIsEmpty LINK LISTL if L head next NULL returnTRUE elsereturnFALSE 6 通过e返回链表L中第i个数据元素的内容voidGetElem LINK LISTL inti EntryType 将第i个结点的内容赋给e指针所指向的存储单元中 7 在链表L中检索值为e的数据元素NODE LocateELem LINK LISTL EntryTypee NODE p for p L head next p 8 返回链表L中结点e的直接前驱结点NODE PriorElem LINK LISTL NODE e NODE p if L head next e returnNULL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论