顺序表实现栈的基本操作
亲测可运行
#include<stdio.h>
#define maxsize 100
#define ok 1
#define error 0
typedef bool status;
//顺序栈的定义
typedef struct
{
int data[maxsize];
int top;
}SqStack;
//对栈的初始化
void initstack(SqStack &st){
st.top=-1;
}
//判断栈空代码
status isempty(SqStack st){
if(st.top==-1) //栈空
return ok;
else //栈中含有元素
return error;
}
//判断栈满代码
status isfull(SqStack st){
if(st.top == maxsize-1) //栈满
return ok;
else //栈不满
return error;
}
//进栈代码
status push(SqStack &st,int x){
if(st.top == maxsize-1) //数组的下标从0开始
return error;
++(st.top); //先移动指针 再进栈
st.data[st.top]=x;
return ok;
}
//出栈代码
status pop(SqStack &st,int &x){
if(st.top == -1) //栈空情况
return error;
x=st.data[st.top];
--(st.top);
return ok; //出栈成功
}
//打印栈中元素
void printfs(SqStack st)
{
int i;
if(st.top == -1)
printf("栈中无元素\n");
else
printf("栈顶\n");
for(i=st.top;i>=0;i--){
printf("|%d|\n",st.data[i]);
}
printf("栈底\n");
}
//主函数
main(){
SqStack st; //先定义一个栈
int choose;
printf("1.初始化栈\n");
printf("2.判断栈是否为空\n");
printf("3.判断栈是否为满\n");
printf("4.进栈操作\n");
printf("5.出栈操作\n");
printf("6.打印栈中元素\n");
for(;;){
printf("请输入您的操作\n");
scanf("%d",&choose);
switch(choose){
case 1:
initstack(st); //对栈进行初始化
break;
case 2:
if(isempty(st)==1)
printf("栈空\n");
else
printf("栈中存在元素\n");
break;
case 3:
if(isfull(st)==1)
printf("栈满\n");
else
printf("栈不满\n");
break;
case 4: //进栈操作
int x;
printf("请输入您需要进栈的元素\n");
scanf("%d",&x);
if(push(st,x)==0)
printf("栈满,无法入栈\n");
else
printf("入栈成功\n");
break;
case 5: //出栈操作
if(pop(st,st.data[st.top])==0)
printf("栈空,无法出栈\n");
else
printf("出栈成功\n");
break;
case 6: //打印栈
printfs(st);
break;
}
}
}