顺序表
数据结构 就是元素和元素的关系结构表达
逻辑结构
元素与元素之间 1:1 的关系 称 表
元素与元素之间 1:n 的关系 称 树 也称为 组织架构 目录架构
元素与元素之间 m:n 的关系 称 图
存储结构
顺序结构
数据存储在一段联系的内存空间的结构
优点:
-
-
- 随机访问效率高:在顺序存储结构中,通过下标即可直接访问任意位置的元素,因此查找和访问某个特定位置的元素的效率很高,时间复杂度为 O(1)。
-
-
-
- 便于实现:顺序存储结构的实现相对简单直接,不需要考虑节点间的链接关系,因此在某些情况下更容易实现和维护。
-
缺点
-
-
- 插入和删除操作效率低:在顺序存储结构中,插入和删除操作可能需要移动大量元素位置,特别是在中间或起始位置插入或删除元素时,需要移动后续所有元素,导致时间复杂度为 O(n),效率较低。
- 容量固定:顺序存储结构在创建时需要指定固定的容量大小,而且通常不能动态调整大小。当存储空间不足时,需要重新分配更大的空间,并将原有数据复制到新空间中,这可能导致内存碎片和额外的开销。
-
链式存储
将数据存储在不同内存空间并通过地址链接在一起的结构
优点
-
-
- 插入和删除操作效率高:在链式存储结构中,插入和删除操作只需要修改指针指向,而不需要移动大量元素,因此插入和删除操作的效率很高,时间复杂度为 O(1)。
- 动态分配存储空间:链式存储结构可以根据需要动态分配内存空间,不需要事先确定存储容量,因此非常灵活,可以根据实际情况动态调整存储空间大小。
- 不受存储器碎片化影响:由于链式存储结构使用指针链接数据元素,不要求连续的存储空间,因此不受存储器碎片化的影响,可以更好地利用存储空间。
- 适用于频繁插入删除的场景:由于插入和删除操作效率高,并且不需要移动大量元素,链式存储结构非常适合于需要频繁进行插入和删除操作的场景。
-
缺点
-
-
- 随机访问效率低:在链式存储结构中,要想访问某个特定位置的元素,需要从头节点开始按照指针依次遍历,因此随机访问的效率较低,时间复杂度为 O(n)。
- 额外的指针开销: 链式存储结构中每个节点都需要额外的指针来指向下一个节点,这会增加存储空间的开销,尤其是在存储大量数据时,可能会占用较多的内存
-
在顺序结构中包括 :线性表、堆栈、队列、字符串、数组等 最经典的常用的是 线性表
栈和队列
栈是一种遵从后进先出的原则的数据结构在栈中,最后一个入栈的元素是第一个被移除的元素
栈通常应用于反向跟踪的场景,如函数的调用 、递归、
优点:
- 简单易实现:栈的操作相对简单,可以使用数组或链表等基本数据结构实现。
- 空间效率高:栈在内存中的分配和释放是连续的,因此可以更有效地利用内存空间。
缺点:
- 功能受限:栈只能在栈顶进行操作,不能在中间或底部进行插入或删除操作。
- 不适合于存储大量数据:由于栈的操作受限,不适合存储大量数据或需要频繁插入和删除操作的场景。
队列
队列是一种遵循先进先出原则的数据结构。在队列中,最先添加的元素是第一个被移除的元素
队列通常用于需要按顺序处理任务的场景,例如作业调度、消息队列。或者是二叉树广度搜索算法
优点:
- 有序性:队列保证了元素按照添加顺序被处理,适用于需要严格按顺序执行的场景。
- 功能完善:队列支持在队列头部和尾部进行插入和删除操作,功能更加灵活。
缺点:
- 性能较低:在某些操作上,队列的性能可能较低,特别是在需要频繁在中间或尾部插入或删除元素时。
- 实现复杂度高:相比于栈,队列的实现可能相对复杂,尤其是在需要保证线程安全或者实现特定功能的情况下。
栈和队列 两种数据结构都不提供查询接口
树
树是在有n个节点的有限集合 需要满足两个条件
a.有且只有一个根的节点;
b.其余的节点可以分为m个互不相交的有限集合
基本概念 :
- 一个节点的子树的个数称为该节点的度数,一棵树的度数是指该树中节点的最大度数。
- 度数为零的节点称为树叶或终端节点,度数不为零的节点称为分支节点,除根节点外的分支节点称为内部节点。
- 一个节点的子树之根节点称为该节点的子节点,该节点称为它们的父节点,同一节点的各个子节点之间称为兄弟节点。一棵树的根节点没有父节点,叶节点没有子节点
度 解释从节点往下分化出来节点的个数一般分为二叉树 或m叉树
叶子 就是下面没有度的节点被成为叶子
二叉树
逻辑结构 1:2
基本特点
1.每个节点最多存在两个子树(不能存在两个大于2 的节点)
2.左子树和右子树(存在的顺序不能颠倒)
在二叉树中还存在满二叉树和完全二叉树
满二叉树 是这个树的所有的分支节点都存在左子树和右子树且所有的叶子也在同一层
完全二叉树 是在满二叉树的情况下 叶子在k的或者在k-1的情况下成立
二叉树的遍历
- 先上后下的按层次遍历;
- 先左(子树)后右(子树)的遍历;
- 先右(子树)后左(子树)的遍历。
遍历有 三种方式
遍历的话每个元素 要访问三次
先序的话 就是第一次访问的时候 查看数据
中序的话 就是第一次访问的时候不 查看数据 第二次访问的时候查看数据
后序的话是最后访问的时候查看数据 前两次访问的时候不查看数据
关于先序、中序、 后序相关的面试题 先序 和后序确定根节点和访问顺序 中序确定左右节点