数据结构与算法基础-----线性表(1)

一、线性表的定义与特性

线性表是具有相同特性的数据元素的一个有限序列
线性表的逻辑特征:

  • 在非空线性表中,有且仅有一个开始结点a1 ,它没有直接前趋,而仅有一个直接后继a2
  • 有且仅有一个终端后继an,它没有直接后继,而仅有一个直接前趋。
  • 其余内部结点ai(2<=i<=n-1)都有且仅有一个直接前趋ai-1和直接后继ai+1

例1 :一元多项式
Pn(x)=p0+p1x+p2x2+p3x3+…+pnxn.
线性表P=(p0,p1,p2,p3,…,pn)
(每一项的指数 i 都隐藏其系数的pi的序号中)
如:
P(x)=5+6x+2x2+3x3.
那么我们可以用数组来表示。

指数(下标i)系数p[i]
05
16
22
33

例2:稀疏多项式的运算
S(x)=1+2x1000+3x2000.

指数(下标i)系数p[i]
01
10
10002
20003

那么如果我们还是用数组的方式将它们存储起来,将会造成存储空间的浪费,该怎么办呢?

系数p[i]指数
10
21000
32000

我们可以用这种方法来存储数据,那么就可以建立一个线性表
S=((1,0),(2,1000),(3,2000)).
推广如下:
Pn(x)=p1xe1+p2xe2+p3xe3+…+pnxen.
线性表P=((p1,e1),(p2,e2),(p3,e3),…,(pn,en))
例2.1
A:5x+3x3+4x5.
B:2x2+4x3+5x4+7x6.
线性表A=((5,1),(3,3),(4,5))
线性表B=((2,2),(4,3),(5,4),(7,6))
我们如何实现多项式A和B的相加呢?

  • 创建一个新数组C
  • 分别从头遍历比较a和b的每一项
    • 指数相同,对应系数相加,若其和不为0,则在C中增加一个新项
    • 指数不相同,则将指数小的项复制到C中
  • 一个多项式已遍历完毕时,将另一个多项式的剩余项依次复制到C中即可

这里我们又遇到一个问题,数组C多大才合适呢?
由此我们可以看到顺序存储结构存在的问题

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

接下来,链式存储结构闪亮登场。
在这里插入图片描述例3:图书信息管理系统

在这里插入图片描述需要的功能:
(1)查找 (2)插入 (3)删除 (4)修改 (5)排序 (6)计数

图书表可抽象为线性表。那我们怎么存储它呢?
顺序存储:
在这里插入图片描述链式存储:
在这里插入图片描述那我们选择哪一种存储方式呢?需要根据实际情况来判断,比较两种存储结构实现操作的区别,各有什么好处来选择。


总结

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柳叶lhy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值