-
Notifications
You must be signed in to change notification settings - Fork 0
/
stack.js
102 lines (83 loc) · 1.93 KB
/
stack.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
// 用类来实现栈
function Stack () {
var items = []
// 栈顶添加
this.push = function (element) {
items.push(element)
}
// 栈顶删除并返回删除元素
this.pop = function () {
return items.pop()
}
// 返回栈顶元素
this.peek = function () {
return items[items.length - 1]
}
// 栈是否为空
this.isEmpty = function () {
return items.length === 0
}
// 返回栈里的元素个数
this.size = function () {
return items.length
}
// 清空栈
this.clear = function () {
items = []
}
// 打印栈
this.print = function () {
console.log(items.toString())
}
}
// 一些对栈的操作
// var stack = new Stack()
// console.log(stack.isEmpty())
// stack.push(5)
// stack.push(8)
// console.log(stack.peek())
// stack.push(11)
// console.log(stack.size())
// console.log(stack.isEmpty())
// stack.print()
// stack.push(15)
// stack.pop()
// stack.pop()
// console.log(stack.size())
// stack.print()
// 十进制转二进制
function divideBy2 (decNumber) {
var remStack = new Stack(),
rem,
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
}
// 把十进制转成任何进制
function BaseConverter (decNumber, base) {
var remStack = new Stack(),
rem,
binaryString = '',
digits = '0123456789ABCDEF'
// 判断十进制数是否为0,把余数推入栈中
while (decNumber > 0) {
rem = Math.floor(decNumber % base)
remStack.push(rem)
decNumber = Math.floor(decNumber / base)
}
// 把栈中的元素拼接打印出来
while (!remStack.isEmpty()) {
binaryString += digits[remStack.pop()]
}
// 返回转换的二进制数
return binaryString
}
// console.log(BaseConverter(233, 16))
module.exports = Stack