两栈共享空间就是定义一个数组,对数组的两端进行操作的栈。
共享栈的图示:
栈的插入操作步骤:
首先判断栈是否已经满了, 当top1 = top2 - 1时候,说明栈已经满了,不能再插入了
否则没有满,判断要往那个栈插入,往栈1插入,就--top1,因为从前往后插, 如果是栈2,就--top2,因为是从数组后往插入,所以插入的索引位置应该往前移动.
const int MAXSIZE = 100;
class stack{
public:
int data[MAXSIZE];
int top1,top2; //top表示头位置, rear表示数组的尾操作
stack(){
top1 = -1; //利用构造函数,初始化栈,当top=-1 和rear=MAXSIZE时候为空栈
top2 = MAXSIZE;
}
//当共享空间栈满的条件是,top1 = top2-1; top从前往添加元素,top2从后往前添加元素
void push(int i, int input_data){
if(top1 == top2 - 1){
couut<<"栈满了"<<endl;
}
else{
if(i == 1){
data[++top1] = input_data;
}
if(i==2){
data[--top2] = input_data;
}
}
}
}
2.两栈共享空间出栈操作
出栈操作,想出哪个栈,就判断哪个栈是否为空即可,如想出栈1元素,就看栈1是否为空,与栈2是否为空,是否为满都没有关系.
栈1空的条件是top1=-1为空,否则不为空,当不为空的时候,返回数据并让指针前移动
return data[top1--] 是将数据先return后 再让top1前移动,表示减少一个元素
栈2为空的条件是 top1=MAXSIZE;否则不为空, 当不为空的时候,返回数据并让top2值后移。
int pop(int i){
if(i==1){
if(top1==-1){
cout<<"栈1空了";
}else{
return data[top--];
}
}
if(i==2){
if(top2 == MAXSIZE){
cout<<"栈2空了"<<endl;
}else{
return data[top2++];
}
}
}