两个顺序栈共享一个数组的存储空间

//两个顺序栈共享一个数据空间
#include<stdio.h>
#include "stdlib.h"
#define MAXSIZE 100 //是顺序栈所能存储的最多元素个数
typedef int datatype;
typedef struct//顺序栈的定义 
{
    datatype stack[MAXSIZE]; //stack 数组存储栈中所有的数据元素 
    int top;
 } seqstack;//顺序栈的类型定义 
 seqstack *S,*B,s,b;//顺序栈变量定义 
 
void INITSTACK(seqstack *S,seqstack *B)
{
    S->top=-1;
    B->top=MAXSIZE;
    printf("S,B两个栈共享一个数组的存储空间!");
}
 
 int EMPTY(seqstack *S,seqstack *B)
 {
     if(S->top<0&&B->top>=MAXSIZE)
     {printf("栈空!");
     return 1;
     }
     else return 0;
 }
 int FULL(seqstack *S,seqstack *B)
 {
     if(S->top==B->top-1)
     {printf("栈满");
     return 1;
     }
    else return 0; 
  } 
  seqstack *SPUSH(seqstack *S,datatype x)
  {
      
      if(FULL(S,B))
      {
         return 0; 
      }
      else 
      {printf("请输入数据");
          scanf("%d",&x);
          S->top++;
          S->stack[S->top]=x;
      }
      return S;
   } 
   int SPOP(seqstack *S,seqstack *B)
   {datatype x;
       if(EMPTY(S,B))
       {
        return 0;
       }
       else 
       {
           x=S->stack[S->top];
           S->top--;
           printf("出栈成功:%d\n",x); 
           return (x);
       }
   }
   
   seqstack *BPUSH(seqstack *B,datatype x)
   {
       if(FULL(S,B))
       {
        return 0;    
       }
       else 
       {printf("请输入数据");
          scanf("%d",&x);
           B->top--;
           B->stack[B->top]=x;
       }
       return B;
   }
   
   int BPOP(seqstack *S,seqstack *B)
   {datatype x;
       if(EMPTY(S,B))
       {
           return 0;
       }
       else
       {
           x=B->stack[B->top];
           B->top++;
           printf("出栈成功:%d\n",x);
           return x;
       }
   }
   int select()
    
    {int b; 
    printf("两个顺序栈共用一个数组的存储空间:\n请选择功能\n");
       printf("1.初始化\t");
       printf("2.栈1进栈\t");
       printf("3.栈1出栈\t");
       printf("4.栈2进栈\t");
       printf("5.栈2出栈\t\n");
    printf("0.退出\t\n");
    scanf("%d",&b);
    return b;    
    }

   
   int main()
   {
    int select();
    int a;
      S=&s;
    B=&b; 
       void INITSTACK(seqstack *S,seqstack *B);
    int EMPTY(seqstack *S,seqstack *B);
    int FULL(seqstack *S,seqstack *B);
    seqstack *SPUSH(seqstack *S,datatype x);
    int SPOP(seqstack *S,seqstack *B);
    seqstack *BPUSH(seqstack *B,datatype x);
    int BPOP(seqstack *S,seqstack *B);
    while(1)
    {    
        a=select();
        switch(a)
       {
     case 0: exit(0);
    case 1:INITSTACK(&s,&b);
    break;
           case 2:
       SPUSH(&s,a);
       break;
       case 3:
       SPOP(&s,&b);
       break;
       case 4:
       BPUSH(&b,a);
       break;
       case 5:
        BPOP(&s,&b);
       }

   }
         return 0;
        
    }
    
 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值