栈是一种后入先出(LIFO,last-in-first-out)的数据结构。express
假设有一个算术表达式数据结构
let expression = '2.3 + 23 / 12 + (3.14159 * 0.24';
利用后入先出的这个特色,对字符串(算术表达式)进行遍历,若是遇到左括号"(",就把字符"("压入栈code
for (let i = 0; i < length; i++) { if (expression[i] === '(') { stack.push('('); } }
若是遇到右括号")",就把栈顶的字符弹出栈字符串
if (expression[i] === ')') { if (stack.length > 0) { stack.pop(); } }
有两种状况能够判断表达式的括号是否匹配io
完整代码以下:ast
function check(expression) { let length = expression.length, stack = []; for (let i = 0; i < length; i++) { if (expression[i] === '(') { stack.push('('); } else if (expression[i] === ')') { if (stack.length > 0) { stack.pop(); } else { return false; } } } return (stack.length <= 0) ? true : false; }