915xjtu2017_3

设有两个栈s1,s2都采用顺序栈,并且共享一个存储区[0…maxsize-1].

试设计共享栈是s1,s2以及有关入栈和出栈操作的算法,假设栈中元素为int型,奇数入s1,偶数入s2。

#include<stdio.h>
#define MAXSIZE 3
typedef struct ShareStack{
	int data[MAXSIZE];
	int top1=-1;
	int top2=MAXSIZE;
}ShareStack;
int count=0;
bool Push(ShareStack &S,int flag,int x){//flag=1代表入栈1,2代表入栈2 
	if(S.top1+1==S.top2) {
		printf("栈满\n");
		return false;
	}else{
		if(flag==1){
			S.data[++S.top1]=x;
			printf("入栈成功\n");
			count++;
			return true;
		}else if(flag==2){
			S.data[--S.top2]=x;
			printf("入栈成功\n");
			count++;
			return true;
		}
	}
}
bool Pop(ShareStack &S,int flag,int x){//flag=1代表入栈1,2代表入栈2 
	if((S.top1==-1&&flag==1)||(S.top2==MAXSIZE&&flag==2)){
		printf("栈空\n");
		return false;
	}else{
		if(flag==1){
			x=S.data[S.top1--];
			printf("出栈成功\n");
			count--;
			return true;
		}else if(flag==2){
			x=S.data[S.top2++];
			printf("出栈成功\n");
			count--;
			return true;
		}			
	}	
}
int main(){
	ShareStack S;
	int PushPop;
    while(count<=MAXSIZE){
    	printf("请选择0入or1出栈:");
    	scanf("%d",&PushPop);
		if(PushPop==0){
	    	int x;
			printf("请输入一个数入栈:");
	        scanf("%d",&x);
	        if(x%2==0){//偶数入栈1 
	        	Push(S,1,x);
	        }else if(x%2==1){//奇数入栈2 
	            Push(S,2,x);
	        }  
		}else if(PushPop==1){
	        int y,e;
			printf("请选择要出栈的栈栈号:");
			scanf("%d",&y);
			if(y==1){
	            Pop(S,1,e);
	        }else if(y==2){
	            Pop(S,2,e);
	        }
   		}
	}	
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值