如何在C++中交换队列的第一个和最后一个元素
How to swaps first and last element of a queue in C++?
我写了一个函数来交换队列的第一个和最后一个元素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);
}
}
相关文章:
- 获取向量C++中第一个值和最后一个值的和
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- 在类的第一个/最后一个实例存在之前/之后调用一对函数.有没有更好的方法?
- 查询事件日志.如何查询才能单独获取第一个和最后一个事件?
- 我必须更改我的数字最后一个数字和第一个数字,但不要使用仅带有整数或循环的函数.例如从 12345 到 52341
- 如何打印第一个和最后一个元素的和,然后打印第二个和倒数第二个元素的总和,依此类推
- 使用 STL 交换堆栈 C++ 中的第一个和最后一个元素
- 使用数组将最后一个最大值更改为第一个最小值
- "如何使用C++将字符串的第一个和最后一个索引返回到向量中?
- 查找数组的第一个和最后一个索引,其中 from 和 to 元素的顺序总和最大
- 数组:如何在指定索引之前显示数组的第一个和最后一个元素以及数组元素的差异?
- 输入文件中的第一个字符是输出文件中的最后一个字符,反之亦然
- 在向量C++中查找特定的第一个和最后一个索引<float>
- 如何使用第一个、中间和最后一个元素的中位数正确分区?
- 计算第一个和最后一个元素绝对差值较小的子序列 <= K
- COUT:最后一个字符串覆盖第一个字符串
- 获取第 n 项与 std::set 中第一个/最后一个的偏移量
- 如何使用递归返回单链表中的第n个最后一个元素
- 当第一个<=最后一个不满足时,C++标准对算法有什么看法?
- c++函数——哪个日期是第一个/最后一个