学习严蔚敏数据结构: 第三集

来源:互联网 发布:马前课指算法日加时 编辑:程序博客网 时间:2024/04/30 17:46

今天是线性表:

 

第二章 线性表线性结构是一个数据结构的有序值(有序指 次序上的有序)线性结构的基本特征:1. 集合中必存在唯一的一个"第一元素"2. 集合中必存在唯一的一个"最后元素"3. 除最后元素在外, 均有"唯一的后继"4. 除第一元素之外, 均有"唯一的前驱"2.1 线性表的类型定义定义基本操作:1. {结构初始化} InitList(&L)    操作结果: 构造一个空的线性表L2. {销毁结构} DestroyList(&L)    初始条件: 线性表L不存在;    操作结果: 销毁线性表L3. {引用型操作} : 操作的结果不改变这个线性表的结构   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中第一个与e满足关系compare()的元素的位序. 若这样的元素不存在, 则返回值为0   ListTravese(L, visit()) 遍历初始条件: 线性表L已存在操作结果: 依次对L的每个元素调用函数visit(). 一旦visit()失败, 则操作失败4. {加工型操作} 操作的结果改变了这个线性表结构   ClearList(&L) 将线性表清空初始条件: 线性表L已存在操作结果: 将L重置为空表   PutElem(L, i, &e) 向i位的元素赋新的值初始条件: 线性表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已存在且非空操作结果: 删除L的第i个元素, 并用e返回其值, L的长度减1利用上述定义的线性表, 可以完成其他更复杂的操作例一: 求两个集合A, B的交集解决代码: 例二: 剔除非纯集合B中的重复项解决代码: 如果Lb实现排序完毕, 那么算法可以如下: 例三: 归并两个"其数据元素按值非递减有序排列的"线性表La和Lb, 求得线性表Lc也具有同样特性1. 分别从La和Lb中取得当前元素ai和bj;2. 若ai<=bj, 则将ai插入到Lc中, 否则将bj插入到Lc中算法如下:2.2 线性表类型的实现 - 顺序映像用一组地址连续的存储单元 依次存放线性表中的数据元素第一个元素的存储地址称为线性表的起始地址, 也即基地址, 其他所有元素的存储位置都取决于此基地址顺序映像的C语言描述:今天就开始讲各种抽象数据结构了首先讲的就是线性表, 所谓线性, 指的是按一定次序排列的列表我想到的就是数组, 集合类...后面是线性表的特征, 总之就是一条线的感觉, 就像排队一样站, 很容易联想起来以前做操线性表的定义, 哗...那么长的数学符号...我打不出来...也懒得大, 大家凑合看把, 意思理解OK在后面是线性表的基本操作是不是觉得很面熟啊, 反正我是觉得很面熟, 这丫的不就是集合类的通用操作...下面就是几个例子, 我感觉算法和数据结构都在讲...最后用C写了个顺序表, 具体的还得明天继续看今天就写这么多把...可能是手受伤了...心情受影响...没联想起来太多东西
原创粉丝点击