顺序栈练习
相关内容:
1.判断顺序栈栈满的两种方式
2.一张图理解栈顶指针加加减减的问题
3.栈的顺序存储结构(顺序栈)
//顺序栈的初始化、判空、入栈、出栈、读取栈顶元素
//顺序栈的结构:数组、栈顶指针(本质是下标)
#include<stdio.h>
#define MAXSIZE 10
typedef int Status;
#define TRUE 1
#define FALSE 0
typedef struct
{
int data[MAXSIZE];
int top;//栈顶指针指向栈顶元素是上一个位置
}SqStack;
//顺序栈的初始化:初始化栈顶指针
Status InitSqStack(SqStack *S){
S->top=-1;
return TRUE;
}
//顺序栈的判空(使用前,不是使用时):栈顶指针为-1
Status isEmpty(SqStack *S){
if (S->top==-1)
return TRUE;
else
return FALSE;
}
//顺序栈的入栈:判满,栈顶指针+1,添加元素
Status Push(SqStack *S,int e){
if (S->top==MAXSIZE-1)//判满
return FALSE;
S->data[++S->top]=e;//先使用top后++
return TRUE;
}
//顺序栈的出栈:判空,栈顶元素出栈,栈顶指针-1
Status Pop(SqStack *S,int *e){
if (S->top==-1)//判空
return FALSE;
else{
*e=S->data[S->top--];
return TRUE;
}
}
//顺序栈的读取栈顶元素:判空,返回元素
Status GetElem(SqStack *S,int *e){
if (S->top==-1)//判空
return FALSE;
else{
*e=S->data[S->top];
return TRUE;
}
}
int main(){
int n,e;
SqStack S;
InitSqStack(&S);
printf("初始化完成!\n");
if (!isEmpty(&S))//使用前判空
printf("栈空!\n");
printf("输入需要进栈的元素个数:");
scanf("%d",&n);
for (size_t i = 0; i < n; i++)
{
printf("输入第%d个进栈元素:",i+1);
scanf("%d",&e);
Push(&S,e);
}
GetElem(&S,&e);
printf("栈顶元素为:%d\n",e);
printf("所有元素出栈\n");
for (size_t i = 0; i < n; i++)
{
printf("输出第%d个出栈元素:",i+1);
Pop(&S,&e);
printf("%d\n",e);
}
return 0;
}