如何在C ++中交换队列的第一个和最后一个元素?

时间:2013-12-22 20:48:34

标签: c++ queue

我编写了一个函数来交换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失踪!!

所以,如果对该功能有任何其他想法的逃避?!

2 个答案:

答案 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);
  }
}