使用指针实现括号匹配问题:
#include <stdio.h>
#include <stdlib.h>
//数据结构基础语法
#define true 1
#define false 0
#define ok 1
#define error 0
#define infeasible -1
#define overflow -2
typedef int status;
#define init_size 100
#define increment 10
typedef char selemtype;
typedef struct {
selemtype *base;
selemtype *top;
int stacksize;
}sqstack;
status initstack(sqstack &s) {//初始化stack;
s.base = (selemtype *)malloc(init_size * sizeof(selemtype));
if (!s.base) exit(overflow);
s.top = s.base;
s.stacksize = init_size;
return ok;
}
status push(sqstack &s, selemtype e) {
if (s.top - s.base >= s.stacksize) {
s.base = (selemtype *)realloc(s.base, (s.stacksize + increment) * sizeof(selemtype));
s.top = s.base + s.stacksize;
s.stacksize += increment;
}
*s.top++= e;
return ok;
}
status pop(sqstack &s,selemtype &e) {
if (s.base == s.top) return error;
e = *--s.top;
return ok;
}
status stackempty(sqstack s) {
if (s.base == s.top) return true;
else return false;
}
status gettop(sqstack s, selemtype &e) {
if (s.top == s.base) return error;
e = *(s.top - 1);
return ok;
}
int main() {
sqstack kuo;
initstack(kuo);
bool flag=true;
selemtype p, e, x;
p = getchar();
while (p != '\n'&& flag==true) {
switch (p) {
case '[':
case '(':push(kuo, p); break;
case ')':gettop(kuo, e); if (e == '(') pop(kuo,x);
else flag = false; break;
case ']':gettop(kuo, e); if (e == '[') pop(kuo,x);
else flag = false; break;
default: break;
}
p = getchar();
}
if (stackempty(kuo)) flag = true;
else flag = false;
if (flag) printf("true");
else printf("false");
return 0;
}
网友评论