文章目录
2.1 线性表的定义和特点
1. 线性表的定义
由 n(n >= 0) 个数据元素(结点)a1,a2,…an组成的有限序列。
- 其中数据元素的个数 n 定义为表的长度。
- 当 n = 0 (表中没有元素) 时称为空表。
- 将非空的线性表(n > 0)记作:(a1,a2…an)。
- 这里的数据元素 ai(1 <= i <= n)只是一个抽象的符号,其具体含义在不同的情况下可以不同。
线性表的例子
【例1】:分析26个英文字母组成的英文表(A,B,C,D…Z)
- 数据元素都是字母。
- 元素之间的关系是线性:除了A(表头)和 Z(表尾)其他的字母前后都各有一个字母。
- 字母的前后关系不能翻转。
【例2】:分析学生情况登记表
- 这张表还是一个线性表,线性表里放的是学生的基本信息。
- 在这张表中,要处理的一个数据元素,就是一个同学对应的所有信息。
- 数据元素都是记录,元素关系是线性。
【其余线性表的例子】
总结:
- 同一线性表中的元素必定具有相同特性,(字母表中就都是字母,学生表中就都是学生信息)
- 数据元素之间的关系是线性关系。
2. 线性表的特征
对于非空的线性表或线性结构,其特点是:
- 存在唯一的一个被称作第一个的数据元素。
- 存在唯一的一个被称作最后一个的数据元素。
- 除了第一个之外,结构中的每个数据元素均只有一个前驱。
- 除了最后一个之外,结构中的每个数据元素均只有一个后继。
线性表是一种典型的线性结构
2.2 线性表的应用案例
1. 一元多项式的运算
实现两个多项式 加、减、乘运算。
- 把这个一元多项式中每一项的系数拿出来,存成一个线性表。
- 每一项的指数,就用系数的下标来表示,(下标为0指数就是0,下标为 1 指数就是1…)。
- 线性表 P = (P0, P1, P2… pn),系数就可以用数组来存储了。
描述好多项式以后,就要来进行多项式的运算了:
- 只需要将两个多项式中,指数相同的系数依次相加。
- 下标为 1(次方为1)的两个数相加,下标为 2 的两个数相加……
如果给的是个稀疏多项式呢?
- S(x) = 1 + 3x 10000 + 2x 20000。
- 如果这样的多项式还像上面那样来表示,指数(下标 i)就要一直跑到20000去了,这样会造成很大的浪费。
- 所以只需要记录下每一项的系数是对应多少指数的就可以了,只需要记录系数不为0的项。
2. 稀疏多项式的计算
多项式非零项的数组表示
- 只将系数不为 0 的每一项的系数和指数存储起来。
- 每一项的系数和指数就都成了线性表 P = ((p1,e1),(p2,e2),…(pm,em))。
- A 和 B 的线性表的内容看起来就像是用二维数组存储了起来。
顺序存储结构求多项式和
- 创建一个新数组C;
- 分别从头遍历比较 A 和 B 的每一项。
- 若指数相同,则对应系数相加,若其和不为0,则在 c 中增加一个新项。
- 若指数不相同,则将指数较小的项复制到 C 中。
- 一个多项式已经遍历完毕时,将另一个剩余项依次复制到 C 中即可。
稀疏多项式求和步骤
- 先把 A、B 两个数组的第一个元素的指数比较,A里面存的指数是0,比较小,先把 A 的第一个元素(7,0)存到C数组中,A 的第一项去掉不再参与计算。
- 将 A 的第二项(3,1)和 B 的第一项(8,1)的指数比较,指数都为1,则系数相加存入C,指数不变存入C,这两项去掉。
- 再将A的(9,8)和B的(22,7)比较,B 的指数比较小,将(22,7)存入 C 数组,然后去掉不再参与计算。
- 将 A 的(9,8)和 B 的(-9,8)比较,指数相同,则系数相加,系数相加为0,则这两项都删掉且不存入C数组。
- 多项式 B 已经遍历完成,则将 A 的剩余项复制到 C 即可。
数组C应该多大?
- 最多,线性表 A 和 B 的每一项的指数都不同,那么数组C就要7项。
- 最少,A和B每一项的指数都相同,且系数互为相反数,那么结果就刚好是0项。
- 给C的空间如果多了有可能浪费,少了就有可能放不下,这个时候就需要用到链式存储结构了。
顺序存储结构存在的问题
- 存储空间分配不灵活
- 运算的空间复杂度高
链式存储结构求多项式和
- 不用数组来存储 A 和 B 的数据元素,不占用一块连续的空间;
- 用链表的方式来存储,运算的时候需要多少就用多少空间。
- 同样的方法,比较 A 和 B 两个线性表中每一项的指数;
- 将指数小的保留起来,指数相同则系数相加再保留起来。
- 存起来的元素不再参与计算,将指针后移。
- 保留比较小的,然后将 pa 指针后移,指向下一个元素。
- pa 指向的(3,1)和 pb 指向的(8,1)指数相同,系数相加,将(11,1)存起来,然后将指针后移。
- 将(22,7)存起来,然后将指针 pb 后移。
- 此时 pa 和 pb 指向的元素,系数相同,指数相加为0,这两个都不要,直接将(5,17)存起来。
3. 图书信息管理系统
需要的功能:查找 、插入 、 删除 、修改 、排序 、计数。
- 图书表可以抽象为线性表(顺序表或链表)。
- 表中每本图书抽象为线性表中的数据元素。
存储方式
- 线性存储方式(数组)。
- 链式存储方式(链表)
总结
- 线性表中数据元素的类型可以为简单类型,也可以为复杂类型.
- 许多实际应用问题所涉及的基本操作有很大相似性,不应该为每个具体应用单独编写一个程序。
- 从具体应用中抽象出共性的逻辑结构和基本操作(抽象数据类型),然后实现其存储结构和基本操作。