括号匹配

来源:互联网 发布:linux执行sh文件命令 编辑:程序博客网 时间:2024/05/21 21:41

看到一道题关于数据结构的括号匹配的问题,要求使用栈进行操作,如果遇到到的是左括号就进栈,如果读入的是右括号就把前一个入栈的左括号取出出栈,比较他们两个是否匹配,代码如下:



<span style="font-size:24px;">#include <stdio.h>  #include <stdlib.h>         #define S_SIZE 100   //栈的空间大小  struct SqStack{      int *base; //栈底      int *top;  //栈顶      int stacksize;   //栈当前的存储空间  };  //声明栈要使用的函数     void InitStack(SqStack &S);//初始化空栈      int StackEmpty(SqStack S);//判空      void push(SqStack &S,int e);//进栈      void pop(SqStack &S,int &e);//出栈  int main()  {        SqStack s;//定义一个栈      InitStack(s);  //初始化栈     char ch[100],*p;int e;      p=ch;      printf("输一个含义有()[]{}的括号表达式:\n");      gets(ch);      while(*p)      {           switch (*p)          {          case '{':          case '[':          case '(': push(s,*p++);break;//只要是左括号就入栈          case '}':          case ']':          case ')':pop(s,e);                   if ((e=='{' && *p=='}') ||(e=='[' && *p==']') || (e=='(' && *p==')'))                   p++;                   else                   { printf("括号不匹配!"); exit(1); }                   break;          default :p++;//其他字符就跳过         }      }      if (StackEmpty(s))        printf("括号匹配成功");      else        printf("缺少右括号!");      printf("\n"); return 0; }  void InitStack(SqStack &S) //初始化空栈   {S.base=new int[S_SIZE]; S.stacksize=S_SIZE;  S.top=S.base;}  int StackEmpty(SqStack S)//判空  {      if(S.base==S.top)          return 1;      else          return 0;  }  void push(SqStack &S,int e) //进栈   {    if(S.top-S.base>=S.stacksize)//判满      {printf("栈满\n");exit(1); }      *(S.top)=e;      S.top++;        }  void pop(SqStack &S,int &e)  //出栈 {     if(S.base!=S.top)      {S.top--;      e=*S.top;}  }  </span>


0 0
原创粉丝点击