• 括号匹配检验


    #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;
    }
    
  • 相关阅读:
    Eclispe造成的tomcat占用端口 无法启动 强制终止进程 转载
    JavaScript在页面中的执行顺序(理解声明式函数与赋值式函数) 转载
    spket IDE插件更新地址
    SQL 语句外键 a foreign key constraint fails
    面试技能树 转载
    简单粗暴 每个servlet之前都插入一段代码解决 乱码问题
    记录一个因sqlmap导致的错误
    Java与数据库数据类型对应表
    乐观锁与悲观锁
    maven打的包中含源文件jar包
  • 原文地址:https://www.cnblogs.com/suiyun/p/2682469.html
Copyright © 2020-2023  润新知