一.栈数据结构,生活中有什么例子?
二、请实现一个栈,并实现以下方法:
- push(element):添加一个新元素到栈顶。
- pop():移除栈顶的元素,同时返回被移除的元素。
- peek():返回栈顶的元素,不对栈做任何修改 (这个方法不会移除栈顶的元素,仅仅返回它)。
- isEmpty():如果栈没有任何元素就返回 true,否则返回 false。
- clear():移除栈里面的所有元素。
- size():返回栈里的元素个数。这个方法与数组的 length 属性类似。
1 | class Stack { |
如果想清空一个数组,也可以设置length属性为0。
WeakMap只接受对象作为键名,不接受其他类型的值作为键名。键名是对象的弱引用,当对象被回收后,WeakMap自动移除对应的键值对,WeakMap结构有助于防止内存泄漏。
1 | var wm = new WeakMap(); |
使用WeakMap实现一个栈
1 | const Stack = (function () { |
那么这样有什么好处呢,主要是让item成为一个私有属性,外部无法进行访问和修改。
三、编写一个函数,实现十进制转换为二进制。
示例:
1 | bitset(10) --> "1010" |
使用栈来实现
实现:
1 | function bitset(num) { |
四、编写一个函数,该函数接受一个括号字符串,并确定括号的顺序是否有效。如果字符串有效,函数应返回 true;如果字符串无效,则返回 false。
示例:
1 | validParentheses("()" ) --> true |
使用栈来实现
实现思路:先匹配掉开始和结尾不是(
和)
的,并且其中不是由()
组成的,
实现:
1 | function validParentheses(str) { |