46
46
47
47
#### 栈常见的操作
48
48
49
- - ` push() ` : 添加一个新元素到栈顶位置。
50
- - ` pop() ` : 移除栈顶的元素,同时返回被移除的元素。
51
- - ` peek() ` : 返回栈顶的元素,不对栈做任何修改(该方法不会移除栈顶的元素,仅仅返回它)。
52
- - ` isEmpty() ` : 如果栈里没有任何元素就返回 ` true ` ,否则返回 ` false ` 。
53
- - ` size() ` : 返回栈里的元素个数。这个方法和数组的 ` length ` 属性类似。
54
- - ` toString() ` : 将栈结构的内容以字符串的形式返回。
49
+ - ` push() ` 添加一个新元素到栈顶位置。
50
+ - ` pop() ` 移除栈顶的元素,同时返回被移除的元素。
51
+ - ` peek() ` 返回栈顶的元素,不对栈做任何修改(该方法不会移除栈顶的元素,仅仅返回它)。
52
+ - ` isEmpty() ` 如果栈里没有任何元素就返回 ` true ` ,否则返回 ` false ` 。
53
+ - ` size() ` 返回栈里的元素个数。这个方法和数组的 ` length ` 属性类似。
54
+ - ` toString() ` 将栈结构的内容以字符串的形式返回。
55
55
56
56
#### JavaScript 代码实现栈结构
57
57
58
58
``` js
59
- // 使用 ES6 实现
60
- class Queue {
61
- items = [];
59
+ // 栈结构的封装
60
+ class Stack {
62
61
63
- // push() 压栈操作,给栈中添加元素
62
+ constructor () {
63
+ this .items = [];
64
+ }
65
+
66
+ // push(item) 压栈操作,往栈里面添加元素
64
67
push (item ) {
65
68
this .items .push (item);
66
69
}
@@ -87,53 +90,59 @@ class Queue {
87
90
88
91
// toString() 返回以字符串形式的栈内元素数据
89
92
toString () {
90
- let result = " " ;
93
+ let result = ' ' ;
91
94
for (let item of this .items ) {
92
- result += item + " " ;
95
+ result += item + ' ' ;
93
96
}
94
97
return result;
95
98
}
96
99
}
97
100
```
98
101
99
- #### 测试栈结构
102
+ #### 测试封装的栈结构
100
103
101
104
``` js
102
- const stack = new Queue ();
105
+ // push() 测试
103
106
stack .push (1 );
104
- stack .push (22 );
105
- stack .push (333 );
106
- stack .push (4444 );
107
- console .log (stack .items ); // --> [1, 22, 333, 4444]
108
-
109
- console .log (stack .pop ()); // --> 444
110
- console .log (stack .pop ()); // --> 333
111
- console .log (stack .peek ()); // --> 22
107
+ stack .push (2 );
108
+ stack .push (3 );
109
+ console .log (stack .items ); // --> [1, 2, 3]
110
+
111
+ // pop() 测试
112
+ console .log (stack .pop ()); // --> 3
113
+
114
+ // peek() 测试
115
+ console .log (stack .peek ()); // --> 2
116
+
117
+ // isEmpty() 测试
112
118
console .log (stack .isEmpty ()); // --> false
119
+
120
+ // size() 测试
113
121
console .log (stack .size ()); // --> 2
114
- console .log (stack .toString ()); // --> 1 22
122
+
123
+ // toString() 测试
124
+ console .log (stack .toString ()); // --> 1 2
115
125
```
116
126
117
127
### 栈结构的简单应用
118
128
119
- 利用栈结构的特点封装十进制转换为二进制的函数 。
129
+ 利用栈结构的特点封装实现十进制转换为二进制的方法 。
120
130
121
131
### 代码实现
122
132
123
133
``` js
124
- // 十进制转换成二进制
125
134
function dec2bin (dec ) {
126
- // new 一个 Queue ,保存余数
127
- const stack = new Queue ();
135
+ // new 一个 Stack ,保存余数
136
+ const stack = new Stack ();
128
137
129
138
// 当不确定循环次数时,使用 while 循环
130
139
while (dec > 0 ) {
131
140
// 除二取余法
132
141
stack .push (dec % 2 ); // 获取余数,放入栈中
133
- dec = Math .floor (dec / 2 );
142
+ dec = Math .floor (dec / 2 ); // 除数除以二,向下取整
134
143
}
135
144
136
- let binaryString = " " ;
145
+ let binaryString = ' ' ;
137
146
// 不断地从栈中取出元素(0 或 1),并拼接到一起。
138
147
while (! stack .isEmpty ()) {
139
148
binaryString += stack .pop ();
@@ -146,7 +155,7 @@ function dec2bin(dec) {
146
155
#### 测试
147
156
148
157
``` js
149
- // 验证十进制转换二进制方法
150
- console .log (dec2bin (10 )); // --> 1010
158
+ // dec2bin() 测试
151
159
console .log (dec2bin (100 )); // --> 1100100
160
+ console .log (dec2bin (88 )); // --> 1011000
152
161
```
0 commit comments