簡體   English   中英

雙端隊列實施選項

[英]deque implementation options

我需要構建自己的雙端隊列,因為我在其中編程的環境沒有這種東西。 我發現自己在如何實現它的兩個選擇之間陷入了困境:

  • 我可以管理一個指針數組,該數組指向保存數據的數組。 問題是,如何確定每個輔助陣列的大小?
  • 我可以有一個較大的緩沖區,該緩沖區會定期增長,並在此緩沖區上建立一個循環隊列。 經過一定的規模后,這似乎很糟糕,因為較大的分配變得更難以有效實現。

有任何想法嗎?

對於第一種選擇,您可以在分配數組時將每個數組的大小簡單地增加一倍,也許可以增加一個上限,該上限取決於您對應用程序或內存限制的了解。

您似乎已經想出了第二個。

為什么不只是一個簡單的雙向鏈表? 您需要快速隨機訪問嗎?

另一種方法可能是具有向量列表(固定大小)。 列表作為第一個DS的好處是您可以在頭和尾以及之間添加元素。 具有固定大小的向量的好處是您可以模擬二維數組,並且行的添加/刪除時間是恆定的。 現在假設您想添加一些內容。 您應該在列表的開頭(常量時間)添加一個節點,然后在固定大小的向量的最后添加條目。 因此,在出隊已經有了數據時,想想頭上的任何條目,您都將插入第一行的最后一列。 如果行中有可用空間,則任何在行首的進一步插入將發生在第一行的倒數第二行。 否則,請重復相同的步驟。 普通插入通常在列表向量的末尾發生,其中插入從向量的開始發生。

我將兩個選項組合在一起-多個較小的緩沖區,並且每個“端點”都指向另一個,本質上成為一個較大的圓形數組。 這樣,您幾乎不需要分配緩沖區。 至於輔助緩沖區的大小,我認為Collin的建議是一個不錯的選擇-隨手增加大小。

暫無
暫無

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

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