C语言数据结构之栈与队列的应用(2)

来源:互联网 发布:nba2k17麦迪身体数据 编辑:程序博客网 时间:2024/06/04 19:34

输入一个表达式,表达式中包括三种括号“()”、“[]”和“{}”,判断该表达式的括号是否匹配。

#include<stdio.h>#include<stdlib.h>#define MAX 20#define STACKINCREMENT 10typedef struct{char *base;char *top;int stacksize;}SqStack;void InitStack(SqStack &s){//构造空栈s.base=(char *)malloc(MAX *sizeof(char));if(!s.base)exit(0);s.top=s.base;s.stacksize=MAX;}void Push(SqStack &s,int e){if(s.top-s.base>=s.stacksize){s.base=(char *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(char));if(!s.base)exit(0);s.top=s.base+s.stacksize;s.stacksize+=STACKINCREMENT;}*s.top++=e;}void Pop(SqStack &s,int &e){if(s.top==s.base)exit(0);e=*--s.top;}int stackEmpty(SqStack s){if(s.top==s.base)return 1;return 0;}int AllBracket(char*str){SqStack s;char *p;int ch;InitStack(s);p=str;while(*p!='\0'){if(*p=='('||*p=='['||*p=='{')Push(s,*p);else if(*p==')'||*p==']'||*p=='}'){if(stackEmpty(s)){printf("不匹配\n");return 0;}Pop(s,ch);if(*p==')'&&ch!='('){printf("不匹配\n");return 0;}if(*p==']'&&ch!='['){printf("不匹配\n");return 0;}if(*p=='}'&&ch!='{'){printf("不匹配\n");return 0;}}p++;}if(stackEmpty(s)){printf("匹配\n");return 1;}return 0;}int main(){char str[80];printf("请输入表达式:");gets(str);AllBracket(str);return 0;}


1 0