数据结构 线性表.pptVIP

  • 19
  • 0
  • 约1.87万字
  • 约 71页
  • 2017-09-25 发布于北京
  • 举报
第二章 线性表 2.1 线性表的定义 2.1.1 线性表的逻辑结构 线性表是有限元素(e0,e1, ...,ei,...,en-1)的有序序列的集合。其中n是有穷自然数,表中的每个元素ei具有相同的特性,表中元素占用空间大小相同,记为:size,n是表的长度。当n=0时,表为空;当n0时,e0是第一个元素,en-1 是最后一个元素。 “有序”是指线性元素间的相互位置关系。ei-1是 ei的直接前驱元素,而元素ei一定在元素ei+1之前,称ei+1是ei的直接后继元素。而且,每个元素只有一个直接前驱元素(除第一个元素),也仅有一个直接后继元素(除最后一个元素)。 2.1.2 线性表的抽象数据类型 2.2 线性表的顺序存储及操作 2.2.1 线性表顺序存储 1. 线性表顺序存储概念 线性表顺序存储方式,是将线性表中的数据元素连续顺序地存放于存储器中相邻的单元 。 线性表占用的第一个存储单元的地址,就是线性表的首地址,也是线性表中第一个数据元素(e0)的首地址。 “首地址”有两种理解: 一是相对于线性表本身,是线性表的始点,即“0号地址”,这就是通常所说的“相对地址”; 二是相对于计算机的物理存储空间,线性表的始点相对于计算机物理存储空间则是一个“物理地址”,一般记为:location(e0),通常称为“绝对地址”或“基地址”。 2. 线性表顺序存储结构定义 线性表结构: typedef struct { EType *element; int length; int MaxSize; } LinearList; LinearList L,L1,L2; 学生信息的情况数据元素结构类型(EType)及线性表 typedef struct { unsigned number[10]; char name[8]; char sex[2]; int age; char place[20]; }student; typedef struct { student *element; int length; int MaxSize; } LinearList; LinearList stud1, stud2; 2.2.2 线性表顺序存储结构下的操作 1. 构造空线性表L 空线性表是指表中没有一个数据元素,但数据元素的空间和线性表结构存在 构造空线性表L算法(Creat) viod Creat(LinearList L , int MaxListSize) {// 构造一个最大容量为MaxListSize 的线性表L L.MaxSize = MaxListSize; L.element = new EType [L.MaxSize]; L.length = 0; } 算法的时间复杂性是O(1)。 2. 输出线性表L中的所有数据元素 输出线性表L中所有数据元素(Output) viod Output(LinearList L) {// 逐个地输出线性表L中的数据元素 for (int i = 0; i L.length; i++) cout L.element[i] ; } 算法的时间复杂性是O(length )。 3. 线性表L中取第k个元素 线性表L中将第k个元素取至x中算法(GetElem) bool GetElem(LinearList L, int k, EType x) { //L中第k个元素取至x中,如不存在返回false,找到返回true,x取回 if (k 1 || k L.length) return false x = L.element[k - 1]; return true; } 算法的时间复杂性是O(1 )。 4. 线性表L中查找元素x 线性表L中查找元素x(Search) int Search(LinearList L, const EType x) {// 查找x,如果找到,返回x所在的位置下标;如果未找到返回-1 for (int i = 0; i L.length; i++) if (L.element[i] == x) return i; return -1; } 算法的时间复杂性是O(length)。 一般是已知某个查找关键字(Searchkey),通过查找关键字与线性表中的数据元素的关键字的比较完成查找过程的,因此,算法查找的比较条件也可以表达为: if (L.element[i].key == Searchkey) 5. 线性表L

文档评论(0)

1亿VIP精品文档

相关文档