单个数组A [1 .... MAXSIZE]用于实现两个堆栈。两个堆栈从数组的相对两端开始生长。变量top1和top2(top1
答案 0 :(得分:1)
两个顶部碰撞时,两个堆栈都已满。
[e1|e2|e3|_|_|_|_|f2|f1]
| |
top1 top2
这意味着如果top1+1 == top2
的堆栈已满
或者当然是top2==0
或top1==MAXSIZE-1
请注意,两个堆栈共享相同的空间。因此,如果您的阵列已满,则两个堆栈都已满,否则2个堆栈中的任何一个都可能再包含一个元素。 这就解释了为什么这种情况适用于两个堆栈。
答案 1 :(得分:0)
对于使用单个数组实现两个堆栈,我们可以简单地采用int变量,例如top1 = -1和top2 = n,top1代表元素在stack1中的当前位置,top2代表元素在stack2中的当前位置。 下面列出的是两个堆栈的push,pop和top代码。
堆栈1:
/*** push **/
void push_stack1(int element_value ){
if (top1 >= top2 -1 )
cout << "array if full (overflow)";
else
arr[++top1] = element_value;
}
/*** pop ***/
int pop_stack1 (){
if(top1 < 0)
cout << "no element in stack1 under-flow";
else
cout << arr[top1--];
}
/*** top ***/
int top_stack1(){
if (top1 < 0)
cout << "stack1 is smepty ";
else
cout << arr[top1];
}
Stack2:
/*** push **/
void push_stack2(int element_value ){
if (top2 <= top1 + 1 )
cout << "array if full (overflow)";
else
arr[--top2] = element_value;
}
/*** pop ***/
int pop_stack2 (){
if(top2 > n-1)
cout << "no element in stack2 under-flow";
else
cout << arr[top2++];
}
/*** top ***/
int top_stack2() {
if (top2 > n-1)
cout << "stack2 is smepty ";
else
cout << arr[top2];
}
答案 2 :(得分:0)
在每次完整检查中,您可以执行以下操作:
bool ifFull(int top1,int top2){
if(top2-top1==1)
return true;
return false;
}
但是,如果该程序是较大程序的一部分,则可以使用按位XOR进行更优化的方式。
bool ifFull(int top1,int top2){
if((top2-top1)~1)
return false;
return true;
}
与之前使用逻辑和算术运算符的方法相比,第二种方法仅使用算术和按位运算符,速度相对较快。