数据结构栈和队列

数据结构:栈与队列

栈和队列是两种常见的数据结构,用于管理数据的存储和访问方式。它们都属于线性结构,但在操作规则和应用场景上有显著差异。

栈(Stack)

栈是一种遵循**后进先出(LIFO)**原则的数据结构。最后插入的元素最先被移除。栈的基本操作包括:

  • Push(压栈):将元素添加到栈顶。
  • Pop(出栈):移除并返回栈顶元素。
  • Peek/Top(查看栈顶):返回栈顶元素但不移除。
  • isEmpty(判空):检查栈是否为空。

实现方式

  • 数组实现:通过固定大小的数组和栈顶指针实现。
  • 链表实现:使用链表的头部作为栈顶,动态调整大小。

应用场景

  • 函数调用栈(递归调用)。
  • 表达式求值(如括号匹配)。
  • 浏览器历史记录(后退功能)。

队列(Queue)

队列是一种遵循**先进先出(FIFO)**原则的数据结构。最先插入的元素最先被移除。队列的基本操作包括:

  • Enqueue(入队):将元素添加到队尾。
  • Dequeue(出队):移除并返回队首元素。
  • Front(查看队首):返回队首元素但不移除。
  • isEmpty(判空):检查队列是否为空。

实现方式

  • 数组实现:使用循环数组解决空间浪费问题。
  • 链表实现:通过维护头尾指针实现动态调整。

变种队列

  • 双端队列(Deque):两端均可进行插入和删除。
  • 优先队列(Priority Queue):元素按优先级出队。

应用场景

  • 任务调度(如打印队列)。
  • 消息队列(异步通信)。
  • 广度优先搜索(BFS)算法。

栈与队列的对比

特性 队列
操作原则 LIFO(后进先出) FIFO(先进先出)
插入位置 栈顶 队尾
删除位置 栈顶 队首
典型应用 递归、括号匹配 任务调度、BFS

代码示例(Python)

栈的实现(数组)

复制代码
class Stack:
    def __init__(self):
        self.items = []

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

    def pop(self):
        return self.items.pop()

    def peek(self):
        return self.items[-1]

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

队列的实现(链表)

复制代码
class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class Queue:
    def __init__(self):
        self.front = None
        self.rear = None

    def enqueue(self, item):
        new_node = Node(item)
        if self.rear is None:
            self.front = new_node
            self.rear = new_node
        else:
            self.rear.next = new_node
            self.rear = new_node

    def dequeue(self):
        if self.front is None:
            return None
        temp = self.front
        self.front = temp.next
        if self.front is None:
            self.rear = None
        return temp.data

总结

栈和队列是基础但强大的数据结构,理解其特性和实现方式有助于解决特定问题。栈适合需要回溯的场景,而队列适合顺序处理的场景。根据需求选择合适的数据结构能显著提升算法效率。

相关推荐
CSharp精选营19 小时前
关系型 vs 非关系型:从原理到选型,一文搞定数据库核心分类
数据结构·nosql·关系型数据库·非关系型数据库·技术选型
刘马想放假4 天前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
北域码匠5 天前
冒泡排序太慢?鸡尾酒排序双向优化,原生 C# 零第三方库完整代码
数据结构·排序算法·泛型·c# 算法·鸡尾酒排序·原生 c# 开发·冒泡排序优化·嵌入式算法
Darling噜啦啦12 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
小小工匠13 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
玖玥拾13 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
Qres82113 天前
算法复键——树状数组
数据结构·算法
牛油果子哥q13 天前
并查集(DSU)超精讲,路径压缩、按秩合并、万能模板、连通性判定、最小生成树与刷题实战全解
数据结构·c++·最小生成树·并查集
凌波粒13 天前
LeetCode--491.递增子序列(回溯算法)
数据结构·算法·leetcode
WL学习笔记13 天前
单项不带头不循环链表
数据结构·链表