前言
豆包MarsCode AI 刷题无疑是学习计算机技术,提升自己代码和算法能力的强力工具。虽然AI能在我们知识不足时给予我们很好的帮助,但我们也不能过分依赖,应该掌握基本的数据结构知识,这也是我为什么要通过写笔记的方式来总结刷题过程中可能用到的数据结构和算法。
第一篇 常用的数据结构
1. 线性表
定义:具有相同数据类型的n个数据元素的有限序列
- 表中元素个数有限,每个元素类型相同,占相同大小存储空间
- 表中元素有逻辑上的顺序性,有先后次序
- 表中元素具有抽象性,讨论元素间关系,不考虑元素内细节
两种表示
-
顺序表示,逻辑上相邻的元素在物理地址上也相邻,支持随机存取,插入删除代价大
-
链式表示,单链表,双链表,循环链表,静态链表等,只能顺序存取
2. 栈
定义:只允许在一端进行插入或删除的线性表
应用:括号匹配,中缀表达式转前后缀表达式(联系到树的前后序遍历),递归调用
概念:栈顶Top,栈底Bottom,进栈Push,出栈Pop
共享栈:两个栈底在两端,两个栈顶向共享空间的中间延伸。
3. 队列
定义:只能在一端进行插入,在另一端进行删除的线性表,特点是先进先出,FIFO
在层序遍历中的应用
队头front,队尾rear
循环队列区分队空和队满的三种方式:
- 牺牲一个单元来区分
- 类型中增设size数据成员
- 类型中增设tag数据成员,删除成功置0,插入成功置1
双端队列和输入/输出受限的双端队列
特殊矩阵压缩存储,稀疏矩阵三元组表示
稀疏矩阵压缩后便失去了随机存取的特性
4. 树
树是一种抽象数据类型(ADT),它模拟了具有层次结构的数据集合。树由节点(nodes)组成,每个节点可以有零个或多个子节点,但每个节点只有一个父节点,除了根节点(root),它没有父节点。树的一个重要特性是它没有循环,即从根节点到任何其他节点的路径是唯一的。
树的常见类型
- 二叉树(Binary Tree) :每个节点最多有两个子节点。
- 二叉搜索树(Binary Search Tree, BST) :一种特殊的二叉树,其中左子树的所有节点值小于根节点值,右子树的所有节点值大于根节点值。
- 平衡树(Balanced Tree) :一种特殊类型的树,其中任何节点的两个子树的高度差最多为1。
- AVL树:一种自平衡二叉搜索树。
- 红黑树:另一种自平衡二叉搜索树。
- B树:一种自平衡的多路搜索树,常用于数据库和文件系统。
树的遍历
树的遍历是指访问树中所有节点的过程。常见的遍历方法有:
- 前序遍历(Pre-order Traversal) :根节点 -> 左子树 -> 右子树
- 中序遍历(In-order Traversal) :左子树 -> 根节点 -> 右子树
- 后序遍历(Post-order Traversal) :左子树 -> 右子树 -> 根节点
- 层序遍历(Level-order Traversal) :从上到下,从左到右逐层访问节点