我写了一个函数来交换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),有一个丢失了!
那么,如果这个函数有逃避这个或任何其他想法的话?!
下面是试图覆盖所有特殊情况的伪代码,包括队列中的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);
}
}
如果你不推它,就不需要检查最后一个。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()方法有关,但是我不知道如何修复它,你们能帮我吗?非常感谢