更新时间:2023-03-28 来源:黑马程序员 浏览量:
队列和栈是常见的数据结构,它们都用于存储和管理数据,但是它们在存储和访问数据的方式上有所不同。
队列是一种先进先出(FIFO)的数据结构,类似于排队。新的元素被添加到队列的尾部,而从队列中删除元素时,总是删除队列头部的元素。队列的常见操作包括入队(enqueue)和出队(dequeue)。
栈是一种后进先出(LIFO)的数据结构,类似于一摞书。新的元素被添加到栈的顶部,而从栈中删除元素时,总是删除栈顶的元素。栈的常见操作包括入栈(push)和出栈(pop)。
我们用一段Python代码来加以说明:
# 队列的实现 class Queue: def __init__(self): self.items = [] def enqueue(self, item): self.items.append(item) def dequeue(self): if self.is_empty(): return None return self.items.pop(0) def is_empty(self): return len(self.items) == 0 def size(self): return len(self.items) # 栈的实现 class Stack: def __init__(self): self.items = [] def push(self, item): self.items.append(item) def pop(self): if self.is_empty(): return None return self.items.pop() def is_empty(self): return len(self.items) == 0 def size(self): return len(self.items)
在上面的代码中,我们使用Python的列表来实现队列和栈。在队列中,我们使用append()方法将元素添加到列表的尾部,并使用pop(0)方法从列表的头部删除元素。在栈中,我们使用append()方法将元素添加到列表的末尾,并使用pop()方法从列表的末尾删除元素。
以下是使用队列和栈的示例代码:
# 使用队列实现广度优先搜索 def bfs(graph, start): visited = set() queue = Queue() queue.enqueue(start) while not queue.is_empty(): vertex = queue.dequeue() if vertex not in visited: visited.add(vertex) for neighbor in graph[vertex]: queue.enqueue(neighbor) return visited # 使用栈实现深度优先搜索 def dfs(graph, start): visited = set() stack = Stack() stack.push(start) while not stack.is_empty(): vertex = stack.pop() if vertex not in visited: visited.add(vertex) for neighbor in graph[vertex]: stack.push(neighbor) return visited
在上面的代码中,我们使用队列实现了广度优先搜索(BFS),并使用栈实现了深度优先搜索(DFS)。BFS和DFS是图论中常见的搜索算法,它们可以用来解决许多问题,例如寻找最短路径或拓扑排序等。