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