数据结构与算法:队列&栈&BFS&DFS

诸神缄默不语-个人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. 顺序循环队列

在顺序循环队列中,当数组末尾没有空间时,会从数组开头开始利用空间,形成一个圈。

  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. 算法步骤

  1. 将起始节点放入队列中。
  2. 从队列中取出一个节点,访问它。
  3. 将该节点的所有未访问的邻接节点加入队列。
  4. 重复步骤2和3,直到队列为空。

3. 实现细节

在实现时,需要一个数组或哈希表来跟踪已访问的节点,防止它们被重新访问。

4. 应用案例

BFS常用于找到从源点到目标点的最短路径或层次遍历树。

4. 深度优先搜索(DFS)

深度优先搜索(DFS)是另一种图遍历算法,它沿着一条路径探索到底,直到无处可去,然后回溯并探索其他路径。

1. 基本概念与原理

DFS使用栈来记录从起点开始沿途的路径。

2. 算法步骤

  1. 将起始节点压入栈中。
  2. 取出栈顶节点,访问它。
  3. 将该节点的所有未访问的邻接节点压入栈。
  4. 重复步骤2和3,直到栈为空。

3. 实现细节

与BFS类似,DFS也需要记录已访问的节点。

4. 应用案例

DFS适用于寻找所有可能的解决方案,在游戏中寻找策略,以及在编程中实现递归算法。

本文撰写过程中使用的参考资料

  1. 队列 & 栈 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台

你可能感兴趣的:(编程学习笔记,宽度优先,深度优先,算法)