括号匹配

 
#include <stdio.h>
#include 
<stdlib.h>
#include 
<malloc.h>
#include 
<iostream.h>

#define ElemType char
#define Status int
#define STACKSIZE 10
#define OK 1
#define ERROR 0

typedef 
struct{
    ElemType 
*base;    //栈底指针,顺序栈中,其值不变
    ElemType *top;    //栈定指针
    int stacksize;
}
SqStack;

Status Init(SqStack 
&s){
    s.
base=(ElemType *)malloc(STACKSIZE*sizeof(ElemType));
    
if(!s.base){
        printf(
"分配内存失败 ");
        
return ERROR;
    }

    s.top
=s.base;
    s.stacksize
=STACKSIZE;
    
return OK;
}



Status Push(SqStack 
&s,ElemType e){
    
if(s.top-s.base>=s.stacksize){
        s.
base=(ElemType *)realloc(s.base,(s.stacksize+5)*sizeof(ElemType));
        
if(!s.base){
            printf(
"增加内存空间失败 ");
            
return ERROR;
        }

        s.top
=s.base+s.stacksize;
        s.stacksize
+=5;
    }

    
*s.top++=e;
    
return OK;
}


Status Pop(SqStack 
&s,ElemType &e){
    
if(s.top==s.base){
        printf(
"空栈 ");
        
return ERROR;
    }

    e
=*--s.top;
    
return OK;
}


void out(int i,char e1,char e2){
    
if(i)
        printf(
"%c匹配%c ",e1,e2);
    
else
        printf(
"%c失配%c ",e1,e2);
}


void main(){
    SqStack s;
    ElemType e;
    ElemType e1;
    Init(s);
    
for(int i=0;i<10;i++){
        printf(
"输入第%d个元素:",i+1);
        cin
>>e;
        
if(e=='['||e==']'||e=='('||e==')'||e=='{'||e=='}'){
            
if(e=='['||e=='('||e=='{')
                Push(s,e);
            
else{
                Pop(s,e1);
                
switch(e){
                    
case']':if(e1=='[')
                                
out(1,e1,e);
                            
else
                                
out(0,e1,e);
                            
break;
                    
case'}':if(e1=='{')
                                
out(1,e1,e);
                            
else
                                
out(0,e1,e);
                            
break;
                    
case')':if(e1=='(')
                                
out(1,e1,e);
                            
else
                                
out(0,e1,e);
                            
break;
                }

            }

        }
else{
            i
--;
        }

    }

/*    for(i=1;i<=10;i++){
        Pop(s,e);
        printf("%3d:%3c ",i,e);
    }
*/

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值