我编写了一个函数来交换C ++中队列的第一个和最后一个元素
void swap(queue Q)
{
queue temp;
createQ (temp);
int x,first,last;
first=dequeue(Q);
while(!isemptyQ(Q))
{
x=dequeue(Q);
last=x;
enqueue(x,temp);
}
enqueue(last,Q);
while(!isemptyQ(temp))
{
x=dequeue(temp);
if(x!=last) enqueue(x,Q); //(if) to avoid adding last element again
}
enqueue(first,Q)
}
注意:“只考虑(isempty,dequeue,createQ和enqueue)是其他功能>>(我的第一年)”
但是如果最后一个元素在中间重复那样的话 如果那是队列的元素(5,1,9,3,9) 如果我们在这些元素上追踪这个函数,它将是(9,1,3,5) 有一个9失踪!!
所以,如果对该功能有任何其他想法的逃避?!
答案 0 :(得分:0)
如果你不推动它,就不需要检查。我宁愿做类似的事情:
while(!isemptyQ(Q))
{
x=dequeue(Q);
if (isemptyQ(Q))
{
last=x;
}
else
{
enqueue(x,temp);
}
}
enqueue(last,Q);
while(!isemptyQ(temp))
{
x=dequeue(temp);
enqueue(x,Q);
}
顺便说一下,你的代码不适用于空的或1个元素的队列。
答案 1 :(得分:0)
下面是伪代码,它试图涵盖所有特殊情况,包括队列中的1个或0个元素
swap_first_last(q) {
dequeue(q, x, isEmpty);
initialize(tmp);
first = x;
count = 0;
while(!isEmpty) {
count ++;
last = x;
dequeue(q, x, isEmpty);
if(!isEmpty) {
enqueue(tmp, last);
}
}
if(count == 0) return;
enqueue(q, last);
if(count >= 2) {
dequeue(tmp, x, isEmpty);
while(!isEmpty) {
dequeue(tmp, x, isEmpty);
if(!isEmpty) {
enqueue(q, x);
}
}
enqueue(q, first);
}
}