2016-01-21 109 views
2

我有一個簡單的問題:哪種數據結構是堆棧?它是一個靜態或動態的數據結構?我正在尋找答案,找不到它,因此我得到了我自己的「解釋」 - 我想,當你可以通過使用數組或鏈表來實現它時,它可以是......兩者都是?實施?我的推理是否有意義?哪種數據結構是堆棧?

+0

可能的重複[什麼和棧在哪裏和堆?](http://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap) – scottb

+1

@scottb它不是那種堆棧:) – dasblinkenlight

+2

@scottb我認爲目前的問題是指通常的數據結構稱爲* stack *,而不是*堆棧*(在操作系統中)與*堆*之間的差異。 – vsoftco

回答

3

根據定義,靜態數據結構具有固定大小。如果您可以將堆棧的大小限制爲某個預定義的數量,那麼您的堆棧將成爲一個靜態數據結構。它的大小是它的存儲大小,加上堆棧指針或堆棧索引的大小,表示當前位置。

無限容量的堆棧是一個動態數據結構,無論其實現如何。它可以通過一個鏈接列表或一個數組來實現,該列表或數組在達到其容量時重新分配,但在添加或刪除數據時,此類堆棧的大小會發生變化。

+0

我認爲有意思的是,例如C++默認使用[* std :: deque *](http://en.cppreference.com/w/cpp/container/deque)來實現一個由連續塊組成的堆棧,因此它是一個動態保證分期O(1)插入的結構(僅當超過當前塊的容量時才重新分配)。 – vsoftco

+0

非常感謝! – Cleopatra

0

嗯,首先,Stack本身就是一個數據結構。堆棧應該是可擴展的,這是實現使用的。儘管棧的大小可以固定,但它可以包含的元素的最大數量。但通常你會認爲它是隨着元素數量增加而擴展的動態結構。通常它用作ADT(抽象數據類型),以便使用哪種結構(LinkedList,Array,ArrayList等)來實現它,其功能和屬性始終相同