Created
July 21, 2018 07:41
-
-
Save giscafer/a45c414b1fee6a601886f3cff2ae4118 to your computer and use it in GitHub Desktop.
JavaScript数据结构栈模拟
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* 栈实现 */ | |
const Stack = (() => { | |
// 闭包使得item为私有变量,避免外部调用(ES6无私有变量) | |
let item = new WeakMap(); | |
// 模拟实现栈 Stack | |
class Stack { | |
constructor() { | |
item.set(this, []); | |
} | |
push(v) { | |
let rem = item.get(this); | |
rem.push(v); | |
} | |
pop() { | |
let rem = item.get(this); | |
return rem.pop(); | |
} | |
peek() { | |
let rem = item.get(this); | |
return rem[rem.length]; | |
} | |
clear() { | |
item.set(this, []); | |
} | |
isEmpty() { | |
let rem = item.get(this); | |
return rem.length === 0; | |
} | |
} | |
return Stack; | |
})(); | |
// test | |
// 二进制数转换,使用栈来解决 | |
function devideBy2(decNumber) { | |
let remStack = new Stack(); | |
let rem; | |
let binaryString = ''; | |
while (decNumber > 0) { | |
rem = Math.floor(decNumber % 2); | |
remStack.push(rem); | |
decNumber = Math.floor(decNumber / 2); | |
} | |
while (!remStack.isEmpty()) { | |
binaryString += remStack.pop().toString(); | |
} | |
return binaryString; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment