栈的运用--表达式括号的匹配

本文介绍了一个使用栈数据结构实现的括号匹配算法,通过逐个读取字符并判断其是否为左括号或右括号,进而进行入栈或出栈操作,最终确定括号是否正确配对。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;

typedef struct stack{
       char arr[100];
       int top;
}stack,*Pstack; 

void init(Pstack t){
	t->top=-1;
}

int isempty(Pstack t){//栈为空返回1 
	if(t->top==-1) return 1;
	else return 0;
}

void push(Pstack t,char x){
  t->arr[++t->top]=x;	
} 

char pop(Pstack t){
	if(t->top==-1)
	return -1;//栈为空,返回-1 
	else return t->arr[t->top--];
}


int ismatched(char a,char b){//匹配返回1 
	if((a=='{'&&b=='}')||(a=='('&&b==')')||(a=='['&&b==']')) return 1;
	else return 0;
} 

int main(){
	Pstack t=(Pstack)malloc(sizeof(stack));
	init(t);
	char p;//取出的栈顶的元素 
	char c=getchar();
	int flag=1;//用于标记是否匹配 
	while(c!='\n'){
		if(c=='('||c=='{'||c=='[') //当输入左括号时,一律入栈 
			push(t,c);
		
		else if(c==')'||c==']'||c=='}')
	    	{
             p=pop(t); 
		     if(!ismatched(p,c)) lag=0;
	    	}//输入右括号时,取出栈顶元素,并判断是否匹配来决定是否更改flag的值 
		c=getchar();
		}		
	if(flag==1) cout<<"Yes"<<endl;
	else cout<<"No"<<endl;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值