队列(Queue):简称为队,一种线性表数据结构,是一种只允许在表的一端进行插入操作,而在表的另一端进行删除操作的线性表。
把队列中允许插入的一端称为 「队尾(rear)」;把允许删除的另一端称为 「队头(front)」。当表中没有任何数据元素时,称之为 「空队」。
队列有两种基本操作:「插入操作」 和 「删除操作」。
front
指向队头元素在队列中的位置,使用指针 rear
指示队尾元素在队列中的位置。front
指向链表头节点位置,也就是队头元素,rear
指向链表尾部位置,也就是队尾元素。初始化空队列:创建一个空队列,定义队列的大小 size
,以及队头元素指针 front
,队尾指针 rear
。
判断队列是否为空:当队列为空时,返回 True
。当队列不为空时,返回 False
。一般只用于队列中删除操作和获取队头元素操作中。
判断队列是否已满:当队列已满时,返回 True
,当队列未满时,返回 False
。一般只用于顺序队列中插入元素操作中。
插入元素(入队):相当于在线性表最后元素后面插入一个新的数据元素。并改变队列顶指针 top
的指向位置。
删除元素(出队):相当于在线性表最后元素后面删除最后一个数据元素。并改变队列顶指针 top
的指向位置。
获取队列队头元素:相当于获取线性表中最后一个数据元素。与插入元素、删除元素不同的是,该操作并不改变队列顶指针 top
的指向位置。
广度优先搜索算法(Breadth First Search):简称为 BFS,又译作宽度优先搜索 / 横向优先搜索。是一种用于遍历或搜索树或图的算法。该算法从根节点开始,沿着树的宽度遍历树或图的节点。如果所有节点均被访问,则算法中止。
广度优先遍历类似于树的层次遍历过程。呈现出一层一层向外扩张的特点。先看到的节点先访问,后看到的节点后访问。遍历到的节点顺序符合「先进先出」的特点,所以广度优先搜索可以通过「队列」来实现。
graph
为存储无向图的字典变量,start
为开始节点。visited
为标记访问节点的 set 集合变量。定义 q
为存放节点的队列。q
中,即 q.put(start)
。并将其标记为访问,即 visited.add(start)
。node_u
。访问节点 node_u
,并对节点进行相关操作(看具体题目要求)。node_u
相连并构成边的节点 node_v
。
node_v
没有被访问过,则将 node_v
节点放入队列中,并标记访问,即 q.append(node_v)
,visited.add(node_v)
。q
为空。参考:https://gitee.com/itcharge/LeetCode-Py