栈的顺序存储结构称为顺序栈
先看下顺序栈的图片:
SeqStack.h
- //SeqStack.h
- #ifndef SEQSTACK_H
- #define SEQSTACK_H
- const int StackSize=10; //10只是示例性的数据,可以根据实际问题具体定义
- template <class T> //定义模板类SeqStack
- class SeqStack
- {
- public:
- SeqStack( ) ; //构造函数,栈的初始化
- ~SeqStack( ); //析构函数
- void Push(T x); //将元素x入栈
- T Pop( ); //将栈顶元素弹出
- T GetTop( ); //取栈顶元素(并不删除)
- bool Empty( ); //判断栈是否为空
- private:
- T data[StackSize]; //存放栈元素的数组
- int top; //栈顶指针,指示栈顶元素在数组中的下标
- };
- #endif
SeqStack.cpp
- //SeqStack.cpp
- #include "SeqStack.h"
- /*
- * 前置条件:栈不存在
- * 输 入:无
- * 功 能:栈的初始化
- * 输 出:无
- * 后置条件:构造一个空栈
- */
- template <class T>
- SeqStack<T>::SeqStack( )
- {
- top=-1;
- }
- /*
- * 前置条件:栈已存在
- * 输 入:无
- * 功 能:销毁栈
- * 输 出:无
- * 后置条件:释放栈所占用的存储空间
- */
- template <class T>
- SeqStack<T>::~SeqStack( )
- {
- }
- /*
- * 前置条件:栈已存在
- * 输 入:元素值x
- * 功 能:在栈顶插入一个元素x
- * 输 出:如果插入不成功,抛出异常
- * 后置条件:如果插入成功,栈顶增加了一个元素
- */
- template <class T>
- void SeqStack<T>::Push(T x)
- {
- if (top== StackSize-1) throw "上溢";
- top++;
- data[top]=x;
- }
- /*
- * 前置条件:栈已存在
- * 输 入:无
- * 功 能:删除栈顶元素
- * 输 出:如果删除成功,返回被删元素值,否则,抛出异常
- * 后置条件:如果删除成功,栈顶减少了一个元素
- */
- template <class T>
- T SeqStack<T>::Pop( )
- {
- T x;
- if (top==-1) throw "下溢";
- x=data[top--];
- return x;
- }
- /*
- * 前置条件:栈已存在
- * 输 入:无
- * 功 能:读取当前的栈顶元素
- * 输 出:若栈不空,返回当前的栈顶元素值
- * 后置条件:栈不变
- */
- template <class T>
- T SeqStack<T>::GetTop( )
- {
- if (top!=-1)
- return data[top];
- }
- /*
- * 前置条件:栈已存在
- * 输 入:无
- * 功 能:判断栈是否为空
- * 输 出:如果栈为空,返回1,否则,返回0
- * 后置条件:栈不变
- */
- template <class T>
- bool SeqStack<T>::Empty( )
- {
- if(top==-1) return 1;
- else return 0;
- }