今天是线性表:
第二章 线性表 线性结构是一个数据结构的有序值(有序指 次序上的有序) 线性结构的基本特征: 1. 集合中必存在唯一的一个"第一元素" 2. 集合中必存在唯一的一个"最后元素" 3. 除最后元素在外, 均有"唯一的后继" 4. 除第一元素之外, 均有"唯一的前驱" 2.1 线性表的类型定义 定义 基本操作: 1. {结构初始化} InitList(&L) 操作结果: 构造一个空的线性表L 2. {销毁结构} DestroyList(&L) 初始条件: 线性表L不存在; 操作结果: 销毁线性表L 3. {引用型操作} : 操作的结果不改变这个线性表的结构 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写了个顺序表, 具体的还得明天继续看 今天就写这么多把...可能是手受伤了...心情受影响...没联想起来太多东西