黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

Java堆棧

什么是堆棧

同順序表和鏈表一樣,棧也是用來存儲邏輯關(guān)系為 "一對一" 數(shù)據(jù)的線性存儲結(jié)構(gòu),如圖 1 所示。

圖 1 棧存儲結(jié)構(gòu)示意圖

從圖 1 我們看到,棧存儲結(jié)構(gòu)與之前所學(xué)的線性存儲結(jié)構(gòu)有所差異,這緣于棧對數(shù)據(jù) "存" 和 "取" 的過程有特殊的要求:

① 棧只能從表的一端存取數(shù)據(jù),另一端是封閉的,如圖 1 所示;

② 在棧中,無論是存數(shù)據(jù)還是取數(shù)據(jù),都必須遵循"先進(jìn)后出"的原則,即最先進(jìn)棧的元素最后出棧。拿圖 1 的棧來說,從圖中數(shù)據(jù)的存儲狀態(tài)可判斷出,元素 1 是最先進(jìn)的棧。因此,當(dāng)需要從棧中取出元素 1 時,根據(jù)"先進(jìn)后出"的原則,需提前將元素 3 和元素 2 從棧中取出,然后才能成功取出元素 1。

因此,我們可以給棧下一個定義,即棧是一種只能從表的一端存取數(shù)據(jù)且遵循 "先進(jìn)后出" 原則的線性存儲結(jié)構(gòu)。

通常,棧的開口端被稱為棧頂;相應(yīng)地,封口端被稱為棧底。因此,棧頂元素指的就是距離棧頂最近的元素,拿圖 2 來說,棧頂元素為元素 4;同理,棧底元素指的是位于棧最底部的元素,圖 2 中的棧底元素為元素 1。

圖 2 棧頂和棧底

進(jìn)棧和出棧

基于棧結(jié)構(gòu)的特點(diǎn),在實(shí)際應(yīng)用中,通常只會對棧執(zhí)行以下兩種操作:

• 向棧中添加元素,此過程被稱為"進(jìn)棧"(入棧或壓棧);

• 從棧中提取出指定元素,此過程被稱為"出棧"(或彈棧);

棧的具體實(shí)現(xiàn)

棧是一種 "特殊" 的線性存儲結(jié)構(gòu),因此棧的具體實(shí)現(xiàn)有以下兩種方式:

① 順序棧:采用順序存儲結(jié)構(gòu)可以模擬棧存儲數(shù)據(jù)的特點(diǎn),從而實(shí)現(xiàn)棧存儲結(jié)構(gòu);

② 鏈棧:采用鏈?zhǔn)酱鎯Y(jié)構(gòu)實(shí)現(xiàn)棧結(jié)構(gòu);

兩種實(shí)現(xiàn)方式的區(qū)別,僅限于數(shù)據(jù)元素在實(shí)際物理空間上存放的相對位置,順序棧底層采用的是數(shù)組,鏈棧底層采用的是鏈表。有關(guān)順序棧和鏈棧的具體實(shí)現(xiàn)會在后續(xù)章節(jié)中作詳細(xì)講解。

棧的應(yīng)用

基于棧結(jié)構(gòu)對數(shù)據(jù)存取采用 "先進(jìn)后出" 原則的特點(diǎn),它可以用于實(shí)現(xiàn)很多功能。

例如,我們經(jīng)常使用瀏覽器在各種網(wǎng)站上查找信息。假設(shè)先瀏覽的頁面 A,然后關(guān)閉了頁面 A 跳轉(zhuǎn)到頁面 B,隨后又關(guān)閉頁面 B 跳轉(zhuǎn)到了頁面 C。而此時,我們?nèi)绻胫匦禄氐巾撁?A,有兩個選擇:

• 重新搜索找到頁面 A;

• 使用瀏覽器的"回退"功能。瀏覽器會先回退到頁面 B,而后再回退到頁面 A。

瀏覽器 "回退" 功能的實(shí)現(xiàn),底層使用的就是棧存儲結(jié)構(gòu)。當(dāng)你關(guān)閉頁面 A 時,瀏覽器會將頁面 A 入棧;同樣,當(dāng)你關(guān)閉頁面 B 時,瀏覽器也會將 B入棧。因此,當(dāng)你執(zhí)行回退操作時,才會首先看到的是頁面 B,然后是頁面 A,這是棧中數(shù)據(jù)依次出棧的效果。

不僅如此,棧存儲結(jié)構(gòu)還可以幫我們檢測代碼中的括號匹配問題。多數(shù)編程語言都會用到括號(小括號、中括號和大括號),括號的錯誤使用(通常是丟右括號)會導(dǎo)致程序編譯錯誤,而很多開發(fā)工具中都有檢測代碼是否有編輯錯誤的功能,其中就包含檢測代碼中的括號匹配問題,此功能的底層實(shí)現(xiàn)使用的就是棧結(jié)構(gòu)。

同時,棧結(jié)構(gòu)還可以實(shí)現(xiàn)數(shù)值的進(jìn)制轉(zhuǎn)換功能。例如,編寫程序?qū)崿F(xiàn)從十進(jìn)制數(shù)自動轉(zhuǎn)換成二進(jìn)制數(shù),就可以使用棧存儲結(jié)構(gòu)來實(shí)現(xiàn)。

以上也僅是棧應(yīng)用領(lǐng)域的冰山一角,這里不再過多舉例。在后續(xù)章節(jié)的學(xué)習(xí)中,我們會大量使用到棧結(jié)構(gòu)。

接下來,我們學(xué)習(xí)如何實(shí)現(xiàn)順序棧和鏈棧,以及對棧中元素進(jìn)行入棧和出棧的操作。

全部教程
主站蜘蛛池模板: 阿v精品一区二区三区 | 五月综合激情久久婷婷 | 亚洲福利一区 | 中文字幕亚洲综合久久202 | 国产aaaaaaa毛片 | 婷婷桃色网 | 日韩在线三级 | 精品成人免费播放国产片 | 男人午夜 | 中文字幕亚洲无线码在线一区 | 手机看片国产欧美日韩高清 | 亚洲人成在线播放网站岛国 | 日韩a在线 | 天天操综合视频 | 天天射天天干天天操 | 亚洲一二三区在线观看 | 日韩视频免费在线观看 | 色偷偷综合网 | 末成年娇小性色xxxxx | 成人男女18免费o | 男人和女人日皮视频 | 在线观看午夜视频 | 亚洲欧洲国产精品你懂的 | 免费看男人靠女人靠到爽 | 亚洲精品午夜级久久久久 | 国产1区2区在线观看 | 成年男女的免费视频网站 | 一级做a爰片性色毛片16美国 | 天堂va在线高清一区 | 国产成a人片在线观看视频99 | 日日摸夜夜添夜夜添97 | 婷婷在线综合 | 国产精品日产三级在线观看 | 黄 色 免 费 网站在线观看 | 亚洲欧美日韩在线不卡中文 | 我要看三级全黄 | 午夜黄网站| 日韩在线一区视频 | 日比视频在线观看 | 国产成人乱码一区二区三区在线 | 国产香蕉国产精品偷在线观看 |