栈的应用--括号匹配的检验(C++)

严蔚敏数据结构49页题目。括号匹配的检验。

题目的意思是假定只有两种括号[]()要求我们检测一组由'('')'']''['组成的数据是否满足括号匹配  ---()()[][]  YES  ([])([]())  YES  ]]]((]))  NO

解题思路:读取字符,如果是左括号则入栈,如果是有括号则取栈顶元素与其进行比较,如果匹配则把栈顶元素弹出,否则直接跳出,输出不匹配。

代码如下

 
   

#include
#include
#define MAXLEN 100
using namespace std;
class Stack
{
public:
Stack()
{
top = -1;
}
int Pop();
int Push(char c);
char ReadTop();
bool Sempty();
private:
int top;
char s[MAXLEN];
};
int Stack::Pop()
{
if (Stack::Sempty())return 0;
else
{
x = s[top];
top--;
return 1;
}
}
int Stack::Push(char c)
{
if (top == MAXLEN - 1)return 0;
else
{
top++;
s[top] = c;
return 1;
}
}
char Stack::ReadTop()
{
if (Stack::Sempty())return 0;
else return s[top];
}
bool Stack::Sempty()
{
if (top==-1)
return true;
else return false;
}
int main()
{
Stack stack;
char ch, k;
///ifstream infile("C:\\Users\\hp\\Desktop\\in.txt", ios::in);
int mark = 0, mark2 = 0;
while (cin >> ch)
{
if (ch == 't'){ break; }
if (ch == '[' || ch == ']' || ch == '(' || ch == ')')
{
if (ch == '[' || ch == '(')
if (stack.Push(ch))continue;
else { cout << "栈满"; break; }
if (ch == ']' || ch == ')')
{
k = stack.ReadTop();
if (k == '['&&ch == ']')
if (stack.Pop())continue;
else { cout << "栈空"; break; }
else if (k == '('&&ch == ')')
if (stack.Pop())continue;
else { cout << "栈空"; break; }
else { mark = 1; break; }
}
}
else { mark2 = 1; break; }
}
if (mark2)cout << "输入不合法!" << endl;
else
{
if (!stack.Sempty() || mark)cout << "NO" << endl;
else cout << "YES" << endl;
}
return 0;
}

顺便练习一下文件输入。。如果不用文件输入的话用  t结束输入。
 
 

  

你可能感兴趣的:(C++&,数据结构)