栈中的括号匹配检验,数据结构,c++

//顺序栈
#include<iostream>
#include<string>
using namespace std;

#define MAXSIZE 100 //栈的最大容量
struct SqStack
{
int *base;//栈底指针
int *top;//栈顶指针
char sign[MAXSIZE];
};

//初始化
int InitStack(SqStack &S)
{//构造一个空栈
S.base=new int[MAXSIZE];//为顺序栈分配一个最大容量为MAXSIZE的数组空间
if(!S.base)
exit(-2);//存储分配失败
S.top=S.base;//top的初值为base,空栈
return 1;
}
//入栈,在栈顶插入一个新元素
int PushStack(SqStack &S,char e)
{//插入元素e为新的栈顶元素
if(S.top-S.base==MAXSIZE)
{
cout<<"栈满"<<endl;
return 0;//栈满
}
*S.top++=e;
return 1;

}
//出栈,不删除栈顶元素
char GetTop(SqStack S)
{
if(S.top!=S.base)//非空栈
return *(S.top-1);//返回栈顶元素,指针不变
else
return NULL;
}

//删除栈顶元素
void DeleteStack(SqStack &S)
{
*--S.top;
}
//判断栈是否为空
int PopStack(SqStack &S)
{
if(S.top==S.base)
return 0;//栈空
else
return 1;
}

//判别括号是否匹配
void Test(SqStack &S)
{
string s;
cout<<"请输入括号"<<endl;
cin>>s;
int length = s.length();
for(int i=0;i<length;i++)
{
if(s[i]=='('||s[i]=='['||s[i]=='{')
PushStack(S,s[i]);
else if(s[i]==')'&&PopStack(S)&&GetTop(S)=='(')
DeleteStack(S);//删除栈顶元素,继续下一轮比较
else if(s[i]==')'&&PopStack(S)&&GetTop(S)!='(')//括号匹配错误,循环结束。
{
cout<<"括号匹配错误1"<<endl;
break;
}
else if(s[i]==']'&&PopStack(S)&&GetTop(S)=='[')
DeleteStack(S);
else if(s[i]==']'&&PopStack(S)&&GetTop(S)!='[')
{
cout<<"括号匹配错误2"<<endl;
break;
}
else if(s[i]=='}'&&PopStack(S)&&GetTop(S)=='{')
DeleteStack(S);
else if(s[i]=='}'&&PopStack(S)&&GetTop(S)!='{')
{
cout<<"括号匹配错误3"<<endl;
break;
}
else if((s[i]==')'||s[i]==']'||s[i]=='}')&&!PopStack(S))//对比没有结束,栈中没有元素
cout<<"左括号缺少"<<endl;
}
if(i==length&&PopStack(S))
cout<<"右括号缺少"<<endl;//对比结束,栈中仍有元素
else if(i==length&&!PopStack(S)&&length%2==0)//对比结束,栈中没有元素
cout<<"匹配正确"<<endl;
}

int main()
{
SqStack S;//创建一个栈,名为S
InitStack(S);//初始化栈
Test(S);//功能函数
return 0;
}

这个代码是在VC6.0环境下完成的,我试了几个字符串(括号),没问题,功能上应该不会有bug了。自己感觉写的比较模糊,但是目的很清晰,就是把三种左括号全部入栈,当出现右括号时在将左括号出栈,如此循环对比。这个代码写的不算简洁,我认为还是清晰易懂的。欢迎大家改进,谢谢喽!

原文链接: https://www.cnblogs.com/c-truth/p/12591808.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    栈中的括号匹配检验,数据结构,c++

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/338511

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午11:39
下一篇 2023年3月1日 下午11:39

相关推荐