2010-06-13 83 views
0

在談論計算或「真實」生活中的堆棧時,我們通常會假設「首次打開,最後關閉」類型的功能。堆棧數據存儲順序

因爲堆棧的想法是基於物理世界中的某些東西,所以堆棧中的數據如何存儲?

我注意到在很多例子中,堆棧數據的存儲通常是使用數組完成的,而添加到堆棧的最新項目放置在數組的底部。 (比如在現有的一疊盤子上增加一塊新盤子,除了將盤子放在其他盤子的下面而不是頂部)。

作爲一個範例,只要堆棧的操作按預期行事,數據在堆棧中的存儲順序是否重要?

回答

0

只要功能和性能符合預期,無論您如何將數據存儲在內存中都無關緊要。

通常堆棧被實現爲具有大小和容量的數組,其中大小是當前堆棧中元素的數量,並且容量是可以存儲而不需要相對昂貴的存儲器重新分配的最大數量。

當需要提供攤銷O(1)插入性能時,容量通常會增加一倍。在數組的高端索引處使用空的空間來實現堆棧通常更容易,所以這就是通常所做的。

爲了給出一個具體的例子,堆棧的當前頂部可以作爲索引存儲在頂層元素的數組中。如果項目向下添加到數組的最高索引,那麼當數組增加以爲更多元素騰出空間時,數組頂部的索引也會改變。當從底部填充時,頂部元素的索引在陣列需要調整大小時不會改變。

如果你想以不同的方式實現你的棧,你可以這樣做,只要確保你的實現的功能和性能被記錄下來。

0

不是。但是,由於將推送項目移動到其他任何位置都沒有計算優勢(通常),因此線性結構(可以快速訪問堆棧的當前「頂層」)可以很好地工作。陣列在性能和緊湊性方面滿足堆棧結構的需求,所以它通常是最好的/明顯的選擇。

0

作爲範例,不,不是真的。作爲一個低級實現細節,向下增長的堆棧有一個小優點,即堆棧中的項目可以使用正偏移量從當前堆棧指針尋址(例如,這可能對某些CPU體系結構有用)。