数据结构与算法--栈

本文详细介绍了栈这一数据结构的基本定义、操作、顺序栈和链式栈的实现,以及它们在四则表达式求值、中缀转后缀等场景的应用。通过对顺序表和链表的比较,探讨了选择栈实现方式的考量因素。
摘要由CSDN通过智能技术生成

基本定义

栈是限定仅在表尾进行插入或删除操作的线性表。先进后出

通常,表头端称为栈底,表尾端称为栈顶。

栈只是对表插入和删除操作的位置进行了限制,并没有限定插入和删除操作进行的时间。

基本操作

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();//弹出栈
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值