zoukankan      html  css  js  c++  java
  • 括号匹配检验

    #include<stdio.h>
    #include<stdlib.h>
    #define STACK_SIZE 100 
    #define overflow -2
    #define OK  1
    #define TRUE  1
    #define FALSE 0
    typedef char datatype;  
    typedef int Status; 
    typedef struct         
    {datatype  *base;      
    datatype *top;          
    int stacksize;         
    } seqstack;            
    void Initial(seqstack *S) 
    { 
    S->base=(datatype*)malloc(STACK_SIZE *sizeof(datatype));
    if(!S->base)
    exit (-1);
    S->top=S->base;
    S->stacksize=STACK_SIZE;
    }
    Status DestroyStack(seqstack *S)
    {
     free(S->base);
     S->base=NULL;
     S->top=NULL;
     S->stacksize=0;
     return OK;
    }
    Status ClearStack(seqstack *S)
    {S->top=S->base;
     S->stacksize=STACK_SIZE;
    return OK;
    }
    Status StackEmpty(seqstack *S) 
    {
     if(S->top==S->base)
      return TRUE;
     else
      return FALSE;
    }
    datatype  GetTop(seqstack S) 
    {datatype  e;
     e=*(S.top-1);
     return e;
    }
    
    int IsEmpty(seqstack *S)  
    {
     return S->top==S->base;
    }
    int IsFull (seqstack *S)  
    {
     return S->top-S->base==STACK_SIZE-1;
    }
    void Push(seqstack *S,datatype x) 
    {
    if(IsFull(S))
    {
     printf("overflow"); 
    exit (1);
    }
    else
    *S->top++=x;           
    }
    void Pop(seqstack *S)   
    {
     if(IsEmpty(S))
    {
    printf("NULL");
    exit (1);
    }
    else
    --S->top;            
    }
    datatype Top(seqstack *S) 
    {if(IsEmpty(S))
    {
     printf("empty");   
    exit  (1);
    }
    return *(S->top-1);
    }
    int match (seqstack *S,char *str) 
    {
    char x;
    int i, flag=1;
    for(i=0;str[i]!='\0';i++)
    {
    switch(str[i])
    {
    case '(' : Push(S,'(');
    break;
    case '[' : Push(S,'[');
    break;
    case '{' : Push(S,'{');
    break;
    case ')' : x=Top(S);
               Pop(S);
         if(x!='(')
          flag=0;
    break;
    case ']' : x=Top(S);
               Pop(S);
         if(x!='[')
          flag=0;
    break;
    case '}' : x=Top(S);
               Pop(S);
         if(x!='{')
          flag=0;
    break;
    }
    if(!flag)
    break;
    }
    if(IsEmpty(S)==1 && flag)
    return 1;
    else
    return 0;
     }
    int main ()
    {
    	int t;
    	scanf("%d%*c",&t);
    	while(t--){
    	seqstack S,*st;
    	st=&S;
    	char str[100];
    
    	Initial(st);
    	
    	gets(str);
    	
    	if(match(st,str))
    	printf ("ok\n");
    	else
    	printf ("error\n");
    	}
    	return 0;
    }
    
  • 相关阅读:
    diary and html 文本颜色编辑,行距和其它编辑总汇
    bash coding to changeNames
    virtualbox ubuntu 网络连接 以及 连接 secureCRT
    linux 学习6 软件包安装
    linux 学习8 权限管理
    vim 使用2 转载 为了打开方便
    ubuntu
    linux 学习15 16 启动管理,备份和恢复
    linux 学习 14 日志管理
    linux 学习 13 系统管理
  • 原文地址:https://www.cnblogs.com/suiyun/p/2682469.html
Copyright © 2011-2022 走看看