堆、棧、隊列\---對比學習(轉載)

堆、棧對比:數組

一、物理地址:數據結構

①堆的物理地址分配對對象是不連續的。所以性能慢些;性能

②棧使用的是數據結構中的棧,先進後出的原則,物理地址分配是連續的。因此性能快;.net

二、內存分別:線程

①堆由於是不連續的,因此分配的內存是在運行期確認的,所以大小不固定。通常堆大小遠遠大於棧;對象

②棧是連續的,因此分配的內存大小要在編譯期就確認,大小是固定的;blog

三、存放的內容:生命週期

①堆存放的是對象的實例和數組。所以該區更關注的是數據的存儲;隊列

②棧存放:局部變量,操做數棧,返回結果。該區更關注的是程序方法的執行;內存

四、程序的可見度:

①堆對於整個應用程序都是共享、可見的。

②棧只對於線程是可見的。因此也是線程私有。棧的生命週期和線程相同。

棧、隊列對比:

隊列和棧都是被用來預存儲數據的。

一、操做的名稱不一樣。隊列的插入稱爲入隊,隊列的刪除稱爲出隊。棧的插入稱爲進棧,棧的刪除稱爲出棧;

二、可操做的方式不一樣。隊列是在隊尾入隊,隊頭出隊,即兩邊均可操做。而棧的進棧和出棧都是在棧頂進行的,沒法對棧底直接進行操做;

三、操做的方法不一樣。隊列是先進先出(FIFO),即隊列的修改是依先進先出的原則進行的。新來的成員老是加入隊尾(不能從中間插入),每次離開的成員老是隊列頭上(不容許中途離隊)。而棧爲後進先出(LIFO),即每次刪除(出棧)的老是當前棧中最新的元素,即最後插入(進棧)的元素,而最早插入的被放在棧的底部,要到最後才能刪除;

————————————————

版權聲明:本文爲CSDN博主「楊八戒」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連接及本聲明。

原文連接:https://blog.csdn.net/qq_38132105/article/details/107483408