/*
两栈共享空间
*/
//存储结构定义
const int StackSize = 10;
typedef int DataType;
typedef struct
{
DataType data[StackSize];
int top1,top2; //分别为各自栈顶元素在数组中的下标
}BothStack;
//入栈操作
void Push(BothStack &S,int i,DataType x)
{
if(S.top1 == S.top2 - 1)
{
printf("下溢");
exit(-1); //判断是否栈满
}
if(i == 1)
S.data[++S.top1] = x; //在栈1插入
if(i == 2)
S.data[--S.top2] = x; //在栈2插入
}
//出栈操作:当top1指向-1时,栈1为空,当top2指向StackSize时栈2为空,当从栈2删除元素,栈顶指针top2加1
DataType Pop(BothStack &S,int i)
{
if(i == 1){
if(S.top1 == 1)
{
printf("下溢");
exit(-1);
}
return S.data[S.top1--];
}
if(i == 2){
if(S.top2 == StackSize)
{
printf("下溢");
exit(-1);
}
return S.data[S.top2++];
}
}
两栈共享空间
*/
//存储结构定义
const int StackSize = 10;
typedef int DataType;
typedef struct
{
DataType data[StackSize];
int top1,top2; //分别为各自栈顶元素在数组中的下标
}BothStack;
//入栈操作
void Push(BothStack &S,int i,DataType x)
{
if(S.top1 == S.top2 - 1)
{
printf("下溢");
exit(-1); //判断是否栈满
}
if(i == 1)
S.data[++S.top1] = x; //在栈1插入
if(i == 2)
S.data[--S.top2] = x; //在栈2插入
}
//出栈操作:当top1指向-1时,栈1为空,当top2指向StackSize时栈2为空,当从栈2删除元素,栈顶指针top2加1
DataType Pop(BothStack &S,int i)
{
if(i == 1){
if(S.top1 == 1)
{
printf("下溢");
exit(-1);
}
return S.data[S.top1--];
}
if(i == 2){
if(S.top2 == StackSize)
{
printf("下溢");
exit(-1);
}
return S.data[S.top2++];
}
}