[英]Queue + Stack C++
您如何在不从MAXSIZE-1开始的情况下将Items推到数组的前面(如堆栈)? 我一直在尝试使用模运算符。
bool quack::pushFront(const int nPushFront)
{
if ( count == maxSize ) // indicates a full array
{
return false;
}
else if ( count == 0 )
{
++count;
items[0].n = nPushFront;
return true;
}
intBack = intFront;
items[++intBack] = items[intFront];
++count;
items[(top+(count)+maxSize)%maxSize].n = nPushFront;
/*
for ( int shift = count - 1; shift >= 0; --shift )
{
items[shift] = i€tems[shift-1];
}
items[top+1].n = nPushFront; */
return true;
}
“ quack”表示队列和堆栈之间的交叉。 我不能简单地将元素移位1,因为它效率极低。 我已经为此工作了一个多月。 我只需要使用模数运算符对push_front进行一些指导...我什至认为不需要循环。
这很有趣,因为我将需要随机打印列表。 因此,如果我开始将值添加到整数数组的MAXSIZE-1元素中,然后需要打印该数组,则将出现垃圾值。
not actual code:
pushFront(2);
pushFront(4);
cout << q;
如果我们从后面开始添加,我将得到几个空值。 我不能只是简单地将数组元素上下移动一个。
我不能使用任何STL或助推器。
不知道您的问题是什么。 您是否要实现将队列( 也可以作为堆栈工作,不需要quack
)作为环形缓冲区 ?
在这种情况下,您需要同时保存前索引和后索引。 有关机制,请参见上面链接的文章。 请注意“难点”部分:尤其是,您需要具有一个额外的变量,或者要注意将一个字段留空–否则,您将不知道如何区分完全空队列和完全满队列。
嗯,排除stl似乎有点愚蠢,因为std::deque
正是您想要的。 摊销恒定时间随机访问。 从正面和背面分摊的恒定插入/移除时间。
这可以通过在开头和结尾处留有额外空间的数组来实现。 当两端的空间都用完时,请分配一个具有两倍空间的新数组,然后复制所有内容,并在结尾和开头都重新分配一个空间。 您需要跟踪班级中的开始索引和结束索引。
在我看来,您有一些相互矛盾的要求:
简短的回答:您不能这样做,因为上述要求是互斥的。
这些要求之一必须放宽。
为了帮助您而不必猜测,我们需要有关您要做什么的更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.