堆和棧區(qū)別總結:
一 堆棧空間分配:
- 棧(操作系統(tǒng)): 由操作系統(tǒng)自動分配釋放,存放函數(shù)的參數(shù)值,局部變量的值等.
- 堆(操作系統(tǒng)): 一般由程序員分配釋放,若程序員不釋放,程序結束時可能由OS回收,分配 方式類似于鏈表.
二 堆棧的緩存方式
- 棧 使用的是一級緩存,他們通常都是被調用時處于存儲空間中,調用完畢立即釋放.
- 堆 則是存放在二級緩存中,生命周期由虛擬機的垃圾回收算法來決定(并不是一旦成為孤兒對象就能被回收).所以調用這些對象的速度要相對來得低一些.
三 堆棧數(shù)據(jù)結構的區(qū)別 - 堆 : 堆可以被看成是一棵樹,如堆排序
- 棧: 一種先進后出的數(shù)據(jù)結構
隊列
- 隊列是一種特殊的線性表 ,特殊之處在于它只允許在表的前端(front)進行刪除操作,而在表的后端(rear)進行插入操作,和棧一樣,隊列是一種操作受限制的線性表.進行插入操作的成為隊尾,進行刪除操作的端稱為對頭.
- 隊列中沒有元素時,稱為空隊列.
- 建立順序隊列結構必須為其靜態(tài)分配或動態(tài)申請一片連續(xù)的存儲空間,并設置兩個指針進行管理.一個是隊頭指針front,它指向隊頭元素;另一個是隊尾指針rear,它指向下一個入隊元素的存儲位置.
- 隊列采用的FIFO(first in first out), 新元素總是被插入到鏈表的尾部,而讀取的時候總是從鏈表的頭部開始讀取.每次讀取一個元素,釋放一個元素.所謂的動態(tài)創(chuàng)建,動態(tài)釋放.因而也不存在溢出等問題. 由于鏈表由結構體間接而成,遍歷也方便.(先進先出)
三者區(qū)別:
- 堆 是在程序運行時,而不是在程序編譯時,申請某個大小的內存空間.即動態(tài)分配內存,對其訪問和對一般內存的訪問沒有區(qū)別.
- 棧 就是一個桶,后放進去的先拿出來,它下面本來有的東西要等它出來之后才能出來(后進先出)
- 隊列 只能在隊頭做刪除操作,在隊尾做插入操作.而棧只能在棧頂做插入刪除操作.