线性结构与非线性结构都可以是空的数据结构。根据具体情况来确定。
三、线性表及其顺序存储结构
考点6 线性表的基本概念
线性表是最简单、最常用的一种数据结构。 线性表是一组数据元素组成。
如:一个n维向量(x1,x2,…,xn)是一个长度为n的线性表,其中的每一个分量就是一个数据元素。
如:英文小写字母表(a, b, c, …, z)是一个长度为26的线性表,其中每一个小写字母就是一个数据元素。
如:一年中的四个季节(春,夏,秋,冬)是一个长度为4的线性表,其中的每一个季节名就是一个数据元素。 如:学生表,每条记录称为一个数据元素。
线性表是由n(n≥0)个数据元素a1, a2, …, an组成的一个有限序列,表中的每一个数据元素,除了第一个外,有且只有一个前件,除了最后一个外,有且只有一个后件。即线性表或是一个空表,或可以表示为:
(a1, a2, …,ai , …, an)
其中ai(i=1,2, …, n)是属于数据对象的元素,通常也称其为线性表中的一个结点。
显然,线性表是一种线性结构。数据元素在线性表中的位置只取决于它们自己的序号,即数据元素之间的相对位置是线性
的。
非空线性表有如下一些结构特征:
① 有且只有一个根结点a1,它无前件; ② 有且只有一个终端结点an,它无后件;
③ 除根结点与终端结点外,其他所有结点有且只有一个前件,也有且只有一个后件。线性表中结点的个数n称为线性表的长度。当n=0时,称为空表。
*考点7 线性表的顺序存储结构 重点
在计算机中存放线性表,一种最简单的方法是顺序存储,也称为顺序分配。
线性表的顺序存储结构具有以下两个基本特点:重点 ① 线性表中所有元素所占的存储空间是是连续的;
② 线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。
因此,线性表的顺序存储结构中,其前后件两个元素在存储空间中是紧邻的,且前件元素一定存储在后件元素的前面。重点
长度为n的线性表(a1, a2, …, an),在计算机中的顺序存储结构如下图所示。
线性表的顺序存储结构
在用一维数组存放线性表时,该数组的长度通常要定义得比线性表的实际长度大一些。在一般情况下,如果线性表的长度在处理过程中是动态变化的,则在开辟线性表的存储空间时要考虑到线性表的动态变化过程中可能达到的最大长度。
在线性表的顺序存储结构下,可以对线性表进行各种处理。主要的运算如下:8个
? 在线性表的指定位置处加入一个新的元素(线性表的插入)。
? 在线性表中删除指定位置处的数据元素(线性表的删除)。
? 在线性表中查找某个(或某些)特定的元素(线性表的查找)。
? 对线性表中的元素进行排序(线性表的排序)。
? 按要求将一个线性表分解成多个线性表(线性表的分解)。
? 按要求将多个线性表合并成一个线性表(线性表的合并)。
? 复制一个线性表(线性表的复制)。 ? 逆转一个线性表(线性表的逆转)等。
考点8 线性表的插入运算
首先分析,插入元素时,线性表的逻辑结构发生什么变化?
在一般情况下,要在第i(1≤i≤n)个元素之前插入一个新元素时,首先要从最后一个(即第n个)元素开始,直到第i个元素之间共n-i+1个元素依次向后移动一个位置,移动结束后,第i个位置就被空出,然后将新元素插入到第i项。插入结束后,线性表的长度就增加了1。
显然,在线性表采用顺序存储结构时,
如果插入运算在线性表的末尾,即在第n个元素之后(可以认为在第n+1个元素之前)插入新元素,则只要在表的末尾增加一个元素即可,不需要移动表中的元素;
如果要在线性表的第1个元素之前插入一个新元素,则需要
移动表中所有的元素。
在平均情况下,要在线性表中插入一个新元素,需要移动表中一半的元素。因此,在线性表顺序存储的情况下,要插入一个新元素,其效率是很低的,特别是在线性表比较大的情况下更为突出,由于数据元素的移动而消耗较多的处理时间。
插入操作的时间复杂度为:n 也有记为:O(n)
注意,上溢。
例:图1为一个长图为8的线性表顺序存储在长度为10的存储空间中。现在要求在第2个元素(即18)之前插入一个新元素87,其插入过程:略。插入一个新元素后,线性表的长度变为9。 (V(1:10)表示一维数组的存储空间)
V(1:10) V(1:10)
图1 插入后