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;
    }
    
  • 相关阅读:
    C#如何用OpenFileDialog控件打开图片显示到PictureBox这个控件
    C# winform 禁止窗体移动
    linux 硬链接和软链接(转)
    linux 源码编译(转)
    linux 压缩与解压缩
    硬盘分区(来自百度百科)
    arp:地址解析协议(Address Resolution Protocol)(来自维基百科)
    c++学习笔记(1)
    ProbS CF matlab源代码(二分系统)(原创作品,转载注明出处,谢谢!)
    [eclipse]UML之AmaterasUML 插件
  • 原文地址:https://www.cnblogs.com/suiyun/p/2682469.html
Copyright © 2011-2022 走看看