stack(栈)
Stack
栈(Stack)概述
- 定义:栈是一种仅允许在一端进行插入和删除操作的线性表。这一端被称为“顶端”(Top),符合后进先出(LIFO)的原则。
- LIFO(Last In, First Out):最后插入的元素最先被删除。
- 基本操作:
- Push:在栈顶插入元素。
- Pop:删除并返回栈顶元素(也称为“TopAndPop”)。
- IsEmpty:检查栈是否为空。
- TopValue:返回栈顶元素但不删除它。
栈的抽象数据类型(ADT)
1 | template <typename E> |
基于数组的栈实现
数组实现的栈
- 特征:栈的大小是固定的。
- 类定义:
1 | template <typename E> |
操作说明
- 构造函数:
- 初始化栈的最大大小和栈顶索引,并分配存储栈元素的数组。
- 清空栈:
- 将栈顶索引重置为0,表示栈为空。
- Push操作:
- 在栈顶插入元素之前检查栈是否已满。
- 将元素存储在当前栈顶位置,然后将栈顶索引加1。
- Pop操作:
- 在弹出元素之前检查栈是否为空。
- 将栈顶索引减1,并返回栈顶元素。
- TopValue操作:
- 在返回栈顶元素之前检查栈是否为空。
时间复杂度
- Push操作:\(O(1)\)(常数时间)
- Pop操作:\(O(1)\)(常数时间)
基于链表的栈实现
链表实现的栈
- 特征:使用链表实现栈,节点中包含指向下一个节点的指针。
- 类定义:
1 | template <typename E> |
操作说明
- 构造函数:
- 初始化栈顶指针和元素数量。
- 清空栈:
- 通过循环删除每个节点,直到栈为空。
- Push操作:
- 创建一个新节点,将其链接到当前栈顶,然后更新栈顶指针。
- Pop操作:
- 在弹出元素之前检查栈是否为空。
- 获取栈顶元素,更新栈顶指针,删除旧的栈顶节点。
- TopValue操作:
- 在返回栈顶元素之前检查栈是否为空。
时间复杂度
Push操作:\(O(1)\)(常数时间)
Pop操作:\(O(1)\)(常数时间)
数组实现:适合元素数量已知且变化不大的情况,操作简单且高效。
链表实现:适合动态大小的栈,能够处理频繁的插入和删除操作,避免了数组固定大小的限制。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Totoroの旅!
评论