数据结构学习【栈 顺序结构 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");
}
运行结果如下