您的位置:首页 > 理论基础 > 数据结构算法

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

2020-03-08 11:42 956 查看

一、线性表的定义与特性

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

  • 在非空线性表中,有且仅有一个开始结点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]
0 5
1 6
2 2
3 3

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

指数(下标i) 系数p[i]
0 1
1 0
1000 2
2000 3

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

系数p[i] 指数
1 0
2 1000
3 2000

我们可以用这种方法来存储数据,那么就可以建立一个线性表
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)计数

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

    总结

    • 线性表中数据元素的类型可以为简单类型,也可以是复杂类型
    • 许多实际应用问题所涉的基本操作具有很大的相似性,不应为每个应用问题都编写一个程序。
    • 从应用问题中抽象出共性的逻辑结构和基本操作(即抽象数据类型),然后实现其存储结构和基本操作。
    • 点赞
    • 收藏
    • 分享
    • 文章举报
    柳叶lhy 发布了17 篇原创文章 · 获赞 0 · 访问量 482 私信 关注
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: