日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

栈与队列的定义与区别

發(fā)布時(shí)間:2023/12/20 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 栈与队列的定义与区别 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、棧

首先,普通的線性表實(shí)現(xiàn)是有兩個(gè)端口可以訪問的,但是如果作為棧就要封閉一端,只能訪問另一端。這當(dāng)然不是自討苦吃,棧是一種抽象數(shù)據(jù)結(jié)構(gòu),是對(duì)現(xiàn)實(shí)世界對(duì)象的模擬。比如,自助餐廳中的一疊盤子,新盤子放在這一疊盤子的最上面,取得時(shí)候也是從最上面取。將其抽象出來(lái)就是棧,這是最合適的抽象方式。

基于棧的操作非常簡(jiǎn)單:

  • 將數(shù)據(jù)壓入棧頂-push
  • 將棧頂數(shù)據(jù)彈出-pop
  • 查看棧頂數(shù)據(jù)-top

棧的實(shí)現(xiàn)不是難點(diǎn),基于棧的操作也很簡(jiǎn)單,重點(diǎn)是棧的運(yùn)用。

動(dòng)態(tài)圖:

偽代碼如下:

largeNumAdd() {讀第一個(gè)數(shù)的數(shù)字,并將這些數(shù)字壓入到一個(gè)棧中;讀第二個(gè)數(shù)的數(shù)字,并將這些數(shù)字壓入到另一個(gè)棧中;carry = 0; //代表進(jìn)位while(至少有一個(gè)棧不為空)從每個(gè)非空的棧中彈出一個(gè)數(shù),將這兩個(gè)數(shù)字與進(jìn)位相加;將和的個(gè)位數(shù)字壓入到結(jié)果棧中;將和的進(jìn)位存到carry中;如果進(jìn)位不為0,將其壓入到結(jié)果棧中;從結(jié)果棧中彈出數(shù)字并顯示; }

簡(jiǎn)單起見,這里給出456和7891相加時(shí)棧的結(jié)構(gòu):

這不就是我們學(xué)過(guò)的加法計(jì)算公式嘛,是的,這里使用棧模擬了加法過(guò)程。

將數(shù)字壓入棧中,其實(shí)維持了千位、百位、十位、個(gè)位之間的次序,正是這個(gè)原因才能保證棧彈出的時(shí)候數(shù)字相加是合理的。這只是棧簡(jiǎn)單的一種運(yùn)用,在現(xiàn)實(shí)生活中,所有需要保持次序的數(shù)據(jù),都可以使用棧這種先進(jìn)后出的結(jié)構(gòu),通過(guò)巧妙的設(shè)計(jì)完成算法邏輯。

2、隊(duì)列

隊(duì)列是一種簡(jiǎn)單的等待序列,在尾部加入元素時(shí)隊(duì)列加長(zhǎng),在前端刪除數(shù)據(jù)時(shí)隊(duì)列縮短。與棧不同,隊(duì)列是一種使用兩端的結(jié)構(gòu):一端用來(lái)加入新元素,另一端用來(lái)刪除元素。隊(duì)列是先進(jìn)先出的結(jié)構(gòu)。

隊(duì)列的操作與棧操作相似:

  • 在隊(duì)列尾部加入元素-enqueue(el)
  • 取出隊(duì)列的第一個(gè)元素-dequeue()
  • 查看隊(duì)列頭部元素-firstEI()

動(dòng)態(tài)圖:

隊(duì)列的實(shí)現(xiàn):

隊(duì)列的一種可能實(shí)現(xiàn)方式是使用數(shù)組,但這并非最佳選擇。元素從隊(duì)尾加入而從隊(duì)首刪除,這會(huì)釋放數(shù)組中的某些單元,這些單元不應(yīng)該浪費(fèi)。一種可能的做法是使用循環(huán)數(shù)組,如果隊(duì)尾已滿而隊(duì)首有空的單元,可以將新加元素放入隊(duì)首,形成循環(huán)數(shù)組,這種做法是空間比較緊張時(shí)的無(wú)奈之舉,因?yàn)樗茐牧岁?duì)列的簡(jiǎn)單易用性,所以不推薦。

隊(duì)列的另一種可能實(shí)現(xiàn)是使用雙向鏈表,那么執(zhí)行入隊(duì)列和出隊(duì)列操作僅需要常數(shù)時(shí)間,并且沒有數(shù)組實(shí)現(xiàn)中空間的浪費(fèi),因此,推薦這種方法。

棧與隊(duì)列的區(qū)別

1、隊(duì)列先進(jìn)先出,棧先進(jìn)后出。

2、對(duì)插入和刪除操作的"限定"不同。

棧是限定只能在表的一端進(jìn)行插入和刪除操作的線性表。 ? ??

隊(duì)列是限定只能在表的一端進(jìn)行插入和在另一端進(jìn)行刪除操作的線性表。 ?

3、遍歷數(shù)據(jù)速度不同。

棧只能從頭部取數(shù)據(jù),也就最先放入的需要遍歷整個(gè)棧最后才能取出來(lái),而且在遍歷數(shù)據(jù)的時(shí)候還得為數(shù)據(jù)開辟臨時(shí)空間,保持?jǐn)?shù)據(jù)在遍歷前的一致性。

隊(duì)列則不同,它基于地址指針進(jìn)行遍歷,而且可以從頭或尾部開始遍歷,但不能同時(shí)遍歷,無(wú)需開辟臨時(shí)空間,因?yàn)樵诒闅v的過(guò)程中不影像數(shù)據(jù)結(jié)構(gòu),速度要快的多

擴(kuò)展資料

棧(stack)又名堆棧,它是一種運(yùn)算受限的線性表。其限制是僅允許在表的一端進(jìn)行插入和刪除運(yùn)算。這一端被稱為棧頂,相對(duì)地,把另一端稱為棧底。

向一個(gè)棧插入新元素又稱作進(jìn)棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個(gè)棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。

隊(duì)列是一種特殊的線性表,特殊之處在于它只允許在表的前端(front)進(jìn)行刪除操作,而在表的后端(rear)進(jìn)行插入操作,和棧一樣,隊(duì)列是一種操作受限制的線性表。進(jìn)行插入操作的端稱為隊(duì)尾,進(jìn)行刪除操作的端稱為隊(duì)頭。隊(duì)列中沒有元素時(shí),稱為空隊(duì)列。

隊(duì)列的數(shù)據(jù)元素又稱為隊(duì)列元素。在隊(duì)列中插入一個(gè)隊(duì)列元素稱為入隊(duì),從隊(duì)列中刪除一個(gè)隊(duì)列元素稱為出隊(duì)。因?yàn)殛?duì)列只允許在一端插入,在另一端刪除,所以只有最早進(jìn)入隊(duì)列的元素才能最先從隊(duì)列中刪除,故隊(duì)列又稱為先進(jìn)先出(FIFO—first in first out)線性表。

棧(Stack)和隊(duì)列(Queue)是兩種操作受限的線性表。

(線性表:線性表是一種線性結(jié)構(gòu),它是一個(gè)含有n≥0個(gè)結(jié)點(diǎn)的有限序列,同一個(gè)線性表中的數(shù)據(jù)元素?cái)?shù)據(jù)類型相同并且滿足“一對(duì)一”的邏輯關(guān)系。

“一對(duì)一”的邏輯關(guān)系指的是對(duì)于其中的結(jié)點(diǎn),有且僅有一個(gè)開始結(jié)點(diǎn)沒有前驅(qū)但有一個(gè)后繼結(jié)點(diǎn),有且僅有一個(gè)終端結(jié)點(diǎn)沒有后繼但有一個(gè)前驅(qū)結(jié)點(diǎn),其它的結(jié)點(diǎn)都有且僅有一個(gè)前驅(qū)和一個(gè)后繼結(jié)點(diǎn)。)

這種受限表現(xiàn)在:棧的插入和刪除操作只允許在表的尾端進(jìn)行(在棧中成為“棧頂”),滿足“FIFO:First In Last Out”;隊(duì)列只允許在表尾插入數(shù)據(jù)元素,在表頭刪除數(shù)據(jù)元素,滿足“First In First Out”。

棧與隊(duì)列的相同點(diǎn):

1.都是線性結(jié)構(gòu)。

2.插入操作都是限定在表尾進(jìn)行。

3.都可以通過(guò)順序結(jié)構(gòu)和鏈?zhǔn)浇Y(jié)構(gòu)實(shí)現(xiàn)。、

4.插入與刪除的時(shí)間復(fù)雜度都是O(1),在空間復(fù)雜度上兩者也一樣。

5.多鏈棧和多鏈隊(duì)列的管理模式可以相同。

棧與隊(duì)列的不同點(diǎn):

1.刪除數(shù)據(jù)元素的位置不同,棧的刪除操作在表尾進(jìn)行,隊(duì)列的刪除操作在表頭進(jìn)行。

2.應(yīng)用場(chǎng)景不同;常見棧的應(yīng)用場(chǎng)景包括括號(hào)問題的求解,表達(dá)式的轉(zhuǎn)換和求值,函數(shù)調(diào)用和遞歸實(shí)現(xiàn),深度優(yōu)先搜索遍歷等;常見的隊(duì)列的應(yīng)用場(chǎng)景包括計(jì)算機(jī)系統(tǒng)中各種資源的管理,消息緩沖器的管理和廣度優(yōu)先搜索遍歷等。

3.順序棧能夠?qū)崿F(xiàn)多棧空間共享,而順序隊(duì)列不能。
?


?

總結(jié)

以上是生活随笔為你收集整理的栈与队列的定义与区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。