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