栈是受限制的线性表,LIFO规则。
本文将使用链表的形式实现栈。
基本原理:在栈顶进行插入和删除,栈顶指针一直指着栈顶节点。
链栈的基本操作:栈的初始化,进栈,出栈,判断栈是否为空。
链栈解决的实际问题:本例是典型的括号匹配问题,功能比较粗简,但也基本能满足需求。
括号匹配问题描述:假设表达式 {[][]()}[]是正确的格式 ,{[(])} 或 ()[]}} 均为错误格式 ,只单纯的考虑括号的匹配。
问题解决思路:在判断函数中新建一个栈,对传入的字符串进行处理,如果遇到'('、'['、'{' 则取出来入栈,遇到')'、']'、'}' 则先判断栈是否为空,为空则退出,字符串出现不匹配; 栈不为空的话,判断栈顶的元素是否和当前需处理的字符括号匹配,匹配则出栈,继续判断下个字符; 如遇到非括号字符,则跳过,继续判断下一个字符。其中设置一个state状态参数,为循环的退出条件。
参考代码如下:
#include <iostream>
#include <MATH.H>
#include <stdlib.h>
#define OK 1
#define ERROR 0
using namespace std;
typedef struct node
{
int d