#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 20
#define ElemType int
typedef struct SQtack{//动态顺序存储结构,存储空间随栈的大小变化
ElemType *top,*bottom;//定义栈顶和栈底
int stacksize;//栈的存储空间大小
}SQtack;
void Init_stack(SQtack &S){//初始化栈
S.bottom=(ElemType *)malloc(MAXSIZE*sizeof(ElemType));
if(!S.bottom) printf("未申请到存储空间\n");
S.top=S.bottom; //初始化栈,使栈顶与栈底指向同一位置
S.stacksize=MAXSIZE;
}
void Push_stack(SQtack &S){
ElemType e;
printf("输入入栈元素:\n");
scanf("%d",&e);
while(e!=-1){
if(S.top-S.bottom==S.stacksize-1){
printf("栈满");//此处用top-bottom=stacksize-1
//判断栈是否已满,浪费了栈顶一个空间,
}else{
//此处采用先放元素再加加的方式
*S.top=e;
S.top++;
scanf("%d",&e);
}
}
}
void Get_top(SQtack &S){//访问栈顶元素
ElemType top_e;
if(S.bottom!=S.top){
top_e=*(S.top-1);
printf("%d:栈顶\n",top_e);
}
}
void Pop_stack(SQtack &S){
ElemType a;
if(S.top==S.bottom){
printf("空栈");
}else{
S.top--;//先减减,再出栈
a=*S.top;
printf("%d:出栈\n",a);
}
}
int main(){
SQtack S;
Init_stack(S); //初始化,栈
Push_stack(S);//入栈
Get_top(S);//访问栈顶元素,还在栈中
Pop_stack(S); //栈顶元素出栈
Get_top(S);
return 0;
}
栈的动态顺序存储基本操作 一(初始化,进栈,访问栈顶元素,出栈)
原文:https://www.cnblogs.com/jiafeng1996/p/11297035.html