算法分配的队列问题

问题描述 投票:0回答:2

我想弄明白这个,

'编写算法isQSimilar(Q1,Q2)的伪代码,检查两个队列Q1和Q2是否相似。 (即两个队列中的相同元素和元素的相同顺序)在比较结束时,两个队列应该看起来不变。您可以在队列中使用的唯一基本操作如下:addQueue(),deleteQueue(),Qsize(),Rear()和Front()。

所以我到目前为止,

isQsimilar(Q1,Q2)

char check1;
char check2;

int n = Q1.Qsize();
int i = Q2.Qsize();

if (n != i)
    return false;
else
    while (n > 0)
    {
        check1 = Q1.front();
        check2 = Q2.front();

        if (check1 != check2)
            return false;

        Q1.deleteQueue(check1);
        Q2.deleteQueue(check2);

        check1 = Q1.rear();
        check2 = Q2.rear();

        Q1.addQueue(check2);
        Q2.addQueue(check2);

        n--;
    }

return true;

我不确定我是否正确使用了操作,或者我正在做的是远程正确的。我是朝着正确的方向还是我错过了什么?

先感谢您。

algorithm queue pseudocode
2个回答
2
投票

您无需检查后部元件。我假设front()只扫视前面的元素而不删除,而deleteQueue()从队列中删除前面的元素

check1 = Q1.front();
check2 = Q2.front();
if (check1 != check2)
    return false;

Q1.deleteQueue();
Q2.deleteQueue();

Q1.addQueue(check1);
Q2.addQueue(check2);

0
投票

您可以直接从队列中删除元素,如果它们相同则稍后添加它们。

pseducode:
function isQueuesSame(Q, Q1){
    var size = Q.getSize();
    var size1 = Q1.getSize();

    if(size != size1) return false;
    else{
        while(size--){
            var peek = Q.deleteQueue();
            var peek1 = Q1.deleteQueue();

            if(peek != peek1) return false;

            Q.addQueue(peek);
            Q1.addQueue(peek1);
        }
        return true;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.