【数据结构】其五:栈之顺序栈——2022/01/05
#include <stdio.h>
#include <stdlib.h>
#define MAXLEN 100
#define TESTME 12
typedef struct stack *SeqStack;
typedef struct stack
{
int data[MAXLEN];
int top;
}Stack;
SeqStack InitStack(SeqStack s)
{
s->top = -1;
printf("初始化顺序栈成功!\n");
return s;
}
int EmptyStack(SeqStack s)
{
if (s->top > -1)
{
return 1;
}
else
{
printf("栈空!!\n");
return 0;
}
}
int FullStack(SeqStack s)
{
if (s->top < MAXLEN-1)
{
return 1;
}
else
{
printf("栈已满!!!\n");
return 0;
}
}
int Push(SeqStack s,int x){
if (FullStack(s))
{
s->top++;
s->data[s->top] = x;
printf("进栈成功!\n");
return 1;
}else{
printf("进栈失败!!\n");
return 0;
}
}
int Pop(SeqStack s){
int x;
if (EmptyStack(s))
{
x=s->data[s->top];
s->top--;
printf("出栈成功!\n出栈的值为:%d\n",x);
return x;
}else{
printf("出栈失败!!\n");
return 0;
}
}
int GetPop(SeqStack s){
int x;
if (EmptyStack(s))
{
x=s->data[s->top];
printf("取栈成功!\n栈顶元素的值为:%d\n",x);
return x;
}else{
printf("取栈失败!\n");
return 0;
}
}
void menu(){
printf("\t顺序栈的各种操作:\n");
printf("==============================\n");
printf("\t1----建立顺序栈\n");
printf("\t2----入栈操作\n");
printf("\t3----出栈操作\n");
printf("\t4----求栈顶元素\n");
printf("\t0----退出\n");
printf("==============================\n");
}
int main(){
Stack S;
SeqStack s;
int n,num;
while (num)
{
menu();
printf("请输入菜单号:\n");
scanf("%d", &num);
if (num==0)
{
break;
}
switch (num)
{
case 1:
printf("初始化顺序栈:\n");
s=InitStack(&S);
break;
case 2:
printf("请输入进栈元素值:\t");
scanf("%d", &n);
Push(s, n);
break;
case 3:
Pop(s);
break;
case 4:
GetPop(s);
break;
default:
printf("请输入0-4的数!\n");
break;
}
}
}