算法分配的队列问题
Queue Question for an Algorithms Assignment
我正在努力解决这个问题,
'Write the pseudo code for an algorithm isQSimilar(Q1,Q2) to check whether two queues, Q1 and Q2, are similar or not. (i.e. same elements in both queues and the same order of elements) At the end of the comparison, both queues should look unchanged. The only basic operations that you can use on the queues are the following: addQueue(), deleteQueue(), Qsize(), Rear() and 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;
我不确定我使用的操作是否正确,或者我所做的是否正确。我是在正确的方向还是我错过了什么?
提前致谢。
您不需要检查后面的元素。我假设 front()
只查看前面的元素而不删除,而 deleteQueue()
从队列中删除前面的元素
check1 = Q1.front();
check2 = Q2.front();
if (check1 != check2)
return false;
Q1.deleteQueue();
Q2.deleteQueue();
Q1.addQueue(check1);
Q2.addQueue(check2);
您可以直接从队列中删除元素,如果它们相同,稍后再追加..
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;
}
}
我正在努力解决这个问题,
'Write the pseudo code for an algorithm isQSimilar(Q1,Q2) to check whether two queues, Q1 and Q2, are similar or not. (i.e. same elements in both queues and the same order of elements) At the end of the comparison, both queues should look unchanged. The only basic operations that you can use on the queues are the following: addQueue(), deleteQueue(), Qsize(), Rear() and 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;
我不确定我使用的操作是否正确,或者我所做的是否正确。我是在正确的方向还是我错过了什么?
提前致谢。
您不需要检查后面的元素。我假设 front()
只查看前面的元素而不删除,而 deleteQueue()
从队列中删除前面的元素
check1 = Q1.front();
check2 = Q2.front();
if (check1 != check2)
return false;
Q1.deleteQueue();
Q2.deleteQueue();
Q1.addQueue(check1);
Q2.addQueue(check2);
您可以直接从队列中删除元素,如果它们相同,稍后再追加..
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;
}
}