1.概述
本文使用代码实现了顺序结构——双栈共享空间
2.代码实现
顺序双栈
#include<bits/stdc++.h>
using namespace std;
#define MaxSize 20
typedef struct{
int data[MaxSize];
int top1; //栈1
int top2; //栈2
}BothStack;
//0.初始化双栈
void InitStack(BothStack &S){
S.top1=-1;
S.top2=MaxSize;
}
//1.判断栈空
bool Empty(BothStack &S){
if(S.top1+1==S.top2){
return false;
}
return true;
}
//2.入栈
bool Push(BothStack &S,int i,int x){ //i表示入栈1或栈2
if(i!=1&&i!=2){
return false; // 栈值是否正确
}
else if(S.top1+1==S.top2){
return false; //栈是否满
}
else{
if(i==1){
S.data[++S.top1]=x; // 栈1
}
else{
S.data[--S.top2]=x; // 栈2
}
return true;
}
}
//3.出栈
bool Pop(BothStack &S,int i,int &x){
if(i!=1&&i!=2){
return false; // 栈值是否正确
}
else if(S.top1==-1||S.top2==MaxSize){
return false; //栈是否空
}
else{
if(i==1){
x=S.data[S.top1--]; // 栈1
}
else{
x=S.data[S.top2++]; // 栈2
}
return true;
}
}
//4.取栈顶元素与 出栈 代码实现类似
//主程序
int main(){
BothStack S;
InitStack(S); // 初始化
/*1.
栈1:进栈3,5
栈2:进栈2,4
*/
if(Push(S,1,3)&&Push(S,1,5)){
cout<<"进栈 1 成功"<<endl;
} else{
cout<<"进栈 1 失败"<<endl;
}
cout<<endl;
if(Push(S,2,2)&&Push(S,2,4)){
cout<<"进栈 2 成功"<<endl;
} else{
cout<<"进栈 2 失败"<<endl;
}
//2.出栈
int x;
if(Pop(S,1,x)){
cout<<"出栈 1 元素:"<<x<<endl;
}else{
cout<<"出栈 1 失败"<<endl;
}
cout<<endl;
if(Pop(S,2,x)){
cout<<"出栈 2 元素:"<<x<<endl;
}else{
cout<<"出栈 2 失败"<<endl;
}
return 0;
}