我需要检查两个队列(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
}
答案 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代码。示例:
boolean isABSimilar(A,B)
不是有效的函数原型
A_element
和B_element
和answer
未定义
您需要在编译之前对其进行修复。
在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