• 顺序栈判断括号是否匹配


    /*Sample Input
    sin(20+10)
    {[}]
    Sample Output
    yes
    no*/
    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    #define TRUE 1
    #define FALSE 0
    #define OK 1
    #define ERROR 0
    #define INFEASIBLE -1
    #define OVERFLOW -2
    #define LIST_INIT_SIZE 100
    #define LISTINCREMENT 10
    typedef int status;
    typedef char elemtype;
    elemtype str[100];
    typedef struct node{
          elemtype *base;
          elemtype *top;
          int size;
    }sqstack;
    status initstack(sqstack &s){//初始化栈
         s.base=(elemtype *)malloc(LIST_INIT_SIZE*sizeof(elemtype));
         if(!s.base)
            exit(OVERFLOW);
            s.top=s.base;
            s.size=LIST_INIT_SIZE;
            return OK;
    }
    status get_top(sqstack s,elemtype &e){//获得栈顶元素
         if(s.top==s.base)
         return ERROR;
         e=*(s.top-1);
         return OK;
    }
    status push(sqstack &s,elemtype e){//向栈中输入元素
         if(s.top-s.base>=s.size){
            s.base=(elemtype *)realloc(s.base,(LIST_INIT_SIZE+LISTINCREMENT)*sizeof(elemtype));
            if(!s.base)
                 exit(OVERFLOW);
                 s.top=s.base+s.size;
                 s.size+=LISTINCREMENT;
         }
         *s.top++=e;
         return OK;
    }
    status pop(sqstack &s,elemtype &e){//删除栈顶元素
          if(s.top==s.base)
          return ERROR;
          e=*--s.top;
          return OK;
    }
    status empty(sqstack &s){//判断栈是否为空
          if(s.base==s.top)
          return TRUE;
    
          else
          return FALSE;
    }
    int getlenght(char str1[]){
      int cnt=0;
      for(int i=0;str1[i];i++){
        cnt++;
      }
      return cnt;
    }
    int main(){
            while(gets(str)){
            int len=getlenght(str);
            sqstack s;
            initstack(s);
            elemtype e;
            int flag=0;
              for(int i=0;i<len;i++){
                  if(flag)
                  break;
                  if(str[i]=='('||str[i]=='{'||str[i]=='['){
                     e=str[i];
                     push(s,e);
                  }
                  else if(str[i]==')'||str[i]=='}'||str[i]==']'){
                         if(empty(s)){
                             flag=1;
                             break;
                         }
                       pop(s,e);
                       if((str[i]==')'&&e=='(')||(str[i]=='}'&&e=='{')||(str[i]==']'&&e=='['))
                       {
                            continue;
                       }
                       else{
                         flag=1;
                         break;
                       }
                  }
                  else continue;
              }
              if(flag==1||!empty(s))
              printf("no
    ");
              else
              printf("yes
    ");
    }
            return 0;
    }
  • 相关阅读:
    SessionFactory Cache 的配置
    乱码处理问题
    格式化当前日期
    JDK的安装
    内存和对象内存池技术在网游开发中的注意点和应用
    Head First设计模式C++实现Strategy模式
    介绍三种将二进制字节字符转换为ASCII方法
    C++风格的类型转换的用法
    i++循环与i循环的执行效率
    系统程序员成长计划组合的威力(一)
  • 原文地址:https://www.cnblogs.com/13224ACMer/p/5036242.html
Copyright © 2020-2023  润新知