在数据结构与算法概述一文中我们讨论了数据结构其实就是一组数据的存储结构,所以用 C 语言中的 struct 、Java 中的 class、JavaScript 中的 {} 创建的都是一种数据结构。
其实在每个编程语言之中都已经给我们内置了很多的基本的数据结构,比如:数组、链表、哈希表等等。这些基础的数据结构其实是前人从具体的场景抽象出来通用的数据结构,所以我们想要自己写出好的数据结构就先学习前人的智慧。我先从 10 个简单的数据结构出发:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树。
线性表
在学习这 10 个数据结构之前,其实还可以将它们分分类,在数据结构与算法中还有一个「线性表」的概念。
线性表就是数据排成像一条线一样的结构,每个线性表上的数据最多只有前和后两个方向。
线性表的特点:线性结构它都必须满足「结点有唯一直接前驱和唯一直接后继(头结点和尾结点例外)」这个特征。(用一个具象一点的说法,现在你采用结绳记事法,绳子上每一个结就是一个结点,不管你怎么折腾这跟绳子把它拉直了还是一条线),区分线性表还是非线性表(树、图)的方式就是将数据结构画图画出来。
所以属于线性表有:数组、链表、栈、队列。
非线性表
根据线性表的特征,很容易得出属于非线性表就是:散列表、二叉树、堆、跳表、图、Trie 树。
最后
就能产出一个 数据结构 的脑图
