数据结构之堆栈
1、定义
堆栈,简称栈,是一种操作受限的线性表。之所以说它操作受限,是因为只能对表的同一端进行插入(入栈)和删除(出栈)操作。我们把能够进行操作的一端叫做栈顶,另一端叫做栈底。栈对数据的操作遵循“后进先出”原则,即第一个进入栈的元素是最后一个出栈的,而最后一个入栈的元素是第一个出栈的。
2、堆栈的基本操作
- 入栈一个元素:push()
- 出栈一个元素:pop()
- 读取栈顶元素:peek()
- 判断栈是否空:IsEmpty()
- 判断栈是否满:IsFull()
- 清空栈:clear()
3、实现堆栈的方法
实现堆栈的方法有两种。第一种称为顺序栈,用顺序存储方式实现,存放栈元素的结构为数组。第二种称为链式栈,存放栈元素的结构为单链表。
3.1顺序栈的实现
要实现顺序栈的必备3样材料有:一个存放栈元素的数组,一个整形变量size用来存放数组的大小,一个整形变量top表示当前栈顶位置。初始时,栈为空,top的值为-1,此时出栈操作和读栈操作会失败;栈满,top的值为(size-1),此时入栈操作会失败。当条件允许时,每入栈一个元素,top值加1,每出栈一个元素,top值减1。
以下是C++代码实现:
#include <iostream>
using namespace std;
//实现顺序栈
//声明
template <class T>
class AStack
{
public:
AStack(int MaxStackSize); //构造函数
~AStack(); //析构函数
bool push(const T& item); //入栈一个元素
bool pop(T& item); //出栈一个元素
bool peek(T& item)const; //取栈顶元素
bool IsEmpty()const; //检查栈是否为空
bo