棧:
棧(stack)又名堆棧,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。 (推薦學習:java課程)
棧(Stack)是操作系統(tǒng)在建立某個進程時或者線程(在支持多線程的操作系統(tǒng)中是線程)為這個線程建立的存儲區(qū)域,該區(qū)域 具有FIFO的特性,在編譯的時候可以指定需要的Stack的大小。
隊列
隊列是一種特殊的線性表,特殊之處在于它只允許在表的前端(front)進行刪除操作,而在表的后端(rear)進行插入操作,和棧一樣,隊列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。
隊列中沒有元素時,稱為空隊列。
建立順序隊列結構必須為其靜態(tài)分配或動態(tài)申請一片連續(xù)的存儲空間,并設置兩個指針進行管理。一個是隊頭指針front,它指向隊頭元素;另一個是隊尾指針rear,它指向下一個入隊元素的存儲位置。
隊列采用的FIFO(first in first out),新元素(等待進入隊列的元素)總是被插入到鏈表的尾部,而讀取的時候總是從鏈表的頭部開始讀取。每次讀取一個元素,釋放一個元素。所謂的動態(tài)創(chuàng)建,動態(tài)釋放。
因而也不存在溢出等問題。由于鏈表由結構體間接而成,遍歷也方便。(先進先出)
區(qū)別:
棧就是一個桶,后放進去的先拿出來,它下面本來有的東西要等它出來之后才能出來。(后進先出)
隊列只能在隊頭做刪除操作,在隊尾做插入操作,而棧只能在棧頂做插入和刪除操作。(先進先出)