栈实现括号匹配

来源:互联网 发布:整人剃发软件 编辑:程序博客网 时间:2024/05/17 09:17
# include <stdio.h># include <malloc.h># include <stdlib.h># define INIT_STACK_SIZE 10# define STACKINCREMENT 5typedef struct{char * base;char * top;int stacksize;}* PSTACK, STACK;void Init (PSTACK pS){pS->base = (char *)malloc(sizeof(char) * INIT_STACK_SIZE);if (!pS->base){printf("内存分配失败!\n");exit(-1);}pS->top = pS->base;pS->stacksize = INIT_STACK_SIZE;return;}void push (PSTACK pS){return;}int match (char ch, char cha){if ((')' == ch && '(' == cha) || (']' == ch && '[' == cha) || ('}' == ch && '{' == cha)){return 1;}else if ('(' == ch ||'[' == ch || '{' == ch || ')' == ch ||']' == ch || '}' == ch){return 2;}return 0;}void push (PSTACK pS, char ch){if ((pS->top - pS->base) == pS->stacksize - 1){pS->base = (char *)realloc(pS->base, sizeof(char) * (pS->stacksize + STACKINCREMENT));if (!pS->base){printf("内存分配失败!\n");exit(-1);}pS->top = pS->base + (pS->stacksize - 1);pS->stacksize += STACKINCREMENT;}*pS->top++ = ch;return;}void pop (PSTACK pS){*(--pS->top) = NULL;return;}int main(void){char ch;STACK s;Init(&s);printf("请输入括号串:");do {ch = getchar();if (1 == match(ch, *(s.top - 1))){pop(&s);}else if (2 == match(ch, *(s.top - 1))){push(&s, ch);}else if (ch == '\n'){printf("\n输入完成!\n");if (s.top == s.base){printf("****匹配成功!****\n");}else{printf("****匹配失败!有%d项不能互相匹配!****\n", s.top - s.base);}break;}} while ('\n' != ch);return 0;}

0 0
原创粉丝点击