5.1-5.4 棧
題目來自尚硅谷Java數(shù)據(jù)結(jié)構(gòu)與java算法(Java數(shù)據(jù)結(jié)構(gòu)與算法)_嗶哩嗶哩_bilibili
寫在前面:本文內(nèi)容大致和原視頻內(nèi)老師的筆記內(nèi)容相同,會偶爾插入自己的注釋和理解,盡量會完成作業(yè)
本次作業(yè)已完成
5.1棧的一個實際需求
請輸入一個表達式
計算式:[7*2*2-5+1-5+3-3]點擊計算【如下圖】

請問:計算機底層是如何運算得到結(jié)果的?注意不是簡單的把算式列出運算,因為我們看這個算式7*2*2-5,但是計算機怎么理解這個算式的(對計算機而言,它接收到的就是一個字符串),我們討論的是這個問題。->棧
5.2棧的介紹
1.????? 棧的英文為(stack)
2.????? 棧是一個先入后出(FILO-First In Last Out)的有序列表。
3.????? 棧(stack)是限制線性表中元素的插入和刪除只能在線性表的同一端進行的一種特殊線性表。允許插入和刪除的一端,為變化的一端,稱為棧頂(Top),另一端為固定的一端,稱為棧底(Bottom).
4.????? 根據(jù)棧的定義可知,最先放入棧中元素在棧底,最后放入的元素在棧頂,而刪除元素剛好相反,最后放入的元素最先刪除,最先放入的元素最后刪除
5.????? 圖解方式說明出棧(pop)和入棧(push)的概念


5.3棧的應(yīng)用場景
1.????? 子程序的調(diào)用:在跳往子程序前,會先將下個指令的地址存到堆棧中,直到子程序執(zhí)行完后再將地址取出,以回到原來的程序中。
2.????? 處理遞歸調(diào)用:和子程序的調(diào)用類似,只是除了儲存下一個指令的地址外,也將參數(shù)、區(qū)域變量等數(shù)據(jù)存入堆棧中。
3.????? 表達式的轉(zhuǎn)換[中綴表達式轉(zhuǎn)后綴表達式]與求值(實際解決)。
4.????? 二叉樹的遍歷。
5.????? 圖形的深度優(yōu)先(depth— first)搜索法。
5.4棧的快速入門
1.????? 用數(shù)組模擬棧的使用,由于棧是一種有序列表,當然可以使用數(shù)組的結(jié)構(gòu)來儲存棧的數(shù)據(jù)內(nèi)容,下面我們就用數(shù)組模擬棧的出棧,入棧等操作。
2.????? 實現(xiàn)思路分析,并畫出示意圖

3.????? 代碼實現(xiàn)
4.????? 關(guān)于棧的小練習(xí)
使用鏈表來模擬棧
感覺良好