【js数据结构】栈解决括号不匹配问题
栈可以用来判断一个算术表达式中的括号是否匹配。
思路:读取算术表达式,遇到左括号‘{’、‘[’、'('压入栈,栈的特点是后入先出,所以当遇到右括号‘}’、‘]’、')'的时候,取出栈顶元素,是否满足读取的右括号,栈顶是与之相匹配的左括号。最后判断栈是否为空,为空证明该表达式没有问题,否则则说明这个表达式存在括号不匹配问题。
首先我们构建一个栈。
function Stack(){
this.top = 0; //栈顶(属性)
this.arr = []; //用来存放栈的数组(属性)
this.push = push; //添加元素(方法)
this.pop = pop; //取出栈顶的元素 (方法)
this.peek = peek; //读取栈顶元素 (方法)
this.clear = clear; //清空栈 (方法)
this.len = len; //返回栈的长度 (方法)
this.isEmpty = isEmpty; //栈是否为空 (方法)
}
函数实现:
function push(ele){
this.arr[this.top++] = ele;
}
function pop(){
return this.arr[--this.top];
}
function peek(){
return this.arr[this.top-1];
}
function clear(){
delete this.arr;
this.top = 0;
this.arr = [];
}
function len(){
return this.top;
}
function isEmpty(){
if (this.len() <= 0)
return true;
else
return false;
}
特别的,peek()与pop()函数不同在于,peek()只是读取栈顶,而不修改栈顶,而pop()是取出栈顶的元素,栈将压出栈顶元素。
SignUp()函数接收两个参数,栈对象stack和读取的元素ele
function SignUp(stack, ele){
switch (ele) {
case '{':
case '[':
case '(':
stack.push(ele);
break;
case '}':
case ']':
case ')':
topEle = stack.pop();
console.info(stack.top)
if(( topEle=='{'&&ele == '}')|| topEle=='('&&ele == ')'|| topEle=='['&&ele == ']') {
console.info('ok')
}
else{
console.info('括号不匹配');
return;
}
break;
}
}
接下来就是new一个栈对象,读取表达式,然后一个一个调用SignUp函数了
input1 = document.getElementById('input1').value;
for(var i = 0; i<input1.length; i++)
{
SignUp(stack, input1[i]);
}
if (!stack.isEmpty())
console.info('括号不匹配');
这里,我使用的是在html页面放置一个id叫input1的input标签,js获取其value后使其每一个字符都调用一次SignUp函数,最后判断栈内是否为空~
代码又不完善之处还请各位大人多多提醒,小女子这厢有礼了>.<
【js数据结构】栈解决括号不匹配问题的更多相关文章
- 《LeetBook》leetcode题解(20):Valid Parentheses[E]——栈解决括号匹配问题
我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...
- 利用顺序栈解决括号匹配问题(c++)-- 数据结构
题目: 7-1 括号匹配 (30 分) 给定一串字符,不超过100个字符,可能包括括号.数字.字母.标点符号.空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配. 输入格式: 输入在一行 ...
- js 数据结构-栈与队列
/*[客栈的盘子/月井里的货物,后进先出]栈顶:最先入口/出口的位置栈底:最慢最晚出栈的位置*/ function Stack() { var item = []; //推(将货物推入月井) this ...
- 数据结构——栈的应用 NOI2.2 括号匹配问题
栈是一种数据结构,相当于一个容器,将一个又一个变量从顶端压进去,需要使用时,又从顶端拿出来,其具体使用方法,下面是详细讲解: #include<stack>必须使用此头文件 stack&l ...
- C数据结构-栈和队列,括号匹配举例---ShinePans
1.栈和队列是两种特殊的线性表 运算操作被限定仅仅能在表的一端或两端插入,删除元素,故也称它们为限定的线性表结构 2.栈的基本运算 1).Stackinit(&s) 构 ...
- 十 用栈解决LeetCode20题括号的匹配
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAiIAAACWCAYAAADjcONgAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjw
- JS数据结构第四篇 --- 栈
一.什么是数据结构栈 在数据结构中有一个栈结构,在内存空间中也有一个栈空间,这两个”栈“是两个不同的概念.这篇我们说的是数据结构中的栈.栈是一种特殊的线性表,特殊性在哪?就是只能在栈顶进行操作,往栈顶 ...
- STL-stack和顺序栈实现括号匹配
2018-11-11-14:28:31 1.顺序栈 下面是我用数组实现的顺序栈,包含的函数有出入栈,查看栈顶元素,栈的大小,栈是否空等函数,当栈空间不够用时,对应的数组会自动增长. /******** ...
- JS: 数据结构与算法之栈
栈 先来看一道题 Leetcode 32 Longest Valid Parentheses (最长有效括号) 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 ...
随机推荐
- doubango介绍
1.doubango官网:http://www.doubango.org/ 2.doubango是一个开源的VOIP基础平台, 并能用于嵌入式和桌面系统的开源框架,该框架使用ANSCI-C编写,具有很 ...
- DataTables学习:从最基本的入门静态页面,使用ajax调用Json本地数据源实现前端开发深入学习,根据后台数据接口替换掉本地的json本地数据,以及报错的处理地方,8个例子(显示行附加信息,回调使用api,动态显示和隐藏列...),详细教程
一.DataTables 个人觉得学习一门新的插件或者技术时候,官方文档是最根本的,入门最快的地方,但是有时候看完官方文档,一步步的动手写例子,总会出现各种莫名其妙的错误,需要我们很好的进行研究出错 ...
- Bootstrap入门(二十二)组件16:列表组
Bootstrap入门(二十二)组件16:列表组 列表组是灵活又强大的组件,不仅能用于显示一组简单的元素,还能用于复杂的定制的内容. 1.默认样式列表组 2.加入徽章 3.链接 4.禁用的列表组 5. ...
- redis使用Lua脚本
最近在看<Redis入门指南>第二版,感觉收获挺大,推荐大家有时间看一看.其中有一章讲Lua脚本,感觉挺实用,把总结整理一下. Redis在2.6中推出了脚本功能,允许开发者使用Lua语言 ...
- MyBatis绑定错误--BindingException:Invalid bound statement (not found)
如果出现: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 一般的原因是Mapper i ...
- Jcompress: 一款基于huffman编码和最小堆的压缩、解压缩小程序
前言 最近基于huffman编码和最小堆排序算法实现了一个压缩.解压缩的小程序.其源代码已经上传到github上面: Jcompress下载地址 .在本人的github上面有一个叫Utility的re ...
- 内功心法 -- java.util.ArrayList<E> (5)
写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...
- Python系列之Collections内置模块(1)
collections 是 python 的内置模块,源码位于 Lib/collections/__init__.py ,该模块提供了通用的数据容器. deque 容器对象 通过 from colle ...
- JS 与 OC
做项目需要从网页点击跳转到app的一个页面上,并且需要获取参数. 当时后台给写的参数是这样的.自己打开浏览器看的源码 JavaScript:window.location.href= 这句话在js ...
- Javascript前端面试题
在网上看到了一些Javascript的面试题就整理了下来,后续看到再继续补充. 面试题按类型来分,主要涉及到"技术"与"非技术"两大类,技术类别下涉及到的子类别 ...