利用栈判断括号是否匹配

版权声明:如若转载,请联系作者。 https://blog.csdn.net/liu16659/article/details/70216107

1.利用栈判断括号是否匹配

2.源码

/*
1.判断表达式中的括号是否匹配 
*/
#include <stdio.h>
#include <string.h> 
#define maxSize 1000

typedef struct{
	char data[maxSize];//字符串
	int top;//栈顶指针 	
}Stack; 

void initStack(Stack &stack);//初始化栈 
void pushStack(Stack &stack,char data);//入栈 
int popStack(Stack &stack);//出栈 
bool isEmpty(Stack stack);//判断栈是否为空 
char getTopStack(Stack stack);//取头元素 

int main(){
	char str[maxSize];
	gets(str);//输入一个字符串 
	int i = 0;
	Stack stack;
	initStack(stack);//初始化栈操作 
	for(i = 0;i<strlen(str);i++){
		if(str[i] =='{'||str[i] =='('||str[i]=='['){//如果为其三者之一 
			pushStack(stack,str[i]);//将str[i]入栈			
		}
		else{
			if(str[i] == '}' && getTopStack(stack) == '{' ){						
				popStack(stack);
			}
			else if(str[i] ==')' && getTopStack(stack) == '('){			
				popStack(stack);
			} 
			else if(str[i]==']' && getTopStack(stack) == '[' ){		
				popStack(stack);
			}	
		} 
		
	}
	//如果栈为空,则匹配,否则不匹配 
	if(isEmpty(stack)){
		printf("括号匹配!\n");
	}
	else printf("括号不匹配!\n");
	return 0 ;
}

//初始化栈 
void initStack(Stack &stack){
	stack.top = 0;//栈顶指针置为0	
} 

//进栈操作 
void pushStack(Stack &stack,char data){
	if(stack.top < maxSize){
		stack.data[stack.top++] = data;
	}
	else return;
}

//出栈操作 
int popStack(Stack &stack){
	if(stack.top!=0){
		return stack.data[--stack.top];
	}
	else return -1;
}

//获取栈顶元素 
char getTopStack(Stack stack){
	if(stack.top!=0){
		return stack.data[stack.top-1];
	}
} 

//判断栈是否为空 
bool isEmpty(Stack stack){
	if(stack.top == 0){
		return true;
	}
	else return false;
}

/**测试数据
[](){([])} 
*/ 


展开阅读全文

没有更多推荐了,返回首页