堆栈伪代码比较

时间:2019-02-27 06:20:21

标签: c stack pseudocode

我需要检查两个队列(a和b)以查看它们是否相同(相同元素,顺序相同)。最后,两个队列都需要看起来像开始一样。仅使用推,弹出,顶部和EmptyStack。

这是我所拥有的,但对我而言这没有意义。

boolean ABSimilar(A,B){
    if (A.EmptyStack() != B.EmptyStack()) return false; // stacks same
    if (A.EmptyStack() && B.EmptyStack()) return true; // stacks are the same
    A_element = A.pop(); // grab elements
    B_element = B.pop();
    if A_element == null && B_element != null {
      A.push(A_element); // if !=, restore them and return false
      B.push(B_element);
      return false;
    }
    answer = ABASimilar(A, B); // compare
    A.push(A_element);  // restore
    B.push(B_element);
    return answer; // return answer
}

2 个答案:

答案 0 :(得分:0)

您的逻辑几乎是正确的。

您缺少的是将要从A删除的元素与要从B删除的元素进行正确的比较。

您只检查A_element是否为null和B_element是否为非,在这种情况下返回false。

如果A_element不为null和B_element为null,或者它们都不为null,但彼此不相等,则还应该返回false。

仅当它们彼此相等(都为null或都不为null和相等)时,您才应进行递归调用,以比较其余堆栈。

boolean isABSimilar(A,B){
    if (A.isEmptyStack() != B.isEmptyStack()) 
        return false; // stacks same
    if (A.isEmptyStack() && B.isEmptyStack()) 
        return true; // stacks are the same
    A_element = A.pop(); // grab elements
    B_element = B.pop();
    if ((A_element == null && B_element != null) || (A_element != null && !A_element.equals(B_element))) {
        A.push(A_element); // if !=, restore them and return false
        B.push(B_element);
        return false;
    }
    answer = isABASimilar(A, B); // compare
    A.push(A_element);  // restore
    B.push(B_element);
    return answer; // return answer
}

答案 1 :(得分:0)

您的代码有一些小问题。尝试这样:

boolean isABSimilar(A,B){
    if (A.isEmptyStack() && B.isEmptyStack()) return true; // stacks are the same

    if (A.isEmptyStack()) return false;  // stacks are different
    if (B.isEmptyStack()) return false;
    if (A.top() != B.top()) return false;

    A_element = A.pop(); // grab elements
    B_element = B.pop();

    answer = isABASimilar(A, B); // ckech remaining stack

    A.push(A_element);  // restore
    B.push(B_element);

    return answer; // return answer
}

请注意,仅当您知道堆栈的大小非常小时,才可以使用上述递归方法。

还要注意,出于多种原因,上述“代码”不能编译为C代码。示例:

  1. boolean isABSimilar(A,B)不是有效的函数原型

  2. A_elementB_elementanswer未定义

您需要在编译之前对其进行修复。

在C语言中没有内置的堆栈类型,因此我认为它是代码中的自定义类型。像这样:

struct Stack
{
    ... Member function pointers
    ... Member data
};

在这种情况下,您的函数应如下所示:

int isABSimilar(struct Stack A, struct Stack B){
    int answer;
    int A_element;  // I just assume that data type is int
    int B_element;  // but it can be other types (OP never told us)

    ... the code from above