基本原理:在栈顶进行插入和删除,栈顶指针一直指着栈顶节点。
链栈的基本操作:栈的初始化,进栈,出栈,判断栈是否为空。
链栈解决的实际问题:本例是典型的括号匹配问题,功能比较粗简,但也基本能满足需求。
括号匹配问题描述:假设表达式 {[]}[]是正确的格式 ,{[(])} 或 ()[]}} 均为错误格式 ,只单纯的考虑括号的匹配。
问题解决思路:在判断函数中新建一个栈,对传入的字符串进行处理,如果遇到’(’、’[’、’{’ 则取出来入栈,遇到’)’、’]’、’}’ 则先判断栈是否为空,为空则退出,字符串出现不匹配; 栈不为空的话,判断栈顶的元素是否和当前需处理的字符括号匹配,匹配则出栈,继续判断下个字符; 如遇到非括号字符,则跳过,继续判断下一个字符
/***链栈实现括号匹配***/
#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef char SElemType;
typedef int Status;
typedef struct SNode {
int data;
struct SNode *next;
} SNode, *LinkStack;
Status InitStack(LinkStack &S) {
S = NULL;
return OK;
}
bool StackEmpty(LinkStack S) {
if (