我正在尝试解决此问题,但是我不知道如何通过代码或逻辑方式解决此问题

时间:2019-10-04 07:50:41

标签: c arrays data-structures

单个数组A [1 .... MAXSIZE]用于实现两个堆栈。两个堆栈从数组的相对两端开始生长。变量top1和top2(top1

3 个答案:

答案 0 :(得分:1)

两个顶部碰撞时,两个堆栈都已满。

[e1|e2|e3|_|_|_|_|f2|f1]
        |          |
       top1        top2

这意味着如果top1+1 == top2的堆栈已满  或者当然是top2==0top1==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;
}

与之前使用逻辑和算术运算符的方法相比,第二种方法仅使用算术和按位运算符,速度相对较快。