更新時(shí)間:2020-04-16 14:00:02 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2687次
數(shù)據(jù)結(jié)構(gòu)中的棧不要與Java中的?;煜?,他們倆不是一回事,數(shù)據(jù)結(jié)構(gòu)中的棧是一種受限制的線性表,棧具有先進(jìn)后出、后進(jìn)先出的特點(diǎn),因?yàn)闂V辉试S訪問(wèn)最后一個(gè)數(shù)據(jù)項(xiàng),即最后插入的數(shù)據(jù)項(xiàng)。也許你會(huì)有疑問(wèn),棧既然有這么多限制,為什么不用數(shù)組或者鏈表而使用棧?在開發(fā)中,我們有特定的場(chǎng)景,根據(jù)特定的場(chǎng)景去選用數(shù)據(jù)結(jié)構(gòu),棧的適用場(chǎng)景非常多,比如瀏覽器的前進(jìn)與后退、字符串括號(hào)的合法性等,我們使用棧來(lái)實(shí)現(xiàn)就比較好,因?yàn)闂O鄬?duì)數(shù)組、鏈表來(lái)說(shuō)對(duì)外提供的接口要少很多,接口少了,出錯(cuò)的概率就減少了,對(duì)風(fēng)險(xiǎn)的可控性就提高了。
實(shí)現(xiàn)一個(gè)棧
從棧的定義中可以看出,棧主要有兩個(gè)操作,一個(gè)是新增一條數(shù)據(jù),我們叫做入棧,另一個(gè)是獲取一條數(shù)據(jù),稱為出棧,下面兩張圖是入棧出棧示意圖。

棧的實(shí)現(xiàn)有兩種方式,一種是基于數(shù)組實(shí)現(xiàn)的,我們叫作順序棧,另一種是基于鏈表實(shí)現(xiàn)的,我們叫作鏈?zhǔn)綏?。下面是兩種棧的實(shí)現(xiàn)代碼
基于數(shù)組的順序棧

基于鏈表的鏈?zhǔn)綏?/p>

棧的實(shí)現(xiàn)比較簡(jiǎn)單,因?yàn)闂I婕暗牟僮鞑欢?,主要就入棧和出棧兩個(gè)操作。
棧的應(yīng)用
檢測(cè)字符串括號(hào)的合法性
我們有時(shí)候需要檢測(cè)字符串括號(hào)的合法性,即一個(gè)左括號(hào)需要匹配一個(gè)右括號(hào),這個(gè)我們可以使用棧來(lái)實(shí)現(xiàn)。我們可以從一個(gè)合法的括號(hào)來(lái)理解為什么使用棧?如果括號(hào)使用合法,最后一個(gè)左括號(hào)跟第一個(gè)右括號(hào)是匹配的,倒數(shù)第二個(gè)左括號(hào)和第二個(gè)右括號(hào)匹配的,以此類推,這符合我們棧的特性先進(jìn)后出。
假設(shè)我們有三種括號(hào):圓括號(hào)()、方括號(hào)[]和花括號(hào){},我們使用棧來(lái)檢測(cè)括號(hào)的合法性。我們將左括號(hào)全部壓棧,當(dāng)出現(xiàn)右括號(hào)時(shí),我們就進(jìn)行匹配,這時(shí)候有如下三種情況:
棧為空,說(shuō)明沒(méi)有左括號(hào),括號(hào)使用不合法
棧中取出來(lái)的左括號(hào)跟右括號(hào)不匹配,括號(hào)使用不合法
棧中取出的左括號(hào)跟右括號(hào)匹配,括號(hào)使用暫時(shí)合法
當(dāng)整個(gè)字符串都掃描完成后,檢測(cè)棧中是否還有值,如果棧為空,則說(shuō)明括號(hào)使用合法,反正,則括號(hào)使用不合法。
實(shí)現(xiàn)代碼

瀏覽器前進(jìn)、后退功能
我們使用瀏覽器都知道,瀏覽器可以前進(jìn)、后退功能,瀏覽器的前進(jìn)后退也符合棧的特點(diǎn),我們最先訪問(wèn)的網(wǎng)頁(yè)肯定要最后才能倒回去。我們一起來(lái)看看棧怎么實(shí)現(xiàn)這個(gè)功能?
我們需要定義兩個(gè)棧,我們將首次訪問(wèn)的頁(yè)面壓棧到第一個(gè)棧中,當(dāng)點(diǎn)擊后退時(shí),從第一個(gè)棧中取出數(shù)據(jù)放入到第二個(gè)棧,當(dāng)點(diǎn)擊前進(jìn)按鈕時(shí),從第二個(gè)棧取出數(shù)據(jù)放入第一個(gè)棧。當(dāng)?shù)谝粋€(gè)棧沒(méi)有數(shù)據(jù)時(shí),說(shuō)明沒(méi)有頁(yè)面可以點(diǎn)擊后退了,當(dāng)?shù)诙€(gè)棧沒(méi)有數(shù)據(jù)時(shí),說(shuō)明沒(méi)有頁(yè)面可以點(diǎn)擊前進(jìn)了。這樣我們就通過(guò)棧實(shí)現(xiàn)了瀏覽器前進(jìn)、后退功能。
以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java基礎(chǔ)學(xué)習(xí):java數(shù)據(jù)結(jié)構(gòu)中的棧”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)