2012-10-16 31 views
2

我開始在C++中使用Stack。我製作推送和流行的功能。當我們調用pop函數時,它會刪除堆棧中的頂層數據或信息。我可以使用C++刪除堆棧中的特定位置數據嗎?

是否可以先找到堆棧中的數據位置並刪除該位置的數據?

+2

這聽起來不像一個堆棧,如果你想這樣做。 – Flexo

+2

如果你需要刪除中間的東西,我強烈建議使用堆棧以外的東西。 –

+0

同意柔印。你可以嘗試列表,數組或字典,並使用IndexOf(...)或者這樣的先定位感興趣的元素。 – David

回答

4

不,整個Stack的重點在於它是FIFO還是先進先出。無論您將什麼數據推入堆棧,都無法訪問堆棧上的數據。

如果您需要訪問頂層下方的數據,則只需使用其他數據結構,例如數組或列表。

我建議你花一些時間閱讀約C++ data structures。這將使您更清楚地瞭解每個數據結構的用途以及何時使用特定的數據結構。祝你好運!

0

如果你自己從頭開始實施堆棧,是的。如何去做取決於它是如何實現的。如果它是平坦的內存,則需要將要刪除的元素之後的元素移動到該元素的位置,從而覆蓋它。如果它是一個鏈表,則需要將要刪除的元素之前的元素指向後面的元素。

但是對於一個堆棧來說這是一種罕見的操作(堆棧通常只支持推到底並從中彈出)。也許你想要的只是一個數組或鏈表。

+1

我同意你的意見。 – mumair

0

首先讓我說,你必須聽那些說你不需要像這樣玩的DS的傢伙。堆棧被設計爲遵循推送和彈出操作。如果我們試圖從任何位置刪除任何元素,那麼爲了達到這樣的目的,具有單獨的數據結構的意義何在,您可以只使用數組列表或鏈表。

話雖如此,是的,你所要求的是可以做到的,但僅僅因爲它可以,它不應該,否則,它會打敗DS這樣的全部目的。你可以很容易地找到堆棧的大小,當你這樣做時,你只需要遍歷它並從該位置刪除一個特定的元素。但我寧願,你也不要這麼做。

相關問題