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