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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

程序员基本功10栈和队列

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

1、棧的基本概念

棧是一種數(shù)據(jù)結(jié)構(gòu),它代表只能在某一段進(jìn)行插入、刪除操作的特殊線性表,通常就是在線性表的末端進(jìn)行插入、刪除操作。

歸納起來(lái)就是:棧就是一種后進(jìn)先出的線性表

2、棧提供的基本方法

棧不允許提供從中間任意位置訪問(wèn)元素的方法,棧只允許在棧頂插入、刪除元素

初始化:通常是一個(gè)構(gòu)造器,用于創(chuàng)建一個(gè)空棧

返回棧的長(zhǎng)度、入棧、出棧、訪問(wèn)棧頂元素、判斷棧是否為空、清空棧

3、順序棧的實(shí)現(xiàn)和方法實(shí)現(xiàn)

順序棧利用一組地址連續(xù)的存儲(chǔ)單元依次存放從棧底到棧頂?shù)臄?shù)據(jù)元素。棧底位置固定不變,它的頂棧元素可以直接通過(guò)棧底層數(shù)組的元素訪問(wèn)ar[size-1]。

進(jìn)棧:只需將新的數(shù)據(jù)元素存入棧內(nèi),然后再記錄棧內(nèi)元素個(gè)數(shù)的變量+1,程序即可再次通過(guò)arr【size-1】重新訪問(wèn)新的棧頂元素。

出棧:讓記錄棧內(nèi)元素個(gè)數(shù)的變量減1;釋放數(shù)組對(duì)棧頂元素的引用。

4、鏈?zhǔn)綏5膶?shí)現(xiàn)和方法實(shí)現(xiàn)

棧頂元素不斷改變,程序只要使用一個(gè)top引用來(lái)記錄當(dāng)前的棧頂元素,top引用變量永遠(yuǎn)引用棧頂元素,再使用一個(gè)size變量記錄當(dāng)前棧中包含多少元素即可。

進(jìn)棧:讓top引用指向新添加的元素,新元素的next引用指向原來(lái)的棧頂元素。讓記錄棧內(nèi)元素個(gè)數(shù)size變量+1.

出棧:讓top引用指向原棧頂元素的下一個(gè)元素,并釋放原來(lái)的棧頂元素。

5、Java集合框架提供的棧

java.utill.Stack:它就是一個(gè)普通的順序棧,底層基于數(shù)組實(shí)現(xiàn),線性安全,在多線程環(huán)境下可安心使用

java.util.LinkedList:LinkedList是一個(gè)雙向鏈表,但它提供了push(),pop(),peek()等方法,這表明LInkedList可以但成棧來(lái)使用。但是線性不安全,如果在多線程環(huán)境下使用,應(yīng)該使用Collections類將其改造成線性安全。

6、隊(duì)列的基本概念

隊(duì)列是一種被限制的線性表,它使用固定的一段來(lái)插入數(shù)據(jù),另一端來(lái)刪除數(shù)據(jù),也就是說(shuō),隊(duì)列中元素的移動(dòng)方向是固定的。

隊(duì)列是一種特殊的線性表,它只允許在表的前端進(jìn)行刪除操作,在表的后端進(jìn)行插入操作,進(jìn)行插入的端稱為隊(duì)尾,進(jìn)行刪除的端稱為對(duì)頭。

7、隊(duì)列提供的基本方法

初始化:通常是一個(gè)構(gòu)造器,用于創(chuàng)建一個(gè)空隊(duì)列

返回隊(duì)列的長(zhǎng)隊(duì):返回隊(duì)列中數(shù)組元素的長(zhǎng)度

加入元素:向隊(duì)列的rear端插入一個(gè)數(shù)據(jù)元素,隊(duì)列長(zhǎng)度+1

刪除元素:從隊(duì)列的front端刪除一個(gè)數(shù)據(jù)元素,隊(duì)列長(zhǎng)度-1,返回被刪除的元素

訪問(wèn)隊(duì)列的前端元素:

判斷隊(duì)列的前端元素是否為空

清空隊(duì)列

8、順序隊(duì)列的實(shí)現(xiàn)和方法實(shí)現(xiàn)

系統(tǒng)采用一組地址連續(xù)的存儲(chǔ)單元存放隊(duì)列從rear到front端的所有數(shù)據(jù)元素,程序只需front和rear倆個(gè)整形變量來(lái)記錄front端的元素索引、rear端的元素索引。對(duì)于順序隊(duì)列而言,隊(duì)列底層將采用數(shù)組來(lái)保存隊(duì)列元素,每個(gè)隊(duì)列元素在數(shù)組中的位置是固定不變的,變的只是rear和front整形變量。當(dāng)r元素進(jìn)入隊(duì)列時(shí),rear值+1,當(dāng)有元素從隊(duì)列中移除時(shí),front變量+1.

對(duì)于鏈棧而言,棧內(nèi)包含幾個(gè)元素,底層鏈?zhǔn)浇Y(jié)構(gòu)只需保存幾個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)需要添加一個(gè)next引用,這會(huì)引起部分空間的浪費(fèi)。對(duì)于順序棧來(lái)說(shuō),程序開(kāi)始就需要開(kāi)辟一塊連續(xù)的內(nèi)存。從空間利用率來(lái)看,鏈棧的空間利用率比順序棧的空間利用率更高一些。

9、循環(huán)隊(duì)列

為了重新利用順序隊(duì)列底層數(shù)組中已刪除元素所占用的空間,消除可能出現(xiàn)的“假滿”現(xiàn)象,可將順序隊(duì)列改為循環(huán)隊(duì)列,循環(huán)隊(duì)列是首位相連的隊(duì)列;當(dāng)front、rear變量達(dá)到底層數(shù)組的capacity-1之后,再前進(jìn)一位自動(dòng)變成0.

對(duì)于front==rear這種情況,如果底層數(shù)組為null,表明隊(duì)列為空,否則為滿。

10、鏈?zhǔn)疥?duì)列的實(shí)現(xiàn)和方法實(shí)現(xiàn)

采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的隊(duì)列也被稱為鏈隊(duì)列,對(duì)于鏈隊(duì)列而言,由于程序需要從rear端添加元素,從front端移除元素,因此考慮對(duì)鏈隊(duì)列增加front、rear倆個(gè)引用變量,使它們分別指向鏈隊(duì)的頭、尾倆個(gè)節(jié)點(diǎn)

11、Java集合框架提供的隊(duì)列

Java提供的Queue接口代表一個(gè)隊(duì)列。其包含6個(gè)方法用于隊(duì)列的插入移除和訪問(wèn)

?

12、雙向隊(duì)列(deque)

兩端同時(shí)進(jìn)行插入和刪除操作。?

總結(jié)

以上是生活随笔為你收集整理的程序员基本功10栈和队列的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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