线性数据结构
我们学习的数据结构都是从线性数据结构开始的,深刻理解线性数据结构非常必要。
线性数据结构的特征
- 数据集合中有且只有一个——第一个元素
- 数据集合中有且只有一个——最后的元素
- 集合数据中的的中间元素只有一个前驱和后继
- 集合数据中第一个元素没有前驱
- 集合数据中最后一个元素没有后继
线性数据结构包括
- 数组
- 链表
- 栈
- 队列
数组:是一个物理概念
数组我们可以理解为一个强物理概念在计算机运行世界的一个映射,是一个物理世界到软件工程呈现的结果,即连续的存储空间在编程语言中的呈现。所以我们经常将数组与链表或者编程语言中的引用作对比。
由于数据数据存储一般是一个连续的存储空间,所以数据天然的具有索引,即我们可以随机访问(查询迅速,动态增删慢)。
链表:是一个逻辑概念
链表我们可以结合几个成语理解:按图索骥、顺藤摸瓜、沿波讨源、蔓引株求。也像传说中的六度空间理论:世界上的任意两个人之间都可以通过六层以内的朋友链而联系起来。
首先链表是一个线性结构,内部数据元素通过元素中的地址获取,所以链表的元素无法直接随机获取,获取一个元素只能一个一个遍历,但是这也产生了一个优点,增删效率高,但是查询效率就低了。
栈和队列:是一个逻辑概念
队列最容易理解,很想我们偶尔出去买东西人多了就要排队,队首元素先结束排队出队完成它的使命。栈像队列的操作的另一个极端,先进后出,生活中应用感觉不多(子弹夹中的子弹进出就是一种栈结构)
另外,读过一个很形象但让人感觉不适的比喻:吃了,拉出来就是队列,吐出来就是栈。
线性结构再总结
线性结构的最大意义就是保证数据操作的有序性和可控性(其他的数据结构也能保证),避免失控(有一本很有影响力书叫《失控》),计算机世界归根结底需要数据呈现的有序和可控,否则就是刚才那本书名。人工智能四个字终究能不能离开人工两个字很难说,但是如果人工智能不能离开人工是否是真正意义上的智能呢?如果离开了人工向像美剧《西部世界》一样会不会走向失控?还是会像电影《银翼杀手》中的机器人比人还具有人的感情?计算科学如果在失控的状态下又会走向何方?扯得有点远
此文胡扯到此正式结束,欢迎讨论。