摘要:向一個(gè)棧插入新元素又稱(chēng)作進(jìn)棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素從一個(gè)棧刪除元素又稱(chēng)作出棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。
棧(stack)又名堆棧,它是一種運(yùn)算受限的線性表。其限制是僅允許在表的一端進(jìn)行插入和刪除運(yùn)算。這一端被稱(chēng)為棧頂,相對(duì)地,把另一端稱(chēng)為棧底。向一個(gè)棧插入新元素又稱(chēng)作進(jìn)棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個(gè)棧刪除元素又稱(chēng)作出棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。
棧通常的操作:
stack() // 創(chuàng)建一個(gè)空的棧對(duì)象 push() // 入棧操作,將元素放至棧頂 pop() // 出棧操作,將棧頂元素移除并返回 peek() // 返回棧頂元素,不對(duì)棧做出操作 isEmpty() // 判斷棧是不是為空 size() // 返回棧的元素個(gè)數(shù)
使用javascript模擬棧的實(shí)現(xiàn):
function Stack () { let items = [] this.push = function (element) { //添加一個(gè)(或幾個(gè))新元素到棧頂 items.push(element) } this.pop = function () { //移除棧頂?shù)脑?,同時(shí)返回被移除元素 return items.pop() } this.peek = function () { //返回棧頂?shù)脑?,但并不?duì)棧做任何修改 return items[items.length - 1] } this.isEmpty = function () { // 判斷棧是不是為空 return items.length === 0 } this.size = function () { // 返回棧里元素的個(gè)數(shù) return items.length } this.clear = function () { // 移除棧里所有的元素 items = [] } this.print = function () { console.log(items.toString()) } this.toString = function () { return items.toString() } }
用棧解決進(jìn)制數(shù)轉(zhuǎn)換問(wèn)題:
function divide (num, base) { // num為需要轉(zhuǎn)換的數(shù), base為要轉(zhuǎn)換的基數(shù) let remStack = new Stack(), rem, remString = "" while (num > 0) { rem = Math.floor(num % base) remStack.push(rem) num = Math.floor(num / base) } while (!remStack.isEmpty()) { remString += remStack.pop() } return remString } console.log(divide(18,16))
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/84080.html
摘要:于是翻出了機(jī)房里的這本學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法開(kāi)始學(xué)習(xí)程序員的基礎(chǔ)知識(shí)。這本書(shū)用了我最熟悉的來(lái)實(shí)現(xiàn)各種數(shù)據(jù)結(jié)構(gòu)和算法,而且書(shū)很薄,可以說(shuō)是一本不錯(cuò)的入門(mén)教程。隊(duì)列在頭部刪除元素,尾部添加元素。 本系列所有文章:第一篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法之棧與隊(duì)列第二篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法之鏈表第三篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法之集合第四篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法之字典和散列表第五篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算...
摘要:堆棧算法引子棧是計(jì)算機(jī)術(shù)語(yǔ)中比較重要的概念,實(shí)質(zhì)上棧就是一段內(nèi)存區(qū)域,但是棧滿足一定的特性,那就是只有一個(gè)口,具有先入后出的特性,這種特性在計(jì)算機(jī)中有很廣泛的運(yùn)用。 /** * PHP堆棧算法 * Created on 2017-4-27 * Author entner * Email [email protected] */ 引子 ????棧...
摘要:堆棧算法引子棧是計(jì)算機(jī)術(shù)語(yǔ)中比較重要的概念,實(shí)質(zhì)上棧就是一段內(nèi)存區(qū)域,但是棧滿足一定的特性,那就是只有一個(gè)口,具有先入后出的特性,這種特性在計(jì)算機(jī)中有很廣泛的運(yùn)用。 /** * PHP堆棧算法 * Created on 2017-4-27 * Author entner * Email [email protected] */ 引子 ????棧...
摘要:另外棧也可以用一維數(shù)組或連結(jié)串列的形式來(lái)完成。壓棧就是,出棧就是。出棧成功第個(gè)節(jié)點(diǎn)是這是單鏈表形式的棧的源碼地址。隊(duì)列只允許在后端稱(chēng)為進(jìn)行插入操作,在前端稱(chēng)為進(jìn)行刪除操作。 維基百科 堆棧(英語(yǔ):stack)又稱(chēng)為棧,是計(jì)算機(jī)科學(xué)中一種特殊的串列形式的抽象資料型別,其特殊之處在于只能允許在鏈接串列或陣列的一端(稱(chēng)為堆疊頂端指標(biāo),英語(yǔ):top)進(jìn)行加入數(shù)據(jù)(英語(yǔ):push)和輸出數(shù)據(jù)...
摘要:本文力求簡(jiǎn)潔,只包含基礎(chǔ)的棧功能,不想將大片的代碼展示出來(lái),讓讀者興趣索然,閱讀起來(lái)也十分費(fèi)力,如有需要可以自行添加相關(guān)功能比如包中的類(lèi)包含的,等等函數(shù)能力有限,有誤之處還請(qǐng)不吝賜教定義內(nèi)部類(lèi)用于存儲(chǔ)棧元素指向下一個(gè)棧元素的泛型元素方法方法 本文力求簡(jiǎn)潔,只包含基礎(chǔ)的棧功能,不想將大片的代碼展示出來(lái),讓讀者興趣索然,閱讀起來(lái)也十分費(fèi)力,如有需要可以自行添加相關(guān)功能比如java.util...
閱讀 4430·2021-11-19 09:59
閱讀 3350·2021-10-12 10:12
閱讀 2653·2021-09-22 15:25
閱讀 3357·2019-08-30 15:55
閱讀 1202·2019-08-29 11:27
閱讀 1482·2019-08-28 18:06
閱讀 2762·2019-08-26 13:41
閱讀 2571·2019-08-26 13:41