括号匹配问题是一种典型的栈思想的应用。利用栈先进后出原则,使得最里面的括号最先匹配,一次出栈匹配到最外面。代码如下:
#include <iostream>
#include <stdio.h>
#define MaxSize 10
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
/**
栈的应用,括号的匹配问题。
*/
//定义一个静态方式的栈
typedef struct{
char data[MaxSize];//静态数组存放栈元素
int top;//栈顶指针
}Stack;
//初始化栈
void InitStack(Stack &S){
S.top = -1;
}
//判断栈是否空
bool isEmpty(Stack &S){
if(S.top==-1){
return true;
}else{
return false;
}
}
//入栈
bool PushStack(Stack &S,char x){
if(S.top==MaxSize-1){//栈满报错
return false;
}//top指针先指向最新的栈顶元素
S.data[++S.top] = x;//将值赋给栈顶元素
return true;
}
//出栈(x返回)
bool PopStack(Stack &S,char &x){
if(S.top = -1){//栈空报错
return false;
}
x = S.data[--S.top];
return true;
}
//括号匹配
bool StackMatch(char str[],int length){
Stack S;//声明栈
InitStack(S);//初始化栈
for(int i=0;i<length;i++){
if(str[i]=='(' || str[i]=='[' || str[i]=='{'){
PushStack(S,str[i]);//扫描到左括号入栈
}else{
if(isEmpty(S)){
return false;
}
char topElem;
PopStack(S,topElem);//栈顶元素出栈
if(str[i]=='(' && topElem!=')'){
return false;
}
if(str[i]=='[' && topElem!=']'){
return false;
}
if(str[i]=='{' && topElem!='}'){
return false;
}
}
}
return isEmpty(S);//栈空说明匹配成功
}
int main(int argc, char** argv) {
char str[] = {'('};
char str1[] = {'(',')'};
char str2[] = {'(','(','(',')',')'};
char str3[] = {'(','(',')',')',')'};
char str4[] = {')'};
/*
printf("您要匹配的括号元素是:");
for(int i=0;i<5;i++){
printf("%c",str2[i]);
}
*/
bool flag = StackMatch(str2,5);
printf("\nflag=%d",flag);
return 0;
}