【数据结构(4)】线性表的定义、特点及案例引入

在这里插入图片描述

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. 线性表的特征

对于非空的线性表或线性结构,其特点是:

  1. 存在唯一的一个被称作第一个的数据元素。
  2. 存在唯一的一个被称作最后一个的数据元素。
  3. 除了第一个之外,结构中的每个数据元素均只有一个前驱。
  4. 除了最后一个之外,结构中的每个数据元素均只有一个后继。

线性表是一种典型的线性结构

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 中即可。

稀疏多项式求和步骤

在这里插入图片描述

  1. 先把 A、B 两个数组的第一个元素的指数比较,A里面存的指数是0,比较小,先把 A 的第一个元素(7,0)存到C数组中,A 的第一项去掉不再参与计算。

在这里插入图片描述

  1. 将 A 的第二项(3,1)和 B 的第一项(8,1)的指数比较,指数都为1,则系数相加存入C,指数不变存入C,这两项去掉。

在这里插入图片描述

  1. 再将A的(9,8)和B的(22,7)比较,B 的指数比较小,将(22,7)存入 C 数组,然后去掉不再参与计算。

在这里插入图片描述

  1. 将 A 的(9,8)和 B 的(-9,8)比较,指数相同,则系数相加,系数相加为0,则这两项都删掉且不存入C数组。

在这里插入图片描述

  1. 多项式 B 已经遍历完成,则将 A 的剩余项复制到 C 即可。

在这里插入图片描述

数组C应该多大?

  • 最多,线性表 A 和 B 的每一项的指数都不同,那么数组C就要7项。
  • 最少,A和B每一项的指数都相同,且系数互为相反数,那么结果就刚好是0项。
  • 给C的空间如果多了有可能浪费,少了就有可能放不下,这个时候就需要用到链式存储结构了。

顺序存储结构存在的问题

  • 存储空间分配不灵活
  • 运算的空间复杂度高

链式存储结构求多项式和

在这里插入图片描述

  • 不用数组来存储 A 和 B 的数据元素,不占用一块连续的空间;
  • 用链表的方式来存储,运算的时候需要多少就用多少空间。

在这里插入图片描述

  • 同样的方法,比较 A 和 B 两个线性表中每一项的指数;
  • 将指数小的保留起来,指数相同则系数相加再保留起来。
  • 存起来的元素不再参与计算,将指针后移。
  1. 保留比较小的,然后将 pa 指针后移,指向下一个元素。

在这里插入图片描述

  1. pa 指向的(3,1)和 pb 指向的(8,1)指数相同,系数相加,将(11,1)存起来,然后将指针后移。

在这里插入图片描述

  1. 将(22,7)存起来,然后将指针 pb 后移。

在这里插入图片描述

  1. 此时 pa 和 pb 指向的元素,系数相同,指数相加为0,这两个都不要,直接将(5,17)存起来。

在这里插入图片描述

3. 图书信息管理系统

需要的功能:查找 、插入 、 删除 、修改 、排序 、计数。

在这里插入图片描述

  • 图书表可以抽象为线性表(顺序表或链表)。
  • 表中每本图书抽象为线性表中的数据元素。

存储方式

  • 线性存储方式(数组)。

在这里插入图片描述

  • 链式存储方式(链表)

在这里插入图片描述

总结

  • 线性表中数据元素的类型可以为简单类型,也可以为复杂类型.
  • 许多实际应用问题所涉及的基本操作有很大相似性,不应该为每个具体应用单独编写一个程序。
  • 从具体应用中抽象出共性的逻辑结构和基本操作(抽象数据类型),然后实现其存储结构和基本操作
  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值