c/c++括号匹配

看到一道题关于数据结构的括号匹配的问题,要求使用栈进行操作,如果遇到到的是左括号就进栈,如果读入的是右括号就把前一个入栈的左括号取出出栈,比较他们两个是否匹配,代码如下:



#include <stdio.h>  
#include <stdlib.h>     
    
#define S_SIZE 100   //栈的空间大小  

struct SqStack{  
    int *base; //栈底  
    int *top;  //栈顶  
    int stacksize;   //栈当前的存储空间  
};  
//声明栈要使用的函数 
    void InitStack(SqStack &S);//初始化空栈  
    int StackEmpty(SqStack S);//判空  
    void push(SqStack &S,int e);//进栈  
    void pop(SqStack &S,int &e);//出栈  
int main()  
{
    
    SqStack s;//定义一个栈  
    InitStack(s);  //初始化栈 
    char ch[100],*p;
	int e;  
    p=ch;  
    printf("输一个含义有()[]{}的括号表达式:\n");  
    gets(ch);  
    while(*p)  
    {   
        switch (*p)  
        {  
        case '{':  
        case '[':  
        case '(': push(s,*p++);break;//只要是左括号就入栈  
        case '}':  
        case ']':  
        case ')':pop(s,e);  
                 if ((e=='{' && *p=='}') ||(e=='[' && *p==']') || (e=='(' && *p==')'))  
                 p++;  
                 else  
                 {
				 printf("括号不匹配!");
				 exit(1);
				 }  
                 break;  
        default :p++;//其他字符就跳过 
        }  
    }  
    if (StackEmpty(s))  
      printf("括号匹配成功");  
    else  
      printf("缺少右括号!");  
    printf("\n"); 
	
	return 0; 
}  
void InitStack(SqStack &S) //初始化空栈   
{S.base=new int[S_SIZE]; 
S.stacksize=S_SIZE;  
S.top=S.base;
}  
int StackEmpty(SqStack S)//判空  
{  
    if(S.base==S.top)  
        return 1;  
    else  
        return 0;  
}  
void push(SqStack &S,int e) //进栈   
{
    if(S.top-S.base>=S.stacksize)//判满  
    {
	printf("栈满\n");
	exit(1); 
	}  
    *(S.top)=e;  
    S.top++;        
}  
void pop(SqStack &S,int &e)  //出栈 
{ 
    if(S.base!=S.top)  
    {
	S.top--;  
    e=*S.top;
	}  
} 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值