- 0
- 0
- 约3.25万字
- 约 10页
- 2019-05-06 发布于广东
- 举报
第一部分 线性结构 第二章 顺序表 第二章 顺序表 2.1 线性表 2.2 向量 2.3 栈 2.4 栈与递归 2.5 队列 2.1 线性表(linear list) 2.1.1 线性表的定义及运算 2.1.2 线性表的存储结构 2.1.1 线性表的定义及运算 1.线性表的定义 线性表是具有相同属性的数据元素的有限序列 由结点集D的n(n≥0)个数据元素(结点)a1, a2, a 3, ··· , an ,以及定义在结点集D上的线性关系r所组成的数据结构 其中: n为数据元素的个数,也称为表的长度 当n=0 时,称为空表。 非空的线性表(n0) 记作: ( a1,a2,a3, ···, an) 2.1.1 线性表的定义及运算 2. 线性表(a1,a2,a3, ……an)的逻辑特征 (1)有且仅有一个开始结点a1(无直接前趋) (2)有且仅有一个终端结点an(无直接后继) (3)其余的结点ai (2≤i≤n-1) 有且仅有一个直接前趋ai-1和一个直接后继ai+1 (4)ak (1≤k≤n)是属于某个数据取值空间的元素,它可以是一个数字、一个字母或一个记录、··· ··· (5)线性表的关系r,简称前驱关系,具有反对称性和传递性 2.1.1 线性表的定义及运算 3. 线性表的特性 (1)线性表中的所有数据元素的数据类型是相同的 (2)数据元素在线性表中的位置只取决于它的序号 (3)结点间的逻辑关系是线性的 例3、学生健康情况登记表如下: 2.1.1 线性表的定义及运算 4. 线性表的运算 数据的运算是定义在逻辑结构上的,而具体的实现则在存储结构上进行。 (1)存取 (2)插入 (3)删除 (4)查找 (5)排序 (6)求线性表的长度 (7)合并 (8)分解 基 本 运 算 2.1.2 线性表的存储结构 定长的一维数组结构 又称向量型的顺序存储结构——顺序表 向量、栈、队列 变长的线性表存储结构 链接式存储结构——链表 串结构、动态数组、以及顺序文件 2.2 向量 1. 定义 用一组连续的存储单元(地址连续)依次存放线性表的各个结点 2.2 向量 2. 向量的数据元素的存储地址 ①若一个数据元素仅占一个字节,则其存储方式参见下图 2.2 向量 ②若每个数据元素占用m个字节,则 第i个数据元素的存储位置为: LOC(a i)=loc(a 1)+(i-1)*m loc(a 1)称为基地址(第一个数据元素的存储位置) 显然,数据元素在向量中位置取决于数据元素在线性表中的位置 顺序表的特点:逻辑位置相邻的数据元素,其物理位置也相邻 2.2 向量 3. 向量的描述 #define M 200 //线性表存储空间的分配量 typedef int ElmType; //定义数据元素的类型 typedef struct { ElmType *elem; //存储空间基址 int length; //线性表的当前长度 int listsize; //当前分配的存储容量 } Victor; //向量类型描述1 type ElmType Victor[M]; //向量类型描述2 2.2 向量 4. 向量的运算 取第i个元素 修改第i个元素 插入元素 删除元素 按要求重排元素的顺序 在向量中查找满足某条件的元素 2.2 向量 (1)插入运算 在第i(1≤i≤n)个元素之前插入一个新的数据元素x,使长度为n的线性表变为长度为n+1的线性表: ( a1, a2,···,ai-1,ai,···,an) 2.2 向量 插入算法的思想: (设向量v已存在,其长度为n ,i, x为已知参数) ①若i=n+1,则将x插入到表尾(n为表的长度); ②若表长度n0或插入位置不适当i1或in+1,则返回错误信息; ③当1≤i≤n时,则从表尾开始到第i个元素 (an an-1,···, ai+1, ai )依次向后移动一个位置(共需移动 n-i+1个数据元素) ④最后将x存入表中,表长n增1,插入成功 算法描述 (设向量v已存在,其长度为n ,i, x为已知参数) 算法VI[在长度为n的向量v的第i个元素前插入元素x] VI1[判断i值是否合法] 如果i1或in+1,则返回错误信
原创力文档

文档评论(0)