摘要:在中,一些利用原本數(shù)組沒法輕易解決的問題,其實也是可以通過模擬數(shù)據(jù)結構來解決問題的,并非是說前端就不需要去學數(shù)據(jù)結構與算法,懂得數(shù)據(jù)結構的前端才是真的程序員。
在javascript中,一些利用原本數(shù)組沒法輕易解決的問題,其實也是可以通過模擬數(shù)據(jù)結構來解決問題的,并非是說前端就不需要去學數(shù)據(jù)結構與算法,懂得數(shù)據(jù)結構的前端才是真的程序員。下面簡單地用javascript來實現(xiàn)數(shù)據(jù)結構中的棧結構,棧結構的先入后出性質(zhì)在解決某些數(shù)據(jù)問題時很有用
棧的構造函數(shù)
function Stack() { this.dataStore = []; this.top = 0; this.push = push; this.pop = pop; this.peek = peek; this.clear = clear; this.length = length; }
從棧頂放入某個元素
function push(element) { this.dataStore[this.top++] = element; }
從棧頂取出某個元素
function pop() { return this.dataStore[--this.top] }
獲得棧的高度
function length() { return this.top; }
清空整個棧
function clear() { this.top = 0; }
改變棧頂?shù)奈恢?/p>
function peek() { return this.dataStore[this.top - 1]; }
下面是一個有趣的例子 利用stack類實現(xiàn)10進制轉(zhuǎn)換為其它進制
function mulBase(num, base) { let s = new Stack(); do { s.push(num % base); num = Math.floor(num /= base); } while (num > 0); let content = ""; while (s.length() > 0) { content += s.pop(); } return content; }
將10進制數(shù)9轉(zhuǎn)換為2進制數(shù)1001 print(mulBase(9, 2));
又是一個有趣的例子,用棧來判斷是否是回文,回文就是一個字符串,從前往后寫跟從后往前寫都是一樣的 例如"racecar","data"
function isPalindrome(word) { let s = new Stack(); for (let i = 0; i < word.length; i++) { s.push(word[i]); } let rword = ""; while (s.length() > 0) { rword += s.pop(); } if (word == rword) { return true; } else { return false; } }
判斷racecar是否是回文 print(isPalindrome("racecar"));用棧可以實現(xiàn)很多方便的功能,可以見得前端了解數(shù)據(jù)結構尤為重要。
歡迎評論以及留言,同時歡迎關注我的博客定時不斷地更新我的文章 陳建光的博客
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/94337.html
摘要:移除數(shù)組第一項并返回該項同時將數(shù)組的長度減一。簡單實現(xiàn)棧使用和結合實現(xiàn)簡單棧簡單實現(xiàn)隊列使用與結合實現(xiàn)簡單隊列額外補充與用途相反,在數(shù)組前端添加任意個項,并返回新數(shù)組的長度。 棧和隊列 棧:LIFO(先進后出)一種數(shù)據(jù)結構隊列:LILO(先進先出)一種數(shù)據(jù)結構 使用的js方法 1.push();可以接收任意數(shù)量的參數(shù),把它們逐個推進隊尾(數(shù)組末尾),并返回修改后的數(shù)組長度。2.po...
摘要:一數(shù)組二棧棧又名堆棧,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。 一、數(shù)組 二、棧 棧(stack)又名堆棧,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向一個棧插入新元素又稱作進棧、入棧或壓棧...
摘要:中有三種數(shù)據(jù)結構棧堆隊列。前端進擊的巨人一執(zhí)行上下文與執(zhí)行棧,變量對象中解釋執(zhí)行棧時,舉了一個乒乓球盒子的例子,來演示棧的存取方式,這里再舉個栗子搭積木。對于基本類型,棧中存儲的就是它自身的值,所以新內(nèi)存空間存儲的也是一個值。 面試經(jīng)常遇到的深淺拷貝,事件輪詢,函數(shù)調(diào)用棧,閉包等容易出錯的題目,究其原因,都是跟JavaScript基礎知識不牢固有關,下層地基沒打好,上層就是豆腐渣工程,...
摘要:在本文,筆者將與大家概覽的體系結構與工作方式。將第條和第條指令分別是將兩個局部變量入棧,然后相加。最后一條指令是,這條指令執(zhí)行完后當前的這個方法對應的這些部件會被回收,局部變量區(qū)的所有值將全部釋放,寄存器會被銷魂,在棧中與這個方 Java之所以號稱一次編譯,到處運行,主要原因是JVM屏蔽了各個計算機平臺相關的軟件(大多指系統(tǒng))或者硬件之間的差異,使得與平臺相關的耦合統(tǒng)一由JVM提供者來...
閱讀 1267·2023-04-25 23:22
閱讀 1668·2023-04-25 20:04
閱讀 2643·2021-11-22 15:24
閱讀 2801·2021-11-11 16:54
閱讀 1879·2019-08-30 14:03
閱讀 1480·2019-08-29 16:35
閱讀 1700·2019-08-26 10:29
閱讀 2643·2019-08-23 18:01