栈与队列:高效数据处理的利器
1. 抽象数据类型——栈
1.1 栈的概念
栈是一种抽象数据类型,它是围绕如何与数组交互以实现特定结果的一组规则和过程。栈并不关心其底层使用的具体数据结构,只关注数据元素以后进先出(LIFO)的方式操作。例如,无论是使用数组还是其他内置数据结构来实现,只要满足 LIFO 原则,都可以视为栈。
1.2 栈在代码检查中的应用
以 JavaScript 代码检查器(linter)为例,我们可以使用栈来检查代码中括号的匹配情况。括号匹配错误主要有以下三种类型:
- Syntax Error Type #1 :有开括号但没有对应的闭括号,例如 (var x = 2;
。
- Syntax Error Type #2 :有闭括号但没有对应的开括号,例如 var x = 2;)
。
- Syntax Error Type #3 :闭括号与紧邻的开括号类型不匹配,例如 (var x = [1, 2, 3)];
。
1.3 栈实现代码检查的算法步骤
- 准备一个空栈。
- 从左到右读取代码中的每个字符:
1. 如果字符不是括号(圆括号、方括号或花括号),则忽略它并继续。
2. 如果是开括号,将其压入栈中,表示等待匹配的闭括号。
3. 如果是闭括号,弹出栈顶元素并进行检查:- 如果