簡體   English   中英

隊列+堆棧C ++

[英]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正是您想要的。 攤銷恆定時間隨機訪問。 從正面和背面分攤的恆定插入/移除時間。

這可以通過在開頭和結尾處留有額外空間的數組來實現。 當兩端的空間都用完時,請分配一個具有兩倍空間的新數組,然后復制所有內容,並在結尾和開頭都重新分配一個空間。 您需要跟蹤班級中的開始索引和結束索引。

在我看來,您有一些相互矛盾的要求:

  1. 您必須將其推到C ++數組原語的開頭。
  2. 無需轉移所有現有元素。
  3. 保持插入順序。

簡短的回答:您不能這樣做,因為上述要求是互斥的。

這些要求之一必須放寬。

為了幫助您而不必猜測,我們需要有關您要做什么的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM