Python 数据结构揭秘:栈与队列

栈(Stack)

定义

栈是一种后进先出(Last In First Out, LIFO)的数据结构。它类似于一个容器,只能在一端进行插入和删除操作。栈有两个主要的操作:push(入栈)和 pop(出栈).

基本操作
  • push(入栈):将一个元素添加到栈顶.
    def push(self, item):
        self.items.append(item)
    
  • pop(出栈):移除栈顶的元素,并返回该元素.
    def pop(self):
        if not self.is_empty():
            return self.items.pop()
        return None
    
  • peek(查看栈顶元素):查看栈顶的元素,但不移除它.
    def peek(self):
        if not self.is_empty():
            return self.items[-1]
        return None
    
  • is_empty(检查栈是否为空):判断栈是否为空.
    def is_empty(self):
        return len(self.items) == 0
    
  • size(获取栈的大小):返回栈中元素的数量.
    def size(self):
        return len(self.items)
    
实现方式

栈可以用数组或链表来实现。以下是使用 Python 列表实现栈的完整示例:

class Stack:
    def __init__(self):
        self.items = []

    def push(self, item):
        self.items.append(item)

    def pop(self):
        if not self.is_empty():
            return self.items.pop()
        return None

    def peek(self):
        if not self.is_empty():
            return self.items[-1]
        return None

    def is_empty(self):
        return len(self.items) == 0

    def size(self):
        return len(self.items)
应用场景
  • 函数调用栈:在编程语言中,函数调用时会使用栈来存储函数的局部变量和返回地址等信息.
  • 表达式求值:用于计算算术表达式,如逆波兰表达式(后缀表达式)的求值.
  • 回溯算法:如迷宫求解、八皇后问题等,使用栈来保存回溯过程中的状态.
  • 页面浏览历史:浏览器的前进和后退功能可以使用栈来实现.

队列(Queue)

定义

队列是一种先进先出(First In First Out, FIFO)的数据结构。它类似于一个队列,元素从一端进入,从另一端出去。队列有两个主要的操作:enqueue(入队)和 dequeue(出队).

基本操作
  • enqueue(入队):将一个元素添加到队列的尾部.
    def enqueue(self, item):
        self.items.append(item)
    
  • dequeue(出队):移除队列头部的元素,并返回该元素.
    def dequeue(self):
        if not self.is_empty():
            return self.items.pop(0)
        return None
    
  • peek(查看队首元素):查看队列头部的元素,但不移除它.
    def peek(self):
        if not self.is_empty():
            return self.items[0]
        return None
    
  • is_empty(检查队列是否为空):判断队列是否为空.
    def is_empty(self):
        return len(self.items) == 0
    
  • size(获取队列的大小):返回队列中元素的数量.
    def size(self):
        return len(self.items)
    
实现方式

队列可以用数组或链表来实现。以下是使用 Python 列表实现队列的完整示例:

class Queue:
    def __init__(self):
        self.items = []

    def enqueue(self, item):
        self.items.append(item)

    def dequeue(self):
        if not self.is_empty():
            return self.items.pop(0)
        return None

    def peek(self):
        if not self.is_empty():
            return self.items[0]
        return None

    def is_empty(self):
        return len(self.items) == 0

    def size(self):
        return len(self.items)
应用场景
  • 任务调度:操作系统中的进程调度、打印机任务队列等,按照任务到达的顺序进行调度.
  • 缓冲处理:如网络数据包的传输缓冲、音频播放缓冲等,确保数据的顺序性和完整性.
  • 广度优先搜索(BFS):在图的遍历算法中,使用队列来存储待访问的节点.
  • 客户服务系统:如银行排队系统、呼叫中心等,按照客户到达的顺序提供服务.

总结

  • :适合需要回溯或撤销操作的场景,如函数调用、表达式求值等.
  • 队列:适合需要保持元素顺序的场景,如任务调度、缓冲处理等.

栈和队列在实际应用中非常广泛,理解它们的原理和操作方式对于解决各种编程问题具有重要意义.

你可能感兴趣的:(python,数据结构)