#include<stdio.h>
#define Maxsize 50
struct SqStack
{
int data[Maxsize];
int top1,top2;
};
int Push(struct SqStack *S);
int Pop(struct SqStack *S);
int GetData(struct SqStack S);
int main()
{
struct SqStack S;
S.top1 =-1;
S.top2 =Maxsize;
int operate;
printf("请输入要执行的操作(1表示进栈,0表示出栈,-1表示结束操作):");
scanf("%d",&operate);
while(operate!=-1)
{
if(operate==1)
Push(&S); //进栈
else if(operate==0)
Pop(&S); //出栈
printf("请输入要执行的操作(1表示进栈,0表示出栈,-1表示结束操作):"); //继续执行出栈入栈操作
scanf("%d",&operate);
}
printf("操作执行完毕!!\n出栈入栈完毕后s1栈和s2栈中元素如下:\n");
GetData(S);
return 0;
}
int Push(struct SqStack *S) //入栈操作
{
if(S->top2 -S->top1 ==1) //栈满,结束入栈
return 0;
int x,state;
printf("请输入要入栈的元素(输入-1空格然后任意数字结束入栈)以及入s1栈(输入1)还是s2栈(输入2),空格间隔:\n");
scanf("%d %d",&x,&state);
while(x!=-1)
{
if(S->top2 -S->top1 ==1) //栈满,结束入栈
return 0;
if(state==1)
{
S->top1 ++;
S->data [S->top1]=x;
}
else if(state==2)
{
S->top2 --;
S->data [S->top2]=x;
}
printf("请输入要入栈的元素(输入-1空格然后任意数字结束入栈)以及入s1栈(输入1)还是s2栈(输入2),空格间隔:\n");
scanf("%d %d",&x,&state);
}
return 0;
}
int Pop(struct SqStack *S) //出栈操作
{
if(S->top1 ==-1&&S->top2 ==Maxsize) //栈空
{
printf("栈为空,结束出栈操作!!\n");
return 0;
}
int state;
printf("请输入要栈几出栈,s1(输入1),s2(输入2),-1结束出栈操作:");
scanf("%d",&state);
while(state!=-1)
{
if(S->top1 ==-1&&S->top2 ==Maxsize) //栈空
{
printf("栈为空,结束出栈操作!!\n");
return 0;
}
if(state==1)
{
if(S->top1 ==-1)
printf("s1栈为空,若要将s2元素出栈输入2,否则输入-1结束出栈操作!\n");
S->top1 --;
}
else if(state==2)
{
if(S->top2 ==Maxsize)
printf("s2栈为空,若要将s1元素出栈输入1,否则输入-1结束出栈操作!\n");
S->top2 ++;
}
printf("请输入要栈几出栈,s1(输入1),s2(输入2),-1结束出栈操作:");
scanf("%d",&state);
}
return 0;
}
int GetData(struct SqStack S) //读出栈元素
{
if(S.top1 ==-1)
printf("s1栈为空!\n");
else
{
printf("s1栈内元素如下:\n");
while(S.top1 !=-1)
{
printf("%3d",S.data [S.top1 --]);
}
putchar('\n');
}
if(S.top2 ==Maxsize)
printf("s2栈为空!\n");
else
{
printf("s2栈内元素如下:\n");
while(S.top2 !=Maxsize)
{
printf("%3d",S.data [S.top2 ++]);
}
putchar('\n');
}
return 0;
}
两栈共用一个栈,分别以数组头和尾为为栈底,设计算法实现s1,s2出栈入栈。
最新推荐文章于 2022-09-13 16:02:08 发布