数据结构学习【栈 顺序结构 C++】顺序栈实现

数据结构学习【栈 顺序结构 C++】


本次实现的是栈的顺序存储结构——顺序栈。
这里采用 top指针始终指向栈顶元素。

#include <iostream>
using namespace std;
#define MaxSize 10
// ADT
// InitStack(&S) //初始化栈
// DestroyStack(&S) //销毁栈

// Push(&S,x) //进栈
// Pop(&S,&x) //出栈 弹出栈顶元素
// GetTop(S,&x) //读栈顶元素 不改变栈

// IsEmpty(S);//判断栈是否为空
// PrintStack(S);//顺序输出栈
typedef struct SqStack{
    
    
    int data[MaxSize];
    int top;
}SqStack;

// Code
//初始化栈
bool InitStack(SqStack &S){
    
    
    S.top=-1;//此处可以由两种写法 1.top指针始终指向栈顶元素(我采用的方法)
             //2.top指针始终指向栈顶元素的下一个元素(这样的话,这里就要设为S.top=0,同时后面的push和pop操作也有变化)
    return true;
}
//销毁栈
void DestroyStack(SqStack &S){
    
    
    S.top=-1;//由于是静态分配,所以不需要做多与操作,系统自动会回收
}
//进栈
bool Push(SqStack &S,int x){
    
    
    if(S.top==MaxSize-1)//判断是否栈满
        return false;
    S.data[++S.top]=x;
    return true;
    
} 
//出栈 弹出栈顶元素
bool Pop(SqStack &S,int &x){
    
    
    if(S.top==-1)//判断是否栈空
        return false;
    x=S.data[S.top--];
    return true;
} 
//读栈顶元素 不改变栈
bool GetTop(SqStack S,int &x){
    
    
    if(S.top==-1)//判断是否栈空
        return false;
    x=S.data[S.top];
    return true;
} 
//判断栈是否为空
bool IsEmpty(SqStack S){
    
    
    if(S.top==-1)
        return true;
    else
        return false;
}
//顺序输出栈
void PrintStack(SqStack S){
    
    
    printf("栈内元素(从栈顶开始):");
    for(int i=S.top;i>=0;i--){
    
    
        printf("%2d,",S.data[i]);
    }
    printf("\n");
}
int main(){
    
    
    SqStack S;
    //创建栈并push元素
    InitStack(S);
    Push(S,1);
    Push(S,2);
    Push(S,3);
    Push(S,4);
    Push(S,5);
    PrintStack(S);
    //pop一个元素
    int x=-1;
    Pop(S,x);
    printf("弹出栈顶元素:%d\n",x);
    PrintStack(S);
    //获得栈顶元素
    GetTop(S,x);
    printf("栈顶元素为:%d\n",x);
    PrintStack(S);
    system("pause");
}

运行结果如下
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/toro180/article/details/122412852