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

How to swaps first and last element of a queue in C++?

本文关键字:第一个 最后一个 元素 队列 交换 C++      更新时间:2023-10-16

我写了一个函数来交换队列的第一个和最后一个元素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个!!

因此,如果对该功能或任何其他想法有逃避?!

如果你不推它,就不需要检查最后。 我宁愿做这样的事情:

 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 个元素

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);
  }
}
相关文章: