数据结构--c++实现括号匹配
Posted 敲代码的Messi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构--c++实现括号匹配相关的知识,希望对你有一定的参考价值。
基本算法
输入一串括号字符串,从左往右扫描,若遇到左括号则入栈,若遇到右括号则从栈顶出栈一个括号(肯定是左括号),然后与其匹配。
代码实现
#include<iostream>
#include<string>
using namespace std;
const int MaxSize=10;
struct Stack
{
char data[MaxSize];
int top; //栈顶指针
/* data */
};
bool init(Stack &s);
bool push(Stack &s,char c);//入栈
bool pop(Stack &s,char &c);//出栈
bool empty(Stack s);
bool bracketcheck(Stack s);//括号匹配
int main(){
Stack s;
init(s);
if(bracketcheck(s))
cout<<"括号匹配完成!\\n";
system("pause");
return 0;
}
bool init(Stack &s){
s.top=-1;
cout<<"初始化成功\\n";
return true;
}
bool push(Stack &s,char c){
if (s.top==MaxSize-1)
{
cout<<"栈满,入栈失败\\n";
return false;
}
s.data[++s.top]=c;
return true;
}
bool pop(Stack &s,char &c){
if (s.top==-1)
{
cout<<"栈空,出栈失败\\n";
return false;
}
c=s.data[s.top--];
return true;
}
bool empty(Stack s){
if (s.top==-1)
{
cout<<"栈空\\n";
return true;
}
else{
cout<<"栈不为空\\n";
return false;
}
}
bool bracketcheck(Stack s){
string str;
cout<<"请输入要匹配的括号:";
cin>>str;
int i;
for( i=0;i<str.size();i++){
if (str[i]=='(' || str[i]=='[' || str[i]=='{')
{
if(push(s,str[i]))
cout<<str[i]<<" 入栈成功\\n";
}
else{
char c;
if(pop(s,c))
cout<<"出栈成功\\n";
if(str[i]==')' && c!='(')
break;
else if(str[i]==']' && c!='[')
break;
else if(str[i]=='}' && c!='{')
break;
else
cout<<str[i]<<"匹配成功\\n";
}
}
return i==str.size();
}
测试
以上是关于数据结构--c++实现括号匹配的主要内容,如果未能解决你的问题,请参考以下文章