《数据结构与算法(Python语言描述)》第三章、自己的理解

第三章 线性表

线性表有基本的两种表现方式:顺序表链接表
我理解的线性:数据元素是一条线上的一个个点,知道一个数据元素的值,就可以得到下一个数据元素。有点警察办案的感觉,一个个线索连在一起,有其先后的关系。

1. 顺序表

表现方式是,通过数据元素在内存中的存储顺序(隐性)表示了数据元素之间的线性关系

啥是隐性表达呢?

就是数据自己都不知道下一个是谁,但下一个数据就在我后面。这些数据通过在一定的存储区块内,所在的先后位置,间接表达了它们之间的线性关系。

为啥用这种方式组织数据结构(存储数据)?

好处在于通过下标访问其中的某个数据元素时,时间复杂度是O(1),就是常量时间,总之就是快,飞快。怎么做到这点,就跟它的表现方式有关了;因为是按位置表现数据关系,只要给指针数据元素的偏移地址,用很简单的四则运算,指针就可以准确的指向你要的数据元素。

现在说说缺点
1. 因为这种表现方式,所以一开始就要确定存储区块的大小,书上也说了解决的一种方法,并且说明了风险。
2. 对数据元素的删除、插入操作,如果需要保证数据元素的顺序的话,时间复杂度为O(n)。

注意:缺点和有点是相对于你要实现的数据结构来说的,就是说,一个缺点在其他数据结构里反而可能成为有点。例如顺序表如果用在需要动态添加数据元素的数据结构中(比如Python的List),以上缺点成立;但如果用在数据比较敏感的数据结构中,其缺点反而能在一定程度上保护数据(比如Python的Tuple)。

2. 链接表

  • 把表中的元素分别储存在一批独立的储存块(称为表的结点)里。
  • 保证从组成表结构中的任意一个结点可以找到其相关的下一个节点。
  • 在前一结点里用链接的方式显示地记录与下一个结点之间的关联。

书说的非常清楚,链接表是一种非常灵活的数据组织技术,实现链接表有多种不同方式,有单链表、单链表的简单变形、循环链表、双向链表等等,这些链表是根据你数据组织的需要设计和存在的,所以非常灵活

只考虑单链表的情况:

我们知道,数据结构的表现方式决定了对其所使用的操作方法。链接表的数据元素散落在内存的存储单元中,上一个数据元素通过链接指向下一个数据元素,那么带来的问题就是,当我想要知道其中某一个数据元素的时候,必须从第一个结点开始,遍历我要的数据元素之前的所有数据元素,需要的时间是与数据元素的数量有关,所以时间复杂度为O(n),可以看到与顺序表相比这个时间是相差很多的,这是单链表的一个缺点(相对而言)。

那么好处也与这种表现形式有关,就是只要内存没装满,表的长度就没有限制,对于结点的操作(删除、插入)只需要常量时间,修改下链接就可以了。


主要是个人理解,欢迎提问和指正,谢谢!

猜你喜欢

转载自blog.csdn.net/qq_39672528/article/details/79824905