常用的数据结构简单总结

最常用的数据结构:
1.数组
2. 堆栈
3. 队列
4. 链表
5.树
6. 图
7. 字典树
8. 哈希表
1.数组
数组(Array)大概是最简单,也是最常用的数据结构了。其他数据结构,比如栈和队列都是由数组衍生出来的。
常用的数据结构简单总结
每一个数组元素的位置由数字编号,称为下标或者索引(index)。大多数编程语言的数组第一个元素的下标是 0。
根据维度区分,有 2 种不同的数组:
一维数组
多维数组(数组的元素为数组)
数组的基本操作:
Insert - 在某个索引处插入元素
Get - 读取某个索引处的元素
Delete - 删除某个索引处的元素
Size - 获取数组的长度

2. 栈
栈中的元素采用 LIFO (Last In First Out),即后进先出。
常用的数据结构简单总结
栈的基本操作:
Push —  在栈的最上方插入元素
Pop — 返回栈最上方的元素,并将其删除
isEmpty —  查询栈是否为空
Top —  返回栈最上方的元素,并不删除

3.队列
队列(Queue)与栈类似,都是采用线性结构存储数据。它们的区别在于,栈采用 LIFO 方式,而队列采用先进先出,即FIFO(First in First Out)。
常用的数据结构简单总结
队列的基本操作:
Enqueue —  在队列末尾插入元素
Dequeue —  将队列第一个元素删除
isEmpty —  查询队列是否为空
Top —  返回队列的第一个元素

4.链表
链表(Linked List)也是线性结构,它与数组看起来非常像,但是它们的内存分配方式、内部结构和插入删除操作方式都不一样。
链表是一系列节点组成的链,每一个节点保存了数据以及指向下一个节点的指针。链表头指针指向第一个节点,如果链表为空,则头指针为空或者为 null。
常用的数据结构简单总结
链表可以用来实现文件系统、哈希表和邻接表。
链表分为 2 种:
单向链表
双向链表
链表的基本操作:
InsertAtEnd —  在链表结尾插入元素
InsertAtHead —  在链表开头插入元素
Delete —  删除链表的指定元素
DeleteAtHead —  删除链表第一个元素
Search —  在链表中查询指定元素
isEmpty —  查询链表是否为空

5. 图
图(graph)由多个节点(vertex)构成,节点之间阔以互相连接组成一个网络。(x, y)表示一条边(edge),
它表示节点 x 与 y 相连。边可能会有权值(weight/cost)。
常用的数据结构简单总结
图分为两种:
无向图
有向图
在编程语言中,图有可能有以下两种形式表示:
邻接矩阵(Adjacency Matrix)
邻接表(Adjacency List)
遍历图有两种算法:
广度优先搜索(Breadth First Search)
深度优先搜索(Depth First Search)

6.树
树(Tree)是一个分层的数据结构,由节点和连接节点的边组成。树是一种特殊的图,它与图最大的区别是没有循环。
树被广泛应用在人工智能和一些复杂算法中,用来提供高效的存储结构。
常用的数据结构简单总结
树有很多分类:
N 叉树(N-ary Tree)
平衡树(Balanced Tree)
二叉树(Binary Tree)
二叉查找树(Binary Search Tree)
平衡二叉树(AVL Tree)
红黑树(Red Black Tree)
2-3 树(2–3 Tree)
其中,二叉树和二叉查找树是最常用的树。

7.字典树(前缀树)
前缀树(Prefix Trees 或者 Trie)与树类似,用于处理字符串相关的问题时非常高效。它可以实现快速检
索,常用于字典中的单词查询,搜索引擎的自动补全甚至 IP 路由。
图中展示了“top”, “thus”和“their”三个单词在前缀树中如何存储的:
单词是按照字母从上往下存储,“p”, “s”和“r”节点分别表示“top”, “thus”和“their”的单词结尾。
常用的数据结构简单总结

8. 哈希表
哈希(Hash)将某个对象变换为唯一标识符,该标识符通常用一个短的随机字母和数字组成的字符串来代表。哈希可以用来实现各种数据结构,其中最常用的就是哈希表(hash table)。
哈希表通常由数组实现。
哈希表的性能取决于 3 个指标:
哈希函数
哈希表的大小
哈希冲突处理方式

下图展示了有数组实现的哈希表,数组的下标即为哈希值,由哈希函数计算,作为哈希表的键(key),
而数组中保存的数据即为值(value):
常用的数据结构简单总结

【资料来源:官网以及学习教材】