摘要:列表項目棧是一種后進先出的數據結構,我們所能操作的都是棧頂元素,刪除一個棧頂元素叫做出棧或者彈棧,添加一個元素叫做入?;蛘邏簵J紫葮嫿ㄎ覀兊某橄髷祿愋蜅m斣匚恢帽4鏀祿臄到M壓棧出棧查看棧頂元素清空棧棧的長度輸出棧元素描述模擬輸出
列表項目
棧是一種后進先出(LIFO)的數據結構,我們所能操作的都是棧頂元素,刪除一個棧頂元素叫做出棧或者彈棧,添加一個元素叫做入棧或者壓棧.
ADT首先構建我們的抽象數據類型.
Stack top // 棧頂元素位置 dataStore //保存數據的數組 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; }, // 模擬輸出棧結構 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();應用
對num數進行n進制的轉換,大致算法如下:
對num和n進行求余和想除取整
將余數入棧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
棧的應用還有很多,比如匹配括號以及表達式求值等等.
系列文章原文地址https://github.com/Jiavan/js4... GitHub repo上有源碼和更好的閱讀體驗,若有錯誤歡迎發PR,若對你有所幫助也歡迎star!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/79336.html
摘要:隊列是一種先進先出的數據結構,與棧不同的是,它操作的元素是在兩端,而且進行的是不一樣的操作。 隊列(Queue)是一種先進先出(First-In-First-Out, FIFO)的數據結構,與棧不同的是,它操作的元素是在兩端,而且進行的是不一樣的操作。向隊列的隊尾加入一個元素叫做入隊列(enQueue),向隊列的隊首刪除一個元素叫做出隊列(delQueue). showImg(http...
摘要:我們可以使用鏈表這種數據結構,來刪除元素的時候而不必讓后面的元素向前移動。一個節點的上一個節點稱為它的前驅,下一個節點即指向的節點稱為它的后繼節點,在簡單的單向鏈表中,第一個節點稱為頭節點它沒有前驅節點,最后一個節點沒有后繼節點為。 之前我們用數組的方式來實現了隊列,是否還記得在出隊列后有這樣一段代碼: for (i = 0; i < this.length - 1; i++) { ...
摘要:上面的代碼小書經過編譯以后會變成小書會構建一個對象里描述你結構的信息,包括標簽名屬性還有子元素等。第二個原因是,有了這樣一個對象。負責把這個用來描述信息的對象變成元素,并且渲染到面上。下一節中我們將介紹小書組件的方法。 React.js 小書 Lesson6 - 使用 JSX 描述 UI 信息 本文作者:胡子大哈本文原文:http://huziketang.com/books/rea...
摘要:默認為當該屬性的為時,才能被賦值運算符改變??梢允侨魏斡行У闹禂抵?,對象,函數等。而這些篡改可能會影響對象的內置屬性或方法,從而導致對象的正常功能可能無法使用。 屬性描述符 JavaScript提供了一個內部數據結構,用于描述對象的值,控制其行為,例如該屬性是否可寫、是否可配置、是否可修改以及是否可枚舉等。這個內部數據結構被稱為‘屬性描述符’。每個屬性都有自己對應的屬性描述符,保存該屬...
摘要:面向對象面向對象編程的全稱為簡稱。面向對象編程是用抽象方式創建基于現實世界模型的一種編程方式。面向對象編程可以看做是使用一系列對象相互協作的軟件設計。面向對象編程的三個主要特征是封裝繼承多態。 面向對象 面向對象編程的全稱為Object Oriented Programming,簡稱OOP。面向對象編程是用抽象方式創建基于現實世界模型的一種編程方式。面向對象編程可以看做是使用一系列對象...
閱讀 1192·2021-11-24 09:38
閱讀 2603·2021-09-27 14:00
閱讀 1163·2019-08-30 15:55
閱讀 1338·2019-08-30 14:16
閱讀 1491·2019-08-30 10:54
閱讀 2864·2019-08-28 17:58
閱讀 758·2019-08-26 13:22
閱讀 1231·2019-08-26 12:01