2011-11-10 62 views
9

我知道System.Collections.Stack。我正在尋找支持PushFront()& PushBack()的類。.net中是否有雙面堆棧類?

+0

我敢肯定,如果它存在,你會發現它在集合命名空間。 – ChaosPandion

+0

如果支持推回,那麼你稱之爲* Stack *的不是一個。 –

回答

11

爲什麼不只是使用/包裝LinkedList<T>?它有AddFirstAddLast方法。您可以將其包裝以隱藏AddBefore等方法。

這是一個常見術語deque(它表示雙端隊列)。如果由於某種原因包裝LinkedList<T>不足(應該!),您可以查看Eric Lippert的immutable deque的實現。

9

這聽起來像你想要的東西通常被稱爲deque。我知道在.NET中最接近的是LinkedList<T>。我不相信有一個從循環緩衝區(根據需要擴展)構建,這是你可能想從頭開始構建它的方式。

當然,你可以自己實現 - 但我可能會使用LinkedList<T>,除非我有一個非常好的理由不去。埃裏克Lippert也有an immutable implementation you could look atblog post covering it),但顯然你會想寫一堆測試等等,而你不可能想要一個不可改變的。

+0

他們應該考慮重命名這個網站askjonskeet.com –

+1

@SethReno:這已經採取...試試吧:) –

0

爲什麼不使用LinkedList<T>?它允許添加開始,結束和之間的任何地方。如果你不想公開某些LinkedList<T>方法,那麼你總是可以把它包裝起來,只公開你想要公開的方法。