用栈实现括号匹配的检验

来源:百度知道 编辑:UC知道 时间:2024/07/04 07:49:42
试验要求:
1、 设计栈,存储括号。
2、 利用进栈、出栈操作实现括号匹配算法。
3、 不另外申请存储空间,算法有较好的性能。
4、 设计驱动程序、测试用例,并得出正确结果。
提示:
在表达式中,相同类型的括号(包括:()、[ ]、{})是成对出现的,并且当括号在表达式中嵌套时,不允许出现交叉现象。检验括号匹配的方法,就是对给定的字符串依次检验:若是左括号,入栈;若是右括号,出栈一个左括号判断是否与之匹配;是其他字符,不检验。检验到字符串尾,还要检查栈是否为空。只有栈空,整个字符串才是括号匹配的。

#include <stdio.h>
#include <string.h>

#define MAX_STACK 100

struct stStack
{
char szStack[MAX_STACK];
int nTop;
};

void InitStack(stStack& s)
{
s.nTop = -1;
}

char Push(stStack& s, char c)
{
if (s.nTop == MAX_STACK - 1)
return 0;

s.nTop ++;
s.szStack[s.nTop] = c;
return c;
}

char Pop(stStack& s)
{
if (s.nTop == -1)
return 0;

char c = s.szStack[s.nTop];
s.nTop--;
return c;
}

int Check(char* szText)
{
stStack s;
InitStack(s);
int nLen = strlen(szText);
for (int i = 0; i < nLen; i++)
{
char c = szText[i];

switch (c)
{
case '(':
case '{':
case '[':
Push(s, c);
break;

case ')':
if (Pop(s) != '(')
re