顺序栈的基本操作
问题描述:
1、定义一个顺序栈,输入测试数据, 分别根据其中的命令字符来处理堆栈;
(1)对所有的’P’操作,如果栈满输出’F’,否则完成压栈操作;
(2)对所有的’A’操作,如果栈空,则输出’E’,否则输出当时栈顶的值;
(3)对所有的’O’操作,如果栈空,则输出’E’,否则输出栈顶元素的值,并让其出栈;
上代码啦!!!!
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#define Stack_Size 10
typedef struct
{
int elem[Stack_Size];
int top;
}SeqStack;
void initStack(SeqStack *S)
{
S->top=-1;
}
int Push(SeqStack *S)
{
int i,x,n;
printf("请输入你要测试的数据个数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入第%d个数:",i+1);
scanf("%d",&x);
if(S->top==Stack_Size-1)
printf(" F \n");
else
{
S->top++;
S->elem[S->top]=x;
}
}
return 1;
}
int GetTop(SeqStack *S)
{
if(S->top==-1)
printf(" E \n");
else
printf("栈顶的值为:%d.\n",S->elem[S->top]);
}
int Pop(SeqStack *S)
{
if(S->top==-1)
printf(" E \n");
else
{
printf("栈顶元素的值为: %d .\n",S->elem[S->top]);
S->top--;
}
}
int main()
{
int k=-1;
char select;
SeqStack S;
initStack(&S);
printf("************************************************************\n");
printf("* P.如果栈满输出'F',否则完成压栈操作; *\n");
printf("* A.如果栈空,则输出'E',否则输出当时栈顶的值; *\n");
printf("* O.如果栈空,则输出'E',否则输出栈顶元素的值,并让其出栈;*\n");
printf("* E.退出 *\n");
printf("************************************************************\n");
printf("\n");
while(1)
{
printf("请选择你要操作的选项:");
scanf("%c",&select);
switch(select)
{
case 'P': Push(&S);break;
case 'A': GetTop(&S);break;
case 'O': Pop(&S);break;
case 'E': exit(0);break;
}
getchar();
printf("\n");
}
return 0;
}