诸神缄默不语-个人CSDN博文目录
我和ChatGPT一起制作了一个框架,现在只填充了一部分,具体的在补了。
在复杂数据结构的学习路线图中,队列和栈是两种基础且重要的数据结构,它们是广度优先搜索(BFS)和深度优先搜索(DFS)这两种基本的图遍历算法实现的基础。
文章目录
- 1. 队列(Queue)
- 2. 基本操作
- 3. 实现方式
- 1. 基于数组的实现
- 2. 基于链表的实现
- 4. 应用场景
- 5. 特殊队列
- 1. 顺序循环队列
- 2. 双端队列(Deque)
- 3. 优先队列(Priority Queue)
- 2. 栈(Stack)
- 1. 定义与特性:后进先出(LIFO)
- 2. 基本操作
- 3. 实现方式
- 1. 基于数组的实现
- 2. 基于链表的实现
- 4. 应用场景
- 3. 广度优先搜索(BFS)
- 1. 基本概念与原理
- 2. 算法步骤
- 3. 实现细节
- 4. 应用案例
- 4. 深度优先搜索(DFS)
- 1. 基本概念与原理
- 2. 算法步骤
- 3. 实现细节
- 4. 应用案例
- 本文撰写过程中使用的参考资料
1. 队列(Queue)
队列是一种**先进先出(FIFO)**的数据结构,它的使用场景非常广泛,从任务调度到消息处理系统,队列都起着至关重要的作用。
2. 基本操作
- 入队(enqueue):在队列尾部添加一个元素。
- 出队(dequeue):移除队列头部的元素。
- 查看队首(peek):获取队列头部的元素但不移除。
- 检查是否为空(isEmpty):判断队列是否没有元素。
3. 实现方式
1. 基于数组的实现
使用数组实现队列时,我们将元素存储在连续的内存位置中。入队操作在数组的尾部插入元素,出队则移除数组的第一个元素,这可能涉及到元素的移动。
2. 基于链表的实现
链表实现的队列通过节点的指针连接元素,每个节点包含元素和指向下一个节点的指针。链表的头部表示队列的前端,尾部表示队列的后端。
4. 应用场景
- 广度优先搜索(BFS):在图和树的遍历中,使用队列来追踪待访问的节点。
- 任务调度:操作系统中的任务调度器使用队列管理进程执行。
- 缓冲处理:在I/O系统中,缓冲队列是用来平衡数据处理的。
- 消息队列
5. 特殊队列
1. 顺序循环队列
在顺序循环队列中,当数组末尾没有空间时,会从数组开头开始利用空间,形成一个圈。
- 顺序循环队列最多能容纳60个元素,当front=47,rear=23时,求队列元素个数?_作业帮
2. 双端队列(Deque)
双端队列允许在队列的两端进行插入和删除操作。
3. 优先队列(Priority Queue)
在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先被移除。
2. 栈(Stack)
栈是一种后进先出(LIFO)的数据结构,它在编程语言的函数调用、算法的递归实现等方面都有广泛应用。
1. 定义与特性:后进先出(LIFO)
栈是限定仅在表尾进行插入和删除操作的线性表。
2. 基本操作
- 压栈(push):在栈顶添加一个元素。
- 弹栈(pop):移除栈顶元素。
- 查看栈顶(peek):获取栈顶元素而不移除。
- 检查是否为空(isEmpty):判断栈是否为空。
3. 实现方式
1. 基于数组的实现
数组实现的栈将元素存储在连续的内存位置中,栈顶对应数组的末尾。
2. 基于链表的实现
链表实现的栈也使用节点来存储数据,但仅允许在链表的一端(栈顶)进行添加和删除操作。
4. 应用场景
深度优先搜索(DFS)
递归实现、浏览器的前进后退、函数调用、表达式求值等
3. 广度优先搜索(BFS)
广度优先搜索(BFS)是一种图遍历算法,它从一个节点开始,逐层遍历图中所有节点。
1. 基本概念与原理
BFS使用队列来跟踪待访问的下一层节点。
2. 算法步骤
- 将起始节点放入队列中。
- 从队列中取出一个节点,访问它。
- 将该节点的所有未访问的邻接节点加入队列。
- 重复步骤2和3,直到队列为空。
3. 实现细节
在实现时,需要一个数组或哈希表来跟踪已访问的节点,防止它们被重新访问。
4. 应用案例
BFS常用于找到从源点到目标点的最短路径或层次遍历树。
4. 深度优先搜索(DFS)
深度优先搜索(DFS)是另一种图遍历算法,它沿着一条路径探索到底,直到无处可去,然后回溯并探索其他路径。
1. 基本概念与原理
DFS使用栈来记录从起点开始沿途的路径。
2. 算法步骤
- 将起始节点压入栈中。
- 取出栈顶节点,访问它。
- 将该节点的所有未访问的邻接节点压入栈。
- 重复步骤2和3,直到栈为空。
3. 实现细节
与BFS类似,DFS也需要记录已访问的节点。
4. 应用案例
DFS适用于寻找所有可能的解决方案,在游戏中寻找策略,以及在编程中实现递归算法。
本文撰写过程中使用的参考资料
- 队列 & 栈 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台