摘要:列表項目棧是一種后進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),我們所能操作的都是棧頂元素,刪除一個棧頂元素叫做出棧或者彈棧,添加一個元素叫做入棧或者壓棧首先構(gòu)建我們的抽象數(shù)據(jù)類型棧頂元素位置保存數(shù)據(jù)的數(shù)組壓棧出棧查看棧頂元素清空棧棧的長度輸出棧元素描述模擬輸出
列表項目
棧是一種后進(jìn)先出(LIFO)的數(shù)據(jù)結(jié)構(gòu),我們所能操作的都是棧頂元素,刪除一個棧頂元素叫做出棧或者彈棧,添加一個元素叫做入棧或者壓棧.
ADT首先構(gòu)建我們的抽象數(shù)據(jù)類型.
Stack top // 棧頂元素位置 dataStore //保存數(shù)據(jù)的數(shù)組 push // 壓棧 pop // 出棧 peek // 查看棧頂元素 empty // 清空棧 length // 棧的長度 print // 輸出棧元素Javascript 描述
function Stack () { this.top = 0; this.dataStore = []; } Stack.prototype = { constructor: Stack, push: function (element) { return this.dataStore[this.top++] = element; }, pop: function () { return this.dataStore.length ? this.dataStore.splice(--this.top, 1) : false; }, peek: function () { return this.dataStore[this.top - 1]; }, empty: function () { this.dataStore.length = 0; }, length: function () { return this.dataStore.length; }, // 模擬輸出棧結(jié)構(gòu) print: function () { for (var i = this.length() - 1; i >= 0; i--) { console.log(this.dataStore[i] + " "); } } }測試
var stack = new Stack(); // 入棧 stack.push("jiavan"); stack.push("jiavan2"); stack.push("jiavan3"); stack.push("jiavan4"); // jiavan4 // jiavan3 // jiavan2 // jiavan stack.print(); // jiavan4 stack.pop(); // jiavan3 stack.peek(); // 3 stack.top; // jiavan3 // jiavan2 // jiavan stack.print();應(yīng)用
對num數(shù)進(jìn)行n進(jìn)制的轉(zhuǎn)換,大致算法如下:
對num和n進(jìn)行求余和想除取整
將余數(shù)入棧push
回到第一步直至除到值為0
function transformNum(num, base) { var res = parseInt(num / base); var stack = new Stack(); stack.push(num % base); while (parseInt(res)) { stack.push(parseInt(res % base)); res /= base; } stack.print(); } // transformNum(10, 2), 1010 // transformNum(10, 8), 12
棧的應(yīng)用還有很多,比如匹配括號以及表達(dá)式求值等等.
系列文章原文地址https://github.com/Jiavan/js4... GitHub repo上有源碼和更好的閱讀體驗,若有錯誤歡迎發(fā)PR,若對你有所幫助也歡迎star!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/79336.html
摘要:隊列是一種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),與棧不同的是,它操作的元素是在兩端,而且進(jìn)行的是不一樣的操作。 隊列(Queue)是一種先進(jìn)先出(First-In-First-Out, FIFO)的數(shù)據(jù)結(jié)構(gòu),與棧不同的是,它操作的元素是在兩端,而且進(jìn)行的是不一樣的操作。向隊列的隊尾加入一個元素叫做入隊列(enQueue),向隊列的隊首刪除一個元素叫做出隊列(delQueue). showImg(http...
摘要:我們可以使用鏈表這種數(shù)據(jù)結(jié)構(gòu),來刪除元素的時候而不必讓后面的元素向前移動。一個節(jié)點的上一個節(jié)點稱為它的前驅(qū),下一個節(jié)點即指向的節(jié)點稱為它的后繼節(jié)點,在簡單的單向鏈表中,第一個節(jié)點稱為頭節(jié)點它沒有前驅(qū)節(jié)點,最后一個節(jié)點沒有后繼節(jié)點為。 之前我們用數(shù)組的方式來實現(xiàn)了隊列,是否還記得在出隊列后有這樣一段代碼: for (i = 0; i < this.length - 1; i++) { ...
摘要:上面的代碼小書經(jīng)過編譯以后會變成小書會構(gòu)建一個對象里描述你結(jié)構(gòu)的信息,包括標(biāo)簽名屬性還有子元素等。第二個原因是,有了這樣一個對象。負(fù)責(zé)把這個用來描述信息的對象變成元素,并且渲染到面上。下一節(jié)中我們將介紹小書組件的方法。 React.js 小書 Lesson6 - 使用 JSX 描述 UI 信息 本文作者:胡子大哈本文原文:http://huziketang.com/books/rea...
摘要:默認(rèn)為當(dāng)該屬性的為時,才能被賦值運(yùn)算符改變。可以是任何有效的值數(shù)值,對象,函數(shù)等。而這些篡改可能會影響對象的內(nèi)置屬性或方法,從而導(dǎo)致對象的正常功能可能無法使用。 屬性描述符 JavaScript提供了一個內(nèi)部數(shù)據(jù)結(jié)構(gòu),用于描述對象的值,控制其行為,例如該屬性是否可寫、是否可配置、是否可修改以及是否可枚舉等。這個內(nèi)部數(shù)據(jù)結(jié)構(gòu)被稱為‘屬性描述符’。每個屬性都有自己對應(yīng)的屬性描述符,保存該屬...
摘要:面向?qū)ο竺嫦驅(qū)ο缶幊痰娜Q為簡稱。面向?qū)ο缶幊淌怯贸橄蠓绞絼?chuàng)建基于現(xiàn)實世界模型的一種編程方式。面向?qū)ο缶幊炭梢钥醋鍪鞘褂靡幌盗袑ο笙嗷f(xié)作的軟件設(shè)計。面向?qū)ο缶幊痰娜齻€主要特征是封裝繼承多態(tài)。 面向?qū)ο?面向?qū)ο缶幊痰娜Q為Object Oriented Programming,簡稱OOP。面向?qū)ο缶幊淌怯贸橄蠓绞絼?chuàng)建基于現(xiàn)實世界模型的一種編程方式。面向?qū)ο缶幊炭梢钥醋鍪鞘褂靡幌盗袑ο?..
閱讀 1186·2021-11-24 09:38
閱讀 2595·2021-09-27 14:00
閱讀 1151·2019-08-30 15:55
閱讀 1329·2019-08-30 14:16
閱讀 1482·2019-08-30 10:54
閱讀 2857·2019-08-28 17:58
閱讀 750·2019-08-26 13:22
閱讀 1222·2019-08-26 12:01