棧是一種後入先出(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; }