摘要:棧數(shù)據(jù)結(jié)構(gòu)棧是一種遵循后進先出原則的有序集合。新添加的或待刪除的元素都保存在棧的同一端,叫做棧頂,另一端叫棧底。在棧中,新元素靠近棧頂,舊元素接近棧底。
我們可以在數(shù)組的任何位置上刪除或者添加元素,但有時候我們還需要在元素的添加或刪除時有更多控制的數(shù)據(jù)結(jié)構(gòu),有兩種數(shù)據(jù)結(jié)構(gòu)類似于數(shù)組,但在添加或刪除元素時更為可控,它們就是棧和隊列。
本節(jié)主要介紹棧。
棧是一種遵循后進先出(LIFO)原則的有序集合。新添加的或待刪除的元素都保存在棧的同一端,叫做棧頂,另一端叫棧底。在棧中,新元素靠近棧頂,舊元素接近棧底。如下圖所示:
// 首先創(chuàng)建一類表示棧 function Stack(){ let items = []; // 選擇數(shù)組來保存棧中的元素 //各種屬性和方法 }
下面要為棧聲明一些方法:
push() // 添加一個或多個新元素到棧頂 pop() // 移除棧頂元素,同時返回被移除的元素 peek() // 僅僅返回棧頂元素,不對棧做任何修改 isEmpty() // 如果棧中沒有元素返回true,否則返回false clear() // 移除棧中所有元素 size() // 返回棧中元素的個數(shù)(和數(shù)組length類似)2.1 向棧添加元素
this.push() = function(element) { items.push(element); }2.2 從棧移除元素
this.pop = function() { items.pop(); }2.3 查看棧頂元素
this.peek = function() { return items[items.length - 1]; }2.4 查看棧是否為空
this.isEmpty = function(){ return items.length === 0; } this.size = function() { return items.lenght; }2.5 清空和打印棧元素
this.clear = function() { items = []; } this.print = function() { console.log(items.toString()); }
經(jīng)過上述的方法的添加,我們就完整的創(chuàng)建了一了個棧 Stack。
3.棧的應(yīng)用—十進制轉(zhuǎn)N進制首先我們寫出將十進制轉(zhuǎn)為二進制:
function divideBy2(decNum) { var remStack = new Stack(), rem, binaryString = ""; // 將十進制數(shù)除2的余數(shù)放入一個stack中 while(decNum > 0) { // 取余 rem = Math.floor(decNum % 2); // 入棧 remStack.push(rem); decNum = Math.floor(decNum / 2); } // 從棧中取出轉(zhuǎn)化為字符串然后連接起來構(gòu)成二進制 while(!remStack.isEmpty()) { // 出棧 binaryString += remStack.pop().toString(); } return binaryString; }
下面十進制轉(zhuǎn)化N進制算法
function divideByN(decNum, n) { var remStack = new Stack(), rem, binaryString = "", digits = "0123456789ABCDEF"; // 將十進制數(shù)除N的余數(shù)放入一個stack中 while(decNum > 0) { // 取余 rem = Math.floor(decNum % n); // 入棧 remStack.push(rem); decNum = Math.floor(decNum / n); } // 從棧中取出轉(zhuǎn)化為字符串然后連接起來構(gòu)成二進制 while(!remStack.isEmpty()) { // 出棧 使用digits方便在16進制中做個對應(yīng)轉(zhuǎn)化 binaryString += digits[remStack.pop()]; } return binaryString; }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/101649.html
摘要:之?dāng)?shù)組操作接下來就是數(shù)據(jù)結(jié)構(gòu)的第一部分,棧。以字符串顯示棧中所有內(nèi)容方法的實現(xiàn)說明需要往棧中添加新元素,元素位置在隊列的末尾。的前端樂園原文鏈接寒假前端學(xué)習(xí)學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法,棧與隊列 本系列的第一篇文章: 學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)與算法(一),棧與隊列第二篇文章:學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)與算法(二):鏈表第三篇文章:學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)與算法(三):集合第...
摘要:棧是一種遵從后進先出原則的有序集合。新添加的或待刪除的元素都保存在棧的末尾。稱作棧頂,另一端就叫棧底。在棧里,新元素都靠近棧頂,舊元素都靠近棧底。提供可操作的方法入棧出棧,但是會移掉棧中的數(shù)據(jù)。 棧是一種遵從后進先出(LIFO)原則的有序集合。新添加的或待刪除的元素都保存在棧的末尾。稱作棧頂,另一端就叫棧底。在棧里,新元素都靠近棧頂,舊元素都靠近棧底。 javascript提供可操作的...
摘要:棧內(nèi)存與堆內(nèi)存淺拷貝與深拷貝,可以說是前端程序員的內(nèi)功,要知其然,知其所以然。棧內(nèi)存與堆內(nèi)存中的變量分為基本類型和引用類型。 showImg(https://segmentfault.com/img/bVbuvnj?w=900&h=250); 前言 想寫好前端,先練好內(nèi)功。 棧內(nèi)存與堆內(nèi)存 、淺拷貝與深拷貝,可以說是前端程序員的內(nèi)功,要知其然,知其所以然。 筆者寫的 JavaScrip...
摘要:筆者作為一位,將工作以來用到的各種優(yōu)秀資料神器及框架整理在此,畢竟好記性不如爛鍵盤,此前端知識點大百科全書前端掘金,,不定期更新技巧前端掘金技巧,偶爾更新。計算數(shù)組的極值技巧使你的更加專業(yè)前端掘金一個幫你提升技巧的收藏集。 CSS 樣式畫各種圖形 - 前端 - 掘金下面是一些我在 CSS 中經(jīng)常用到的圖案,還有一些是在css-tricks看到的。記錄一下,以后會用到。會持續(xù)更新… 一、...
摘要:筆者作為一位,將工作以來用到的各種優(yōu)秀資料神器及框架整理在此,畢竟好記性不如爛鍵盤,此前端知識點大百科全書前端掘金,,不定期更新技巧前端掘金技巧,偶爾更新。計算數(shù)組的極值技巧使你的更加專業(yè)前端掘金一個幫你提升技巧的收藏集。 CSS 樣式畫各種圖形 - 前端 - 掘金下面是一些我在 CSS 中經(jīng)常用到的圖案,還有一些是在css-tricks看到的。記錄一下,以后會用到。會持續(xù)更新… 一、...
閱讀 1306·2021-11-24 09:39
閱讀 2687·2021-09-30 09:47
閱讀 1339·2021-09-22 15:15
閱讀 2433·2021-09-10 10:51
閱讀 1976·2019-08-30 15:55
閱讀 2987·2019-08-30 11:06
閱讀 906·2019-08-30 10:53
閱讀 848·2019-08-29 17:26