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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

栈和队列(一级)

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

棧和隊(duì)列我們一般是放在一起來(lái)講的,先講棧,再講隊(duì)列,他們有什么共同點(diǎn),棧和隊(duì)列他們都是線性表,都是線性結(jié)構(gòu),但是他們是操作受限制的線性表,比如我們舉個(gè)列子來(lái)說(shuō),在我們的線性表里面,我們以單鏈表為例,我們可以把其中的任何一個(gè)刪除,可以刪除第一個(gè),也可以刪除中間的一個(gè),也可以刪除最后的一個(gè),添加的時(shí)候也是,你可以添加到任何兩個(gè)元素中間,你也可以加到最后,當(dāng)然你也可以加到最前端,添加設(shè)刪除操作位置受限嗎,不受限,可以向任何位置添加和刪除節(jié)點(diǎn),但是我們的棧和隊(duì)列就不是了,棧是怎么回事?棧Stack這對(duì)我們來(lái)說(shuō)并不陌生,每次我們畫創(chuàng)建內(nèi)存分配圖的時(shí)候,手動(dòng)畫一個(gè)棧內(nèi)存,就是他的,棧又叫堆棧,這個(gè)堆不要理解成棧內(nèi)存和堆內(nèi)存中的堆,他們是沒有關(guān)系的,棧Stack又叫堆棧,它是運(yùn)算受限的線性表,首先它是線性表,但是它是運(yùn)算受限的,怎么受限啦,只能在表的一端插入和刪除操作,只能在一端,比如只能在頭部做添加和刪除操作,或在尾部做添加和刪除操作,只能在一端進(jìn)行,不允許在其它位置坐插入和刪除操作,查找也只能得到一端頂端的,那我們講插入刪除一端,我們就有一個(gè)棧頂,另外一端就叫做棧底,一個(gè)叫棧頂,一個(gè)叫棧底,如果一個(gè)元素也沒有我們就稱之為空棧,對(duì)棧來(lái)說(shuō)我們主要是做三個(gè)操作,實(shí)際上最主要的是兩個(gè),一個(gè)叫入棧,什么叫入棧啊,就是做一個(gè)添加操作,什么叫出棧,出棧什么意思,就是做一個(gè)刪除操作,還有一個(gè)就是獲取棧頂元素,我要看看最上面的元素到底是幾,但是那個(gè)不刪除,相當(dāng)于查詢,他這里面我們看這個(gè)圖吧,剛開始這個(gè)棧呢還是一個(gè)邏輯結(jié)構(gòu),我們知道可以使用數(shù)組來(lái)實(shí)現(xiàn),也可以使用鏈表來(lái)實(shí)現(xiàn),你看這個(gè)圖是不是一個(gè)數(shù)組,只不過(guò)這個(gè)數(shù)組我們?cè)趺捶虐?我們向下放,我們不是左右放了,剛開始一個(gè)元素也沒有,是空的啊,剛開始是一個(gè)空棧,這就是一個(gè)數(shù)組,是不是一個(gè)元素也沒有,那最下面的這塊既是棧底也是棧頂,因?yàn)樗粋€(gè)元素也沒有,然后A入棧,棧頂就網(wǎng)上入了一個(gè),棧底永遠(yuǎn)不變,我可以再加個(gè)B,再加個(gè)C,再加個(gè)D,你看棧頂元素哦,棧頂是不是一直在發(fā)生變化,我把A,B,C加進(jìn)來(lái),我能不能把D加到C的下面去,在棧里面是不允許的,如果你想這么做也可以,你先把C拿出來(lái),C的上面只能放D,我想把D放到C的下面,那你必須先把C拿出來(lái),多兩個(gè)操作才可以,這三個(gè)操作叫什么,A入棧,出棧就需要從最上面的開始拿,先拿D,才能拿C,不拿C你就不要打算拿D,棧頂一直在發(fā)生變化,棧底是一直沒有變的,這就是我們所說(shuō)的一個(gè)棧,這么做有什么意義嗎,當(dāng)然有意義 我們先看生活中的案例,書怎么摞,是不是一本一本網(wǎng)上摞,拿的時(shí)候先拿最上面的,最上面有不要抽中間的,有人說(shuō)這不合理啊,我就想抽中間的,那他就不是棧,那他就是線性表,給我把中間的一本書給抽走了,是不是相當(dāng)于做了一個(gè)刪除操作啊,而把中間一本書刪除了,如果你允許這種操作的話那他就不是棧了,他就成了線性表了包括這個(gè)冰糖葫蘆,它是棧還是線性表呢,看你怎么吃了,做這個(gè)冰糖葫蘆的時(shí)候基本上都是棧的,一個(gè)一個(gè)插進(jìn)去的,吃的時(shí)候不一定嗎怎么吃,先吃中間的那個(gè),一般我們先吃上面的,按照相反的順序來(lái)吃,如果你考慮這一點(diǎn)的話,他就是一個(gè)棧,這是一個(gè)酒杯塔,我們?cè)谀硞€(gè)宴會(huì)的時(shí)候都會(huì)看到這個(gè),一般我們看到這個(gè)酒杯塔的時(shí)候,一般會(huì)看到一個(gè)場(chǎng)景,什么場(chǎng)景啊,一個(gè)人一不小心把下面的碰倒了,結(jié)果整個(gè)酒杯塔就整個(gè)塌掉了,這是一個(gè),有人說(shuō)這怎么是棧,好好的想一下,這不是一個(gè)簡(jiǎn)單的是或者不是能夠說(shuō)明白的,那就太簡(jiǎn)單了,大家首先想,他一共分幾層,一共分4層,如果我們把各層是一個(gè)整體的話,這四層之間,他應(yīng)該是個(gè)棧,為什么啊,因?yàn)槟愣堰@個(gè)酒杯塔的時(shí)候,先是第一層吧,再是第二層,再是第三層,再是第四層吧,拿的時(shí)候呢,拿的時(shí)候就正好相反,先拿最上層的,對(duì)同一層來(lái)說(shuō),是有很多,那就不算是棧了,我們從大的層次來(lái)說(shuō)它是一個(gè)棧的結(jié)構(gòu),便于大家理解實(shí)際上最容易理解的是這個(gè),每次我們畫創(chuàng)建對(duì)象時(shí)候的棧內(nèi)存,每調(diào)用一個(gè)方法,調(diào)用main方法的時(shí)候,他是不是要開辟一塊空間,main方法里面調(diào)用show方法啦,他是不是要再開辟一塊空間,show里面再調(diào)用一個(gè)方法,他就要再開辟一塊空間,這個(gè)空間該怎么辦,是不是向上摞的,這一塊我給大家畫一下,我們開始調(diào)用方法了,首先我們有一個(gè)方法,在這里畫了一個(gè)方法,這個(gè)方法我們?cè)谶@里標(biāo)記一下,main方法,他調(diào)了一個(gè)方法show方法,這個(gè)方法叫show,mainf方法里面放局部變量,main方法的局部變量,show里面是放show里面的局部變量,如果show方法又調(diào)用了一個(gè)方法,怎么辦,比如取個(gè)名字,叫add,然后又怎么了,大家看這個(gè)像不像一個(gè)入棧,出去的時(shí)候誰(shuí)先出去,是不是add方法執(zhí)行完了空間釋放了,我之前的show方法的數(shù)據(jù)還有嗎,有,show在下面,都在下面保存著,當(dāng)你add彈出的時(shí)候,show方法的數(shù)據(jù)是不是也可以操作了,show方法你能去操作main嗎show方法也調(diào)用完了,彈出了,是不是又回到main方法里面,等main方法也執(zhí)行完了,棧變成空的了,這就是我們所說(shuō)的棧4個(gè)字來(lái)概括他,叫后進(jìn)先出,記住他的特點(diǎn),后進(jìn)先出表,Last In First Out,棧是這樣的一種結(jié)構(gòu).那對(duì)于這個(gè)棧來(lái)說(shuō)呢,大家重點(diǎn)記住3個(gè)詞語(yǔ),一個(gè)叫push,一個(gè)叫pop,一個(gè)叫peek,我們也不要記get,為什么要記這些,push是誰(shuí),push就是入棧,我把你推進(jìn)去,pop彈出,出棧,相當(dāng)于刪除操作,peek獲取棧的元素,獲取頂部元素,push入棧pop出棧,peek獲取棧頂元素,這是我們所說(shuō)的一個(gè)棧,他的存儲(chǔ)結(jié)構(gòu)呢,同樣,可以采用順序結(jié)構(gòu)比如數(shù)組,也可以怎么辦,也可以采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)鏈棧,順序棧和鏈棧,只不過(guò)說(shuō)比我們的線性結(jié)構(gòu)表要簡(jiǎn)單,為什么,因?yàn)橄薅ㄎ恢昧?這個(gè)大家知道就可以了,存儲(chǔ)結(jié)構(gòu)可以采用數(shù)組,也可以采用鏈表,叫順序棧和鏈棧,棧的話就記住這些基本的概念, 下面我們來(lái)看一下一個(gè)兄弟,這個(gè)兄弟叫隊(duì)列.什么叫隊(duì)列呢?每次打飯的時(shí)候是不是都要排隊(duì)啊,先來(lái)后到嗎,棧是先進(jìn)后出的,隊(duì)列是先進(jìn)先出的,隊(duì)列叫queue,簡(jiǎn)稱隊(duì),他同樣是運(yùn)算受限的線性表,他怎么受限制的,它是在表的一端插入,另外一端刪除,插入的這一端我們叫做隊(duì)尾,排隊(duì)的話你要排到最后面,能不能排到最前面,刪除的這一端叫隊(duì)首,特別容易理解吧,插入元素叫入隊(duì),刪除元素叫出隊(duì),他最大的優(yōu)點(diǎn)就像我們吃飯排隊(duì),地鐵排隊(duì)一樣,這就會(huì)變成先進(jìn)先出,生活中這樣的例子有沒有啊,像超市的購(gòu)物車,你看排成了一個(gè)隊(duì)列,推車子的時(shí)候不用的時(shí)候放在最后,使用的時(shí)候使用最前面的就可以了,包括我們排隊(duì)的,地鐵排隊(duì),那先排隊(duì)的是先進(jìn),后排隊(duì)的要站到最后,這個(gè)沒有什么任何的難度生活案例,排隊(duì)打飯,排隊(duì)進(jìn)地鐵站,還有上地鐵,都要排隊(duì)技術(shù)案例:多線程的時(shí)候我們CPU只有一個(gè),那怎么辦啊,那就排隊(duì),有什么就緒隊(duì)列,有什么堵塞隊(duì)列,到時(shí)候我們會(huì)給大家來(lái)講,這個(gè)大家要知道對(duì)于隊(duì)列來(lái)說(shuō)我們主要是要掌握兩個(gè)操作,一個(gè)叫入隊(duì),一個(gè)叫出隊(duì),注意兩個(gè)單詞,Queue隊(duì)列是它,enqueue是入隊(duì),dequeue這個(gè)單詞是出隊(duì),記住這兩個(gè)單詞,peek好像剛用過(guò),獲取隊(duì)首元素,這就是我們關(guān)于隊(duì)列的相關(guān)內(nèi)容,再看他的存儲(chǔ)結(jié)構(gòu)順序隊(duì)列,第二個(gè)采用鏈?zhǔn)疥?duì)列,還是這兩種存儲(chǔ)結(jié)構(gòu)方法1: 采用數(shù)組做存儲(chǔ)結(jié)構(gòu),這個(gè)結(jié)構(gòu)我們來(lái)看一下,我們把它理解為一個(gè)數(shù)組就可以了,初始狀態(tài)是一個(gè)元素也沒有,front這是一個(gè)頭指針,rear是尾指針,先加一個(gè)A,再加一個(gè)B,再加個(gè)C,再加個(gè)D,再加E,如果我再加個(gè)F,F要入隊(duì)了,當(dāng)你把F寫到這兒的話,這個(gè)指針就要變了,就要指向F了,指向他就可以了,我們?cè)匐S便加一個(gè)Z,那么rear指針又成了6了,這叫入隊(duì),現(xiàn)在front是0,然后出隊(duì),誰(shuí)出隊(duì)啊,A出去,A出去之后,front怎么辦,front指向1了,B要是再出去,front就指向2了,D要是再出去呢,front就指向3了,你有沒有發(fā)現(xiàn)這個(gè)時(shí)候出了一個(gè)問題,出了什么問題,別忘了我們這個(gè)時(shí)候是一個(gè)數(shù)組,我們現(xiàn)在畫的是一個(gè)數(shù)組,結(jié)果到最后出現(xiàn)一個(gè)什么情況了,你的頭是誰(shuí)啊,結(jié)果導(dǎo)致前面的數(shù)組都變成空了,這不是都浪費(fèi)了嗎,這時(shí)候我們?cè)撛趺崔k,如果單純的采用數(shù)組來(lái)做的話,會(huì)存在這么一個(gè)問題,有人說(shuō)那我有辦法啊,如果A一刪,我就讓B到A的位置,那這樣效率最低了,那肯定是不合適的,有沒有解決的辦法啊,給大家一個(gè)思路,如果采用普通的數(shù)組就會(huì)導(dǎo)致front之前的數(shù)據(jù)丟失了,浪費(fèi)了,閑置了,怎么辦,采用循環(huán)數(shù)組方法2: 就是使用循環(huán)數(shù)組,就是收尾相連嗎,實(shí)際上還是一個(gè)數(shù)組,只不過(guò)我們可以怎么來(lái)理解呢,rear如果滿了之后呢,數(shù)組一共分了5個(gè)空間,rear末尾已經(jīng)到了最后一個(gè)元素了,如果再入隊(duì)的話,可以入隊(duì)到第一個(gè),入到前面去,但是指針的變化需要做相關(guān)的一個(gè)記錄,在這里我提一下就可以了 對(duì)于鏈?zhǔn)疥?duì)列來(lái)說(shuō)呢,怎么辦?同樣的他為了處理方便,他增加了一個(gè)頭結(jié)點(diǎn),如果你想按照他這個(gè)來(lái)做,我想入隊(duì)該怎么辦,入隊(duì)你是不是要?jiǎng)?chuàng)建一個(gè)新的結(jié)點(diǎn),入隊(duì)就是添加一個(gè)元素,它的往最后加,我要出隊(duì)呢,出隊(duì)是誰(shuí)啊,目前這隊(duì)列里出隊(duì)誰(shuí)出隊(duì),a0出隊(duì),那a0怎么就出隊(duì)了,把它刪了,怎么就把它刪了,front存的地址值就要執(zhí)行a1了,這就是一個(gè)出隊(duì)操作棧和隊(duì)列不是我們的一個(gè)重點(diǎn),我們掌握它的相關(guān)的基本理論,在這里我們?cè)僦v一個(gè)雙端隊(duì)列,叫deck,什么叫雙端隊(duì)列?這是個(gè)前端,這是個(gè)后端,之前我們是怎么回事,這個(gè)是進(jìn)的,這個(gè)是出的,現(xiàn)在變了,這一端既可以出也可以進(jìn),這一端既可以進(jìn)也可以出,雙端隊(duì)列,兩端都可以進(jìn)隊(duì)和出隊(duì),這個(gè)大家記住了,底層這里還可以是數(shù)組,或者鏈表,這是一個(gè),這是一個(gè)最完整的雙向隊(duì)列,實(shí)際開發(fā)中可能還會(huì)有這樣的一些需求,輸出受限的雙向隊(duì)列,還有一個(gè)輸入受限的雙向隊(duì)列,什么叫輸出受限,這邊可以進(jìn),這邊也可以進(jìn)但是出的話只能這邊出,是不是輸出受限啊,還有一個(gè)輸入受限,就是這一端可以出,這一端也可以出,但是進(jìn)的話只能這一端進(jìn),和我們規(guī)定的只有一端可以進(jìn),一端可以出,那就成我們普通的隊(duì)列了,如果我們的雙端隊(duì)列,規(guī)定只能這邊進(jìn),只能這邊出,就成了棧了,雙端隊(duì)列既可以做隊(duì)列操作,也可以做棧操作的,只要有一端受限他就成了棧了,你為什么講這個(gè)啊,JAVA里面就是這么來(lái)實(shí)現(xiàn)的,基本的理論 講到這里的話現(xiàn)在來(lái)看JAVA里的棧和隊(duì)列,Java里面的線性表有什么,有Vector,ArrayList,LinkedList,同樣等我們學(xué)了棧和隊(duì)列之后,JAVA里面有哪些棧和隊(duì)列呢,大家來(lái)看1. Stack類: 一看這個(gè)單詞就是棧,已經(jīng)過(guò)時(shí)了,因?yàn)樗母割惥褪荲ector,Vector過(guò)時(shí)了,他也就過(guò)時(shí)了,雖然他的名字取得特別好,但是我們以后不用他2. Queue: Java里面有這么一個(gè)類,Queue就是隊(duì)列的,他就是隊(duì)列類,如果我們想使用隊(duì)列的話,這個(gè)類就可以了,但是Queue是一個(gè)接口,他不是實(shí)現(xiàn)類3. Dequeue: 還有一個(gè)叫雙端隊(duì)列,叫Dequeue,雖然叫雙端隊(duì)列,但是在JAVA里面我們一般把它當(dāng)做什么來(lái)對(duì)待的,當(dāng)做棧來(lái)進(jìn)行處理的,注意這都是兩個(gè)接口,我們最終要實(shí)現(xiàn)棧操作,或者隊(duì)列操作的話,是不是還得用他們的實(shí)現(xiàn)類,那他們的實(shí)現(xiàn)類是什么,我們打開我們的代碼看一下,public interface Deque<E> extends Queue<E> ,首先要明確它是一個(gè)接口,他的父接口是隊(duì)列Queue我們?cè)賮?lái)看隊(duì)列,public interface Queue<E> extends Collection<E>,隊(duì)列里面有哪些方法啊,一個(gè)入隊(duì)和一個(gè)出隊(duì),就這樣的一些操作,我們?cè)贒eque里面增加哪些操作,在雙端隊(duì)列里面有哪些操作呢,又增加了相關(guān)的一些方法,E removeFirst();刪除第一個(gè),E removeLast();刪除最后一個(gè),E getFirst();獲取第一個(gè),E getLast();獲取最后一個(gè),void addFirst(E e);添加第一個(gè)void addLast(E e);添加最后一個(gè),是不是兩端都可以進(jìn)行添加和刪除操作,都是可以的,void push(E e);這里還有一個(gè)push,push是入棧,pop是出棧,peek獲取棧頂元素,這兩個(gè)都是接口,問他們的實(shí)現(xiàn)類是什么,他們的實(shí)現(xiàn)類在這里看還不好看,看API唄,Queue是隊(duì)列,已知的子接口,子接口Deque,他有什么實(shí)現(xiàn)類,有兩個(gè),一個(gè)叫LinkedList,也就是LinkedList既可以做棧來(lái)用,也可以做隊(duì)列來(lái)用,還可以做線性表來(lái)用,LinkedList其實(shí)是非常特殊的實(shí)現(xiàn)類,他既可以做棧來(lái)用,也可以做隊(duì)列來(lái)用,還可以做線性表來(lái)用,都是可以的,既然是Linked,那當(dāng)然是鏈表結(jié)構(gòu),這里還有一個(gè)ArrayDeque,從名字上來(lái)看,他是一個(gè)什么?他就是一個(gè)數(shù)組的結(jié)構(gòu),這個(gè)用的不多,如果你想采用數(shù)組結(jié)構(gòu)的棧,或者隊(duì)列的話,請(qǐng)用這一個(gè),就可以了,用它就行了,這就是我們講的相關(guān)的內(nèi)容,Java里面實(shí)現(xiàn)隊(duì)列用Queue,實(shí)現(xiàn)棧的話就用Deque就可以了,但是他們有一個(gè)共同的實(shí)現(xiàn)類,我們用LinkedList,當(dāng)然ArrayDeque就很少用了,底層采用的是數(shù)組結(jié)構(gòu)的,LinkedList采用的是鏈表結(jié)構(gòu)的,記住我這個(gè)結(jié)論,下面我們領(lǐng)著大家做一個(gè)例子 package com.learn.stackqueue;import java.util.Deque; import java.util.LinkedList;/*** 將10進(jìn)制轉(zhuǎn)化為2進(jìn)制* 首先這個(gè)規(guī)則大家知道嗎* 10進(jìn)制變二進(jìn)制怎么變大家知道嗎* 比如我這里又一個(gè)數(shù)13,把它變成二進(jìn)制* 13除以2,商是2,余數(shù)是1,拿著6再除以2* 商是3,拿著3再做被除數(shù),余數(shù)是1* 再除以2商是0,余數(shù)是1,倒著來(lái)* 我們要實(shí)現(xiàn)這個(gè)操作,跟什么有關(guān)系,肯定是用循環(huán)* 其實(shí)這是一個(gè)鏈?zhǔn)窖h(huán)的經(jīng)典案例,* 鏈?zhǔn)窖h(huán)的時(shí)候可以做一下這個(gè),循環(huán)條件是什么,商等于0* 循環(huán)操作是什么,循環(huán)操作是除以2,* 有人說(shuō)我不覺得這和棧有什么關(guān)系,這個(gè)和棧又關(guān)系嗎?* 我們先把棧放到一邊,先復(fù)習(xí)一下while循環(huán)* 循環(huán)語(yǔ)句看大家做的怎么樣了* * 那棧和隊(duì)列的內(nèi)容就講到這里了,* @author Leon.Sun**/ public class TestConvert {public static void main(String[] args) {/*** 第一步給定一個(gè)十進(jìn)制數(shù)* 13做被除數(shù)的,n最后沒有變* 我們還得輸出n* 如果是31呢,因?yàn)樵偌觽€(gè)1就是2的5次方了*/// int n = 13;// int n = 31;/*** 15應(yīng)該是4個(gè)1吧*/// int n = 15;/*** 有人說(shuō)我也不知道結(jié)果對(duì)不對(duì),我們可以使用計(jì)算器* 查看----程序員*/int n = 100;/*** 把十進(jìn)制轉(zhuǎn)換為二進(jìn)制* 我們定義一個(gè)變量被除數(shù)* t代表被除數(shù),t等于n* 為什么要把它作為t,因?yàn)閠被除數(shù)一直在發(fā)生變化* */int t = n;/*** 給個(gè)String,剛開始是個(gè)空的,* 這里就不用這個(gè)String了,*/// String str = "";/*** 定義一個(gè)空棧* 怎么定義,創(chuàng)建一個(gè)對(duì)象唄* Deque是接口啊,使用LinkedList就可以了* 創(chuàng)建了一個(gè)空棧*/Deque stack = new LinkedList(); /*** 循環(huán)第一步干什么*/do {/*** 第一步是求余數(shù),除以2求余數(shù),* 相當(dāng)于我們剛剛做了什么操作,* 13除以2得到1了,* t對(duì)2取余數(shù),*/int mod = t%2;/*** 我們要把它拼接起來(lái)*/// str = str + mod;/*** 我往前面加總可以了吧*/// str = mod + str;/*** 然后下面輸出這個(gè)余數(shù)唄* 輸出一下這個(gè)mod* 這個(gè)到時(shí)候我們會(huì)完善的* 這里不是輸出余數(shù),而是入棧* 沒得到一個(gè)余數(shù)需要入棧* 怎么入棧,入棧是哪個(gè)單詞push* 讓余數(shù)進(jìn)去,循環(huán)的過(guò)程中要入棧*/// System.out.println(mod);stack.push(mod);/*** 6是商,然后拿到商再做被除數(shù)* 我們把步驟寫的細(xì)一些,* result變成6了,下一次是被除數(shù)*/// int result = t / 2;/*** 使用商做被除數(shù)* 先把這個(gè)思路寫對(duì)了* 思路寫對(duì)了那我們就可以做了* 把result賦給t* 這兩步可以合成一步*/// t = result;t = t / 2;/*** 條件是什么意思* 當(dāng)我們的商大于0* 條件是t大于0* t大于0就行了* 但是寫到這里好像和棧隊(duì)列沒有一點(diǎn)關(guān)系* 我們先輸出一下看結(jié)果怎么樣 1011* 這個(gè)1011是什么,是不是我們剛才得到的1011這個(gè)結(jié)果* 但是我們需要的結(jié)果不是1011,是需要倒著來(lái),是1101,* 那該怎么辦,并且大家想一下,有沒有辦法,有,我想了一個(gè)辦法*/}while(t>0);/*** 輸出結(jié)果* 再加上一個(gè)str,但是這里還是1011,* 這不對(duì),你看就這么得到了,注意到目前為止* 練習(xí)的只是循環(huán),有一個(gè)小技巧,str往前面加,不要往后面加就可以了* 但是我有這么一種思想,我把棧用一下,我這里畫上一個(gè)棧,* 大家來(lái)看,我們第一次得到的余數(shù)是幾,是1,我把1寫到這兒,* 第二次我們得到的是0,把0寫到這兒,第三次得到的是1,* 第四次得到的也是1,你看是不是按照這個(gè)順序,出去的時(shí)候怎么辦,* 正好相反,是不是正好相反,出去的時(shí)候變成1101,是不是就得到我們的結(jié)果了* 我們按照這個(gè)思路來(lái)實(shí)現(xiàn)一下,該怎么辦,這個(gè)ln也不要*/System.out.print(n + "------->");/*** 輸出的時(shí)候是不是需要出棧了* 怎么出棧,估計(jì)得用循環(huán)了* 條件應(yīng)該是什么啊,當(dāng)棧非空就可以了* 我怎么知道他非空啊,不要緊人家都給你寫好了* isEmpty是否是空的*/while(!stack.isEmpty()) {/*** 不太對(duì),ln不要了*/System.out.print(stack.pop());}} } 這個(gè)例子大家都做過(guò),借助棧實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換通過(guò)棧和隊(duì)列我們學(xué)好什么?什么是棧什么是隊(duì)列?1. 棧和隊(duì)列首先都是線性表,他們都是線性結(jié)構(gòu),但是他們是操作受限制的線性表,什么操作受限制了,一個(gè)刪除,一個(gè)添加2. 棧是怎么回事,一端入棧和出棧,隊(duì)列是一端入隊(duì)一端出隊(duì)3. 棧有一個(gè)特點(diǎn),后進(jìn)先出,隊(duì)列有一個(gè)特點(diǎn),先進(jìn)先出4. 另外我們還有一個(gè)雙端隊(duì)列,這個(gè)大家要知道,JAVA里面是有這個(gè)實(shí)現(xiàn)的5. JAVA里面有哪些棧和隊(duì)列大家要知道,雙端隊(duì)列他的名字叫隊(duì)列,但是實(shí)際開發(fā)中我們把它當(dāng)做棧來(lái)用的,我們現(xiàn)在在他的一端來(lái)插入和刪除,他就成了棧,

?

超強(qiáng)干貨來(lái)襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生

總結(jié)

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

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