读书笔记--数据结构之栈(一)
前言:我们所接触的数据结构有:栈,队列,链表,哈希等;
经常用,但可能没深入了解其原理。以下是我的读书笔记;
借一下图:

栈的结构,好像是一个桶,先放进去的,就垫底,后放进去的在上面。只能从上面拿,所以有先进后出、后进先出的性质。
比如:

定义的规则是:1.我们可以从上面放入一个东西(元素)
2.我们可以拿(弹)出最上面的东西(元素)
3.查看元素,我们只看最上面一个(元素),只看不弹出来;
4.我们可以知道这个容器里的东西(元素)是否为空;
5.我们可以知道容器有多少个东西(元素);
6.我们可以一次性全部清空,(倒出来所有元素);
满足这6点的特性,就是一个基本的栈结构。
问题1:如下图规则,如何校验字符串是否合法。

问题2:如下图,完成中序表达转后续表达式。

核心代码:
封装一个栈类:
<script>
//栈
function Stack() {
var items = [];//使用数组存储数据
//push 方法添加一个元素到栈顶
this.push = function (item) {
items.push(item);
}
//pop方法把栈顶的元素弹出
this.pop = function () {
return items.pop();
}
//top 方法返回栈顶元素
this.top = function () {
return items[items.length - 1];
}
//isEmpty 返回栈是否为空
this.isEmpty = function () {
return items.length == 0;
}
//size 方法返回栈的大小
this.size = function () {
return items.length;
}
//clear 方法清空栈
this.clear = function () {
items = []
}
}
</script>
使用栈类,并封装一个方法,解决我们问题1:
function is_leagl_brackets(string) { var stack = new Stack(); for (var i = 0; i < string.length; i++) { var item = string[i]; if (item=="(") { stack.push(item);//将( 压入栈 } else if (item == ")") { if (stack.isEmpty()) {//如果为空,说明没有(和他抵消,所以这个)是有问题的 return false; } else { stack.pop();//将栈顶弹出 } } } return stack.size() == 0;//结束后如果个数没抵消为0,说明有问题 }
结果:
console.log(is_leagl_brackets("()()))"));//false
console.log(is_leagl_brackets("function(test(ww()))"));//ture
console.log(is_leagl_brackets("()()function(test())("));//false
原理是采用,先进后出的原理,使用()成对抵消,如果没能抵消,则说明校验不通过
ok!....问题2留个大家思考。


浙公网安备 33010602011771号