首页常见问题正文

队列和栈是什么?有什么区别?

更新时间:2023-03-28 来源:黑马程序员 浏览量:

IT培训班

  队列和栈是常见的数据结构,它们都用于存储和管理数据,但是它们在存储和访问数据的方式上有所不同。

  队列是一种先进先出(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是图论中常见的搜索算法,它们可以用来解决许多问题,例如寻找最短路径或拓扑排序等。

分享到:
在线咨询 我要报名
和我们在线交谈!