两栈共用一个栈,分别以数组头和尾为为栈底,设计算法实现s1,s2出栈入栈。

#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;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值