顺序栈—括号匹配

来源:互联网 发布:荔枝网络电视直播 编辑:程序博客网 时间:2024/05/13 10:23
#include<stdio.h>#include<stdlib.h>#include<string.h>#define length 100#define add 10typedef struct size{char *top;char *basic;int stacksize;}Stacks;void InitStacks(Stacks &S){S.basic=(char *)malloc(length * sizeof(char));if(!S.basic){printf("Creat erro!");exit(0);}S.top=S.basic+1;S.stacksize=length;printf("Creat succeed!\n");}void PushStacks(Stacks &S,char c){if(S.top-S.basic>=length){S.basic = (char *)realloc(S.basic,(S.stacksize+add)*sizeof(char));if(!S.basic){printf("add failed!\n");exit(0);}S.stacksize=S.stacksize+add;S.top=S.basic+S.stacksize;}*S.top=c;S.top++;}int EmptyStacks(Stacks S){if(S.top-1==S.basic){//printf("the Stacks is Empty!\n");return 1;}return 2;}char PopStacks(Stacks S){if(!EmptyStacks(S))exit(0);else S.top--;return *S.top;}void Juge(char *Str){Stacks S;InitStacks(S);int i=0;while(Str[i]!='\0'){if(Str[i]=='('||Str[i]=='['||Str[i]=='{'){PushStacks(S,Str[i]);i++;}else if(Str[i]==')'){printf("%c",PopStacks(S));printf("%c",Str[i]);if(PopStacks(S)=='('){i++;S.top--;}else{printf("It`s wrong!");exit(0);}}else if(Str[i]==']'){printf("%c",PopStacks(S));printf("%c",Str[i]);if(PopStacks(S)=='['){i++;S.top--;}else{printf("It`s wrong!");exit(0);}}else if(Str[i]=='}'){printf("%c",PopStacks(S));printf("%c",Str[i]);if(PopStacks(S)=='{'){i++;S.top--;}else{printf("It`s wrong!");exit(0);}}else i++;}//for(i=0;i<3;i++)//{//printf("%c",PopStacks(S));//S.top--;//}//printf("%c",S.top+1);//printf("%d\n",S.top);//printf("%d",S.basic);if(EmptyStacks(S)==1)printf("JUGE RIGHT\n");elseprintf("WRONG\n");}int main(){char str[100];for(int i=0;i<6;i++)scanf("%c",&str[i]);Juge(str);return 0;}

0 0
原创粉丝点击