摘要:概述今天玩得是棧,棧的用處非常廣泛啊,比如函數(shù)的調(diào)用棧啊,的的的啊,之類的,一坨一坨的。
0x000 概述
今天玩得是棧,棧的用處非常廣泛啊,比如函數(shù)的調(diào)用棧啊,h5的history的state的api啊,之類的,一坨一坨的。
0x001 什么是棧棧就是一個(gè)后入先出的數(shù)組,并且這個(gè)數(shù)組只能從一端進(jìn)來(lái),再?gòu)倪@一端出去,就像是放在長(zhǎng)筒紙盒里面的羽毛球,他只有兩個(gè)動(dòng)作
push: 將數(shù)據(jù)推入棧中
pop:將數(shù)據(jù)彈出棧
0x002 初始化依舊使用數(shù)組來(lái)模擬棧
function init() { return [] }0x003 推入
function push(stack, data) { stack.push(data) }0x004 彈出
function pop(stack) { return stack.pop() }0x005 使用
function main() { let stack = init() // stack: [] stack = push(stack, 1) // stack: [1] stack = push(stack, 2) // stack: [1, 2] stack = push(stack, 3) // stack: [1, 2, 3] pop(stack) // 3 stack:[1, 2] pop(stack) // 2 stack:[1] pop(stack) // 1 stack:[] } main()0x006 注意
平常我們依舊不會(huì)這么使用,而是
let stack=[] // [] stack.push(1) // [1] stack.push(2) // [1, 2] stack.push(3) // [1, 2, 3] stack.pop() // 3 stack.pop() // 2 stack.pop() // 10x007 栗子:10以內(nèi)的波蘭計(jì)算器
這是一個(gè)中綴轉(zhuǎn)后綴并計(jì)算表達(dá)式結(jié)果的栗子,為了簡(jiǎn)單只實(shí)現(xiàn)10以內(nèi)任意數(shù)量的加法和減法,完整的波蘭計(jì)算器可以看另一個(gè)我的完整實(shí)現(xiàn)
效果
頁(yè)面其實(shí)可有可無(wú),這里還是實(shí)現(xiàn)了一下
核心的calculate函數(shù)
function calculate(input) { let tokenStack = input.split("").reverse() let rpnStack = [] let operationStack = [] // 第一個(gè)循環(huán) while (tokenStack.length) { let t = tokenStack.pop() if (t.match(/[0-9]/)) { rpnStack.push(t) continue } if (t.match(/[+-]/)) { while (operationStack.length) { rpnStack.push(operationStack.pop()) } operationStack.push(t) continue } throw `error: unknow charactor: ${t}` } while (operationStack.length) { rpnStack.push(operationStack.pop()) } rpnStack = rpnStack.reverse() let resultStack = [] while (rpnStack.length) { let t = rpnStack.pop()+"" if (t.match(/[0-9]/)) { resultStack.push(+t) continue } if (t === "+") { let num1 = resultStack.pop() let num2 = resultStack.pop() rpnStack.push(num2 + num1) continue } if (t === "-") { let num1 = resultStack.pop() let num2 = resultStack.pop() rpnStack.push(num2 - num1) continue } } return resultStack[0] }
說(shuō)明
這個(gè)函數(shù)中用了4個(gè)棧
tokenStack:用來(lái)存放詞素
operationStack:在中綴轉(zhuǎn)后綴的過(guò)程中臨時(shí)存放操作符
rpnStack:存放后綴表達(dá)式
resultStack:存放計(jì)算過(guò)程中的數(shù)字
過(guò)程說(shuō)明
將表達(dá)式分割成數(shù)組,但是不是我們要的順序,所以reverse一下:1+2-3+4-5->["5","-","4","+","3","-","2","+,"1"]
上面分割之后是中綴表達(dá)式,這里要轉(zhuǎn)化為后綴表達(dá)式:["5","-","4","+","3","-","2","+,"1"]->["1","2","+","3","-","4","+","5","-"]
將后綴表達(dá)式元素取出,如果是數(shù)組,就推入resultStack,如果是+、-,就從resultStack中取出數(shù)按符號(hào)做操作,將結(jié)果再推入resultStack,直到rpnStack為空:["1","2","+","3","-","4","+","5","-"]->-1`
0x008 資源源代碼:https://github.com/followWinter/data-structure
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/98980.html
摘要:概述也是,如是說(shuō)。屬性集合,比如等屬性對(duì)應(yīng),是關(guān)鍵詞,所以用代替,也可以是自定義的屬性。形式送方外上人送上人孤云將野鶴,豈向人間住。莫買(mǎi)沃洲山,時(shí)人已知處。 0x000 概述 jsx也是js, 如是說(shuō)。 0x001 語(yǔ)法 在上文React入門(mén)0x001-環(huán)境配置和 helloworld中, 出現(xiàn)了一句奇怪的代碼: Hello, world! 這在html中沒(méi)有任何問(wèn)題,但問(wèn)題是他出現(xiàn)在...
摘要:但是如果使用,作用域塊級(jí)作用域內(nèi),在還沒(méi)使用聲明一個(gè)變量的時(shí)候,訪問(wèn)該變量,將會(huì)獲得,從作用域開(kāi)始到語(yǔ)句之間,就是暫存死區(qū)。 0x001 var 語(yǔ)法 var varname1 [= value1 [, varname2 [, varname3 ... [, varnameN]]]]; 使用 var a, b=2 // 聲明多個(gè)變量,可以賦值,也可以不賦值 a=1 // 先聲...
摘要:概述這篇文章是說(shuō)鏈表,鏈表這種數(shù)據(jù)結(jié)構(gòu)非常普遍,有時(shí)候我們根本就沒(méi)有意識(shí)到用的是鏈表啥是鏈表鏈表就是用繩子連起來(lái)的酒瓶子,酒就是數(shù)據(jù),每個(gè)酒瓶子都連著下一個(gè)酒瓶子。 0x000 概述 這篇文章是說(shuō)鏈表,鏈表這種數(shù)據(jù)結(jié)構(gòu)非常普遍,有時(shí)候我們根本就沒(méi)有意識(shí)到用的是鏈表 0x001 啥是鏈表 鏈表就是用繩子連起來(lái)的酒瓶子,酒就是數(shù)據(jù),每個(gè)酒瓶子都連著下一個(gè)酒瓶子。 showImg(https...
摘要:算數(shù)運(yùn)算符自增自減關(guān)系操作符邏輯操作符直接操作符三元運(yùn)算符字符串類型轉(zhuǎn)化轉(zhuǎn)化會(huì)被舍去轉(zhuǎn)化會(huì)被舍去 0x001 算數(shù)運(yùn)算符 int num1 = 1, num2 = 2; System.out.println(num1 + num2); // 3 System.out.println(num1 - num2); // -1 ...
摘要:概述將某個(gè)請(qǐng)求映射到某個(gè)方法上這個(gè)注解可以加在某個(gè)或者某個(gè)方法上,如果加在上,則這個(gè)中的所有路由映射都將會(huì)加上這個(gè)前綴下面會(huì)有栗子,如果加在方法上,則沒(méi)有前綴下面也有栗子。 0x000 概述 將某個(gè)http請(qǐng)求映射到某個(gè)方法上 0x001 @RequestMapping 這個(gè)注解可以加在某個(gè)Controller或者某個(gè)方法上,如果加在Controller上,則這個(gè)Controller...
閱讀 3632·2019-08-30 15:55
閱讀 1424·2019-08-29 16:20
閱讀 3731·2019-08-29 12:42
閱讀 2722·2019-08-26 10:35
閱讀 1127·2019-08-26 10:23
閱讀 3475·2019-08-23 18:32
閱讀 990·2019-08-23 18:32
閱讀 2984·2019-08-23 14:55