顺序栈ADT模板简单应用算法设计:括弧匹配检验
时间限制: 1s
类别: DS:栈->栈定义及应用
问题描述
目的:使用C++模板设计顺序栈的抽象数据类型(ADT)。并在此基础上,使用顺序栈ADT的基本操作,设计并实现简单应用的算法设计。
内容:(1)请参照顺序表的ADT模板,设计顺序栈的抽象数据类型。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。参考教材、课件,以及网盘中的顺序表ADT原型文件,自行设计顺序栈的ADT。)
(2)ADT的简单应用:使用该ADT设计并实现若干应用顺序栈的算法设计。
应用3:假设表达式允许有两种括号:圆括号和方括号,其嵌套顺序随意。要求设计一个算法,使用顺序栈,实现括弧匹配检验的算法设计。括弧匹配:检验函数返回true;反之,返回false
(1)顺序栈ADT版本
参考函数原型:
template<class ElemType>
bool Matching( SqStack<ElemType> &S );
(为简便起见,表达式字符串输入可在该函数内一并实现,设定输入表达式内均为合法字符,且表达式的长度在顺序栈的允许范围内是可变的。)
(2)STL的stack版本
参考函数原型:
template<class ElemType>
bool Matching( stack<ElemType> &S );
输入说明
仅一行:待检验表达式,除圆括号和方括号外,还有数字和运算符等。
输出说明
仅一行:检验结果
内容为以下其中之一:
Correct
Wrong
#include<iostream>
#include<stack>
using namespace std;
bool isCouple(stack<char>& S)
{
char c;
while(cin >> c)
{
if (c == '[' || c == '(')
{
S.push(c);
}
else if (c == ']')
{
if (S.empty() || S.top() != '[') return false; // 妫�鏌ユ爤鏄惁涓虹┖鍜屽尮閰�
S.pop();
}
else if (c == ')')
{
if (S.empty() || S.top() != '(') return false; // 妫�鏌ユ爤鏄惁涓虹┖鍜屽尮閰�
S.pop();
}
}
return S.empty();
}
int main()
{
stack<char> S;
if (isCouple(S)) cout << "Correct" << endl;
else cout << "Wrong" << endl;
return 0;
}