[英]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.