数据结构中使用指针运算括号匹配问题

2018-08-18  本文已影响0人  obidv

使用指针实现括号匹配问题:

#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;
}
上一篇下一篇

猜你喜欢

热点阅读