编译器括号检查原理:
比如输入:{[]}
程序处理:
1.先压入‘{‘,现在栈为‘{’【这里表示栈内容的时候,是从栈底元素开始写,从左到右表示栈底到栈顶的元素】;
2.取出栈顶元素’{‘,判断输入的第二个符号’[‘是否能与’}‘匹配,判断结果是不匹配;
3.将‘{[’压入栈,现在栈为’{[‘;
4.取出栈顶元素’[‘,判断输入的第三个符号’]‘是否能与’[‘匹配,判断结果是匹配的,现在栈为’{‘
5.取出栈顶元素’{‘,判断输入的第四个符号’}‘是否能与’{‘匹配,判断结果是匹配的,现在栈为空
6.输入的4个符号已经判断完了,接下来判断栈的里边元素的个数,如果元素的个数为0,则说明括号是一一对应的;如果元数的个数不为0,则说明括号不是完全对应的。
C语言实现
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10
typedef char ElemType;
typedef struct
{
ElemType *base;
ElemType *top;
int stackSize;
}sqStack;
InitStack(sqStack *s)
{
s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));