同学们你们不要白嫖我啊,看完点个赞评个论也行啊
9 顺序栈ADT模板简单应用算法设计:括弧匹配检验
作者: 冯向阳时间限制: 1S章节: DS:栈
截止日期: 2022-06-30 23:55:00
问题描述 :
目的:使用C++模板设计顺序栈的抽象数据类型(ADT)。并在此基础上,使用顺序栈ADT的基本操作,设计并实现简单应用的算法设计。
内容:(1)请参照顺序表的ADT模板,设计顺序栈的抽象数据类型。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。参考教材、课件,以及网盘中的顺序表ADT原型文件,自行设计顺序栈的ADT。)
首先强调一下思路和主要的方法。
这次使用STL容器stack,当然你也可以自己写栈。
先给出stack的基本用法
在c++ 中,stack的头文件是#include<stack>
stack常用操作
stack<int> q; //以int型为例
int x;
q.push(x); //将x压入栈顶
q.top(); //返回栈顶的元素
q.pop(); //删除栈顶的元素
q.size(); //返回栈中元素的个数
q.empty(); //检查栈是否为空,若为空返回true,否则返回false
#include<iostream>
#include<stack>
using namespace std;
int main()
{
stack<int> q;
q.push(1);
q.push(2);
q.push(3);
q.push(4);
q.push(5);
cout<<"q.size "<<q.size()<<endl;
cout<<"q.top "<<q.top()<<endl; //输出栈顶元素
q.pop(); //删除栈顶元素
cout<<"q.size "<<q.size()<<endl;
cout<<"q.top "<<q.top()<<endl;
return 0;
}
输入说明 :
仅一行:待检验表达式,除圆括号和方括号外,还有数字和运算符等。
输出说明 :
仅一行:检验结果
内容为以下其中之一:
Correct
Wrong
输入范例 :
输出范例 :
以下代码为原创
通过char数组输入数据,只有当遇见 ( 【 等左括号才入栈,输入右括号时立马跟栈里面的栈顶元素进行比对,如果匹配成功就抽出栈顶元素。
实在不会你可以去看这个视频,链接如下https://www.bilibili.com/video/BV1oq4y197kr?spm_id_from=333.337.search-card.all.click
AC代码
#include<iostream>
#include<iomanip>
#include<cstring>
#include<stack>
using namespace std;
int main()
{
stack<char> a;
char test[100];
cin >> test;
for (int i = 0; i < strlen(test); i++)
{
if (i == strlen(test) - 1)
{
if (a.empty() == 1)
{
cout << "Correct" << endl;
return 0;
}
else
{
cout << "Wrong" << endl;
return 0;
}
}
if (test[i] == '(' || test[i] == '[')
{
a.push(test[i]);
}
else if (test[i] == ')' || test[i] == ']')
{
if (a.top() == '(' && test[i] == ')')
{
a.pop();
}
else if (a.top() == '[' && test[i] == ']')
{
a.pop();
}
}
}
return 0;
}