当前位置: 首页 > 知识库问答 >
问题:

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

嵇丰
2023-03-14

我写了一个函数来交换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)
}

注意:“只考虑(空、去队列、CREATQ和入队)是其他函数。

但是如果最后一个元素在中间被复制,如果这是队列的元素(5,1,9,3,9),如果我们跟踪这些元素上的函数,它将会是(9,1,3,5),有一个丢失了!

那么,如果这个函数有逃避这个或任何其他想法的话?!

共有2个答案

王凌
2023-03-14

下面是试图覆盖所有特殊情况的伪代码,包括队列中的1个或零个元素

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);
  }
}
祁辰阳
2023-03-14

如果你不推它,就不需要检查最后一个。o我宁愿做以下事情:

 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和3,第二个元素是2和4。有容易使2和4成为第一个元素吗?

  • 如果我有一个双打数组: 我想得到第一个元素和最后一个元素,这样 我该怎么做?

  • 本文向大家介绍JavaScript数组中的第一个元素和最后一个元素?,包括了JavaScript数组中的第一个元素和最后一个元素?的使用技巧和注意事项,需要的朋友参考一下 数组是一组元素。每个元素都有其自己的 索引值。我们可以使用这些索引访问任何元素。但是,对于最后一个元素,直到知道数组中存在的元素数量,我们才知道索引。在这种情况下,我们必须使用逻辑。让我们简要地讨论这些细节。 访问第一个元素 因

  • 下面是我的代码: 我将再次指出,如果我使用队列而不是优先级队列,那么代码可以工作。如何访问优先级队列的前部?

  • 我目前有一个任务,我需要创建我自己的队列类和方法,如enquue()、dequue(),并从头到尾显示元素。这是我到目前为止所做的: 节点类: 这是我的队列类: 以及测试的主要类别: 所以我想要的输出是 但是,我的输出是: 你们能看看吗,我想这一定和displayQueue()方法有关,但是我不知道如何修复它,你们能帮我吗?非常感谢