一、常用数据结构
数组 —— 连续存储单元存储
链表 —— 连续指针节点
队列 —— 先进先出
栈 —— 先进后出
堆 —— 通常是一个可以被看做一棵树的数组对象
树 —— 非线性层级数据结构
图 —— 很少用到
hashmap —— 一种数组和链表组合的数据结构
hashtable —— 一种数组和链表组合的数据结构
二、数组
数组是很多语言中都内置的内核数据结构,它是一个连续的内存块,支持按索引直接查找,时间复杂度为O(1)。但插入元素和删除元素的操作比较麻烦,最差情况下的时间复杂度为O(n)。
在很多封装的数据结构中,数组都是重要的组成成分,因为它是连续的内存,可支持指针寻址操作。但是在操作时需要注意的是边界溢出问题,因而,在数组内存不足时需要关心的操作往往是,原内存被销毁,新内存开辟时带来的系统开销。
数组操作的一个典型特例是内存池管理技术。
其他:待补充。
三、链表
链表是一种物理存储单元上非连续、无顺序的存储结构,它由一系列的节点组成,每个节点包含一组数据部分和一个或多个指向下一个节点的指针。链表的非连续和指针特点让链表元素的插入和删除变得很简单,但相应的,查找工作则变得不是很容易。通常,在已知插入点的情况下,插入/删除新元素的时间复杂度为O(1),最坏情况下查找的时间复杂度为O(n)。
按照链表节点的指针个数不同,链表可分为:单向链表,双向链表,多向链表。
按照链表中是否存在环形结构,链表可分为:有环链表和无环链表。
【单链表】
单向链表的常见操作:
创建链表、链表查找、插入或删除元素、链表反向、链表销毁。
单链表进阶操作:
链表元素去重、查找链表中间节点、查找链表倒数第 K 个节点、合并两个排序链表、查找两个链表第一个公共节点、查找链表的环。https://blog.csdn.net/weixin_38984102/article/details/79708742
【双向链表】
【多向链表】
不多见。
四、队列
队列和栈是在结构上相近的数据结构,有时他们可以相互转换。不同的是,队列是先进先出结构,栈是先进后出结构。他们的
典型操作是:Push(压入)和 Pop(弹出)。队列是一种操作受限制的线性表,通常使用链表或者数组来实现。
单链队列
循环队列
阵列队列
五、栈
六、堆
七、树
树是由n(n>0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。树具有以下的特点:
-
每个节点都只有有限个子节点或无子节点;
-
没有父节点的节点称为根节点;
-
每一个非根节点有且只有一个父节点;
-
除了根节点外,每个子节点可以分为多个不相交的子树;
-
树里面没有环路(cycle)
https://blog.csdn.net/smilejiasmile/article/details/82843278
常见二叉树:
1)二叉查找树
2)平衡二叉树
3)红黑树
4)B 树
5)B+ 树
6)B* 树
特殊的树:
1)字典树
2)决策树
3)默克尔帕特里夏树
八、图
https://www.cnblogs.com/wanghuaijun/p/7302303.html