基本定义
栈是限定仅在表尾进行插入或删除操作的线性表。先进后出
通常,表头端称为栈底,表尾端称为栈顶。
栈只是对表插入和删除操作的位置进行了限制,并没有限定插入和删除操作进行的时间。
基本操作
InitStack( &S ) //构造空栈
StackEmpty( S ) //判断栈空
Push( &S, e ) //出栈
Pop( &S, &e ) //退栈、出栈
GetTop( S, &e ) //取出栈顶元素
DestroyStack( &S ) //销毁栈
ClearStack( &S ) //清空栈
StackLength( S ) //返回栈长
StackTraverse( S, visit() ) //遍历栈
栈的表示和实现
顺序栈
base指针指向线性表的第一个元素,称为栈底指针。
top指针指向线性表的最后一个元素的==下一个位置==,称为栈顶指针。
栈不存在:base == NULL;空栈:base == top
//结构的定义
typedef int SElemType;
typedef struct
{
SElemType *base; //栈底指针
SElemType *top; //栈顶指针
int stacksize; //当前可用空间大小
}SqStack;
readme
上面结构的定义只是为了更加方便理解顺序栈
下面代码是栈的顺序实现,需要借助顺序表进行实现
由于和顺序表基本一致,我们采用类的继承来简化代码
同时,我们省略了下面代码的头文件
如需运行,和顺序表相关代码结合即可
需要将顺序表中析构函数设为虚函数
//顺序表实现栈,继承自List
//使用L来表示栈,另外设栈顶和栈底指针
template <typename ElemType>
class Stack :public List<ElemType>
{
public:
ElemType* base;//指向L实现的栈的栈底
ElemType* top;//指向L实现的栈的栈顶
Stack();//构造函数
~Stack();//析构函数
Status InitStack();//栈的初始化
Status Stack_Pop();//弹出栈