数据结构--知识点总结--栈和队列

本文深入探讨了数据结构中的栈和队列。栈是受约束的线性表,主要介绍了顺序栈和链式栈的实现,以及括号匹配、表达式求值和递归等应用场景。队列则是一种先进先出的数据结构,讨论了顺序队列、循环队列和链式队列,并举例说明了打印杨辉三角和优先级队列的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 栈

1.1 栈的基本概念

  • 栈:受约束的线性表,只允许栈顶元素入栈和出栈。

1.2 栈的实现

  • 存储:顺序栈 链式栈
  • 操作:
    入栈:先判栈满,elements[++top] = x;
    出栈:先判栈空,x = elements[top—];
    判栈空:top=-1;
    判栈满:top = maxsize - 1;

  • 双栈共享一个栈空间

    • 两个栈共享一个数组空间V[maxSize]
    • 设立栈顶指针数组 t[2] 和栈底指针数组 b[2]
    • 初始 t[0] = b[0] = -1, t[1] = b[1] = maxSize
    • 栈满条件:t[0]+1 == t[1] //栈顶指针相遇
    • 栈空条件:t[0] = b[0]或t[1] = b[1] //退到栈底
    • t[i]和b[i]分别指示第 i个栈的栈顶与栈底

1.3 栈的应用

1.3.1 括号匹配
1.3.2 表达式求值
  • 算术表达式的3种形式:前缀式、中缀式、后缀式
    这里写图片描述
    后缀表达式求值:可用栈解决。
    具体执行过程:
    当遇到数值的时候入栈,当遇到运算符的时候,连续两次出栈,将两个出栈元素结合运算符进行运算,先出栈的是第二个操作数(因为第二个操作数后入栈),将结果当成新遇到的
### 数据结构中的队列 #### 的概念与特性 是一种遵循后进先出(LIFO, Last In First Out)原则的线性数据结构。这意味着最后被压入的元素会最先弹出[^1]。通常支持两个基本操作:`push` `pop`,分别用于向顶添加元素以及移除顶元素。 以下是的一个简单实现示例: ```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() def is_empty(self): return len(self.items) == 0 def peek(self): if not self.is_empty(): return self.items[-1] def size(self): return len(self.items) ``` #### 队列的概念与特性 队列则是一种先进先出(FIFO, First In First Out)的数据结构。最早进入队列的元素会被优先处理。队列的主要操作包括 `enqueue` `dequeue`,前者用来在队尾插入新元素,后者用来从队首移除元素。 下面是一个基于列表实现的队列例子: ```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) def is_empty(self): return len(self.items) == 0 def front(self): if not self.is_empty(): return self.items[0] def size(self): return len(self.items) ``` #### 双端队列的特点 双端队列(Deque)结合了队列的功能,允许在一端或两端执行插入删除操作[^2]。这种灵活性使得双端队列成为一种非常强大的工具,在许多算法场景下都能发挥重要作用。 #### 存储方式 无论是还是队列,它们都可以通过顺序存储或者链式存储的方式来实现。对于顺序存储而言,通常是利用数组作为底层容器;而链式存储则是借助指针连接各个节点形成链条状结构[^3]。 需要注意的是,尽管队列属于线性表范畴,但由于其特定的操作约束条件限制了随机访问能力——也就是说无法像普通线性表那样随意获取其中间位置上的任意元素。 #### 应用领域 - **的应用**: 表达式求值、括号匹配检测、函数调用管理等。 - **队列的应用**: 打印任务调度、广度优先搜索(BFS)、银行排队系统模拟等问题解决过程中经常需要用到队列机制。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值