栈在括号匹配中应用(更正上一篇
#include <stdio.h>
#define MaxSize 10
#include <string.h>
typedef struct {
char data[MaxSize];
int tap;
} SqStack;
void InitStack(SqStack &s) {
s.tap = -1;
}
bool StackEmpty(SqStack s) {
if ( s.tap == -1)
return true;
else
return false;
}
bool Push(SqStack &s, char x) {
if (s.tap == MaxSize - 1)
return false;
else {
s.data[++s.tap] = x;
return true;
}
}
bool pop(SqStack &s, char &x) {
if (s.tap == -1)
return false;
else {
x = s.data[s.tap--];
return true;
}
}
bool breakcheck(char str[], int length) {
SqStack s;
InitStack(s);
// a=strlen(str) = %d 用于计算数组长度
//int length = sizeof(str)/sizeof(str[0])
for (int i = 0; i < length; i++ ) {
if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
Push(s, str[i]);
} else {
if (StackEmpty(s) )
return false;
char topElem;
pop(s, topElem);
if (str[i] == ')' && topElem != '(')
return false;
if (str[i] == ']' && topElem != '[')
return false;
if (str[i] == '}' && topElem != '{')
return false;
}
}
return StackEmpty(s);
}
int main(void) {
SqStack s;
int length;
char str[] = {'{', '[', ']', '}'};
length = sizeof(str) / sizeof(str[0]);
if (breakcheck(str, length))
printf("成功");
else
printf("失败");
return 0;
}
)