第三章 棧
ps:整個文章所涉及的源代碼我都發(fā)布在我的Github主頁上滩租,大家可以自行下載侄旬,如果對您有一丟丟的幫助的話互妓,記得在我的github項(xiàng)目上點(diǎn)上【star】喲囱持,當(dāng)然不要忘了在本篇文章下方【點(diǎn)贊】喲~稳懒,你們的支持將是我最大的動力闲擦!
(利他之心是每個優(yōu)秀開發(fā)者的傳統(tǒng)美德!——@惜墨的少年)
對棧的操作
棧是一種特殊的列表场梆,棧內(nèi)元素只能通過列表的一端訪問墅冷,這一端稱為棧頂。棧是被稱為一種后進(jìn)先出的數(shù)據(jù)結(jié)構(gòu)或油。所以任何不在棧頂?shù)脑囟紵o法訪問寞忿。為了得到棧底的元素,必須先拿掉上面的元素顶岸。
對棧的兩種操作:入棧和出棧腔彰。入棧使用push() 方法,出棧使用pop() 方法辖佣。另一個常用操作是預(yù)覽棧頂?shù)脑嘏住op() 可以訪問棧頂?shù)脑兀瑫r棧頂元素被永久性刪除卷谈。peek() 方法則只返回棧頂元素杯拐,而不刪除它。
棧的實(shí)現(xiàn)
實(shí)現(xiàn)一個棧雏搂,首先要決定存儲數(shù)據(jù)的底層數(shù)據(jù)結(jié)構(gòu)藕施。這里采用數(shù)組。
實(shí)現(xiàn)push方法凸郑,向棧中壓入新元素時裳食,保存到top所對應(yīng)的位置,top+1芙沥,指向數(shù)組下一個空位置:
pop與push相反诲祸,返回棧頂元素浊吏,同時top自減1:
peek方法返回數(shù)組第top-1位置的元素,即棧頂元素救氯。如果空棧調(diào)用peek() 找田,結(jié)果為undefined。
length方法可以知道棧內(nèi)存儲了多少個元素着憨,返回top值:
將top的值設(shè)為0墩衙,可以清空一個棧
測試Stack類的實(shí)現(xiàn):
測試代碼輸出結(jié)果:
將數(shù)字轉(zhuǎn)換為二進(jìn)制和八進(jìn)制:
回文
參加過競賽的小伙伴們應(yīng)該知道,回文就是指一個單詞甲抖、短語或數(shù)字漆改,從前往后寫和從后往前寫都是一樣的現(xiàn)象。比如“dad”准谚,“racecar”就是回文挫剑,數(shù)字10001也是回文。通過對棧的操作很容易判斷字符串是否回文柱衔。
用棧模擬遞歸
常規(guī)的遞歸函數(shù)樊破,計算任何數(shù)字的階乘: