1. 程式人生 > >兩個順序棧共享一個數組的儲存空間

兩個順序棧共享一個數組的儲存空間

//兩個順序棧共享一個數據空間
#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;
        
    }