栈(学习笔记)

这篇博客主要介绍了栈的基本概念,包括顺序栈、共享栈和链栈的定义、初始化和操作。顺序栈中详细阐述了入栈、出栈和栈空判断的代码实现。共享栈则是两个栈共享同一数组空间,分别从两端进行操作。链栈部分则提到了链式存储栈的初始化、入栈、出栈和销毁栈等操作。
摘要由CSDN通过智能技术生成

写在前面的一些话:这只是个人学习王道数据结构的代码笔记,仅供参考,如果有错误请友好的指出,谢谢!!!


栈(stack)是一种只允许在一端插入或删除操作的线性表。


一、顺序栈

采用顺序存储的栈成为顺序栈。

顺序栈的初始化

顺序栈的定义如下:

#define MaxSize 10 //定义栈中元素的最大个数
typedef struct {
   
    int data[MaxSize];//静态数组存放栈中元素
    int top;//栈顶指针
}SqStack;

顺序栈的初始化:

void InitStack(SqStack &S){
   
    S.top=-1;//初始化栈顶指针
}

判断一个顺序栈是否栈空:

bool SqStackEmpty(SqStack S){
   
    if(S.top==-1)
        return true;//栈空
    else
        return false;//不空
}

完整代码:

#include <iostream>
using namespace std;
#define MaxSize 10 //定义栈中元素的最大个数
typedef struct {
   
    int data[MaxSize];//静态数组存放栈中元素
    int top;//栈顶指针
}SqStack;
void InitStack(SqStack &S){
   
    S.top=-1;//初始化栈顶指针
}
bool SqStackEmpty(SqStack S){
   
    if(S.top==-1)
        return true;//栈空
    else
        return false;//不空
}
void testStack(){
   
    SqStack S;//声明一个顺序栈(分配空间)
    InitStack(S);//初始化一个栈
    cout<<(SqStackEmpty(S)?"栈空":"栈非空")<<endl;
}
int main(){
   
    testStack();
    return 0;
}

出栈和入栈

入栈:

bool Push(SqStack &S,int x){
   
    //入栈
    if(S.top==MaxSize-1)
        return false;//栈满,报错
    S.top++;//指针先加一
    S.data[S.top]=x;//新元素入栈
    return true;
}

出栈:

bool Pop(SqStack &S,int &x){
   
    //出栈
    if(S.top==-1)//栈空,报错
        return false;
    x=S.data[S.top];//栈顶元素先出栈
    S.top--;//栈顶指针减一
    return true;
}

读栈顶元素(出栈会删除栈顶元素,读栈顶元素不会删除栈顶元素):

bool GetTop(SqStack S,int &x){
   
    //读栈顶元素
    if(S.top==-1)//栈空报错
        return false;
    x=S.data[S.top];//x记录栈顶元素
    return true;
}

完整代码:

#include <iostream>
using namespace std;
#define MaxSize 10 //定义栈中元素的最大个数
typedef struct {
   
    int data[MaxSize];//静态数组存放栈中元素
    int top;//栈顶指针
}SqStack;
void InitStack(SqStack &S){
   
    S.top=-1;//初始化栈顶指针
}
bool SqStackEmpty(SqStack S){
   
    if(S.top==-1)
        return true;//栈空
    else
        return false;//不空
}
bool Push(SqStack &S,int x){
   
    //入栈
    if(S.top==MaxSize-1)
        return false;//栈满,报错
    S.top++;//指针先加一
    S.data[S.top]=x;//新元素入栈
    return true;
}
bool Pop(SqStack &S,int &x){
   
    //出栈
    if(S.top==-1)//栈空,报错
        return false;
    x=S.data[S.top];//栈顶元素先出栈
    S.top--;//栈顶指针减一
    return true;
}
bool GetTop(SqStack S,int &x){
   
    //读栈顶元素
    if(S.top==-1)//栈空报错
        return false;
    x=S.data[S.top]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值