用顺序存储用cpp实现栈的初始化、入栈、出栈、取栈顶、判栈空操作。调用以上操作实 现判断从键盘输入的括号序列是否匹配。 输入描述 括号序列#(#为括号输入结束符号) 输出描述 匹配或不匹配
时间: 2024-10-22 19:30:06 浏览: 29
The-application-stack.zip_栈
要使用顺序存储(数组)实现一个栈来判断括号序列是否匹配,首先我们需要创建一个栈来存储左括号,然后遍历输入的括号序列。对于每个遇到的括号,我们检查它是左括号还是右括号,以及栈是否为空。以下是C++代码实现:
```cpp
#include <iostream>
#include <stack>
#include <string>
bool isValid(const std::string& str) {
std::stack<char> brackets;
for (char c : str) {
if (c == '(' || c == '[' || c == '{') { // 遇到左括号,入栈
brackets.push(c);
} else if (c == ')' && !brackets.empty() && brackets.top() == '(') { // 遇到右括号,且栈顶是左括号,出栈
brackets.pop();
} else if (c == ']' && !brackets.empty() && brackets.top() == '[') { // 类似于左圆括号的情况
brackets.pop();
} else if (c == '}' && !brackets.empty() && brackets.top() == '{') {
brackets.pop();
} else { // 匹配失败,直接返回false
return false;
}
} // 判断栈是否为空,如果栈为空,说明所有右括号都已匹配,返回true;否则返回false
return brackets.empty();
}
int main() {
std::string input;
std::cout << "Enter a sequence of parentheses: ";
std::getline(std::cin, input);
if (isValid(input)) {
std::cout << "The parentheses are balanced and match.\n";
} else {
std::cout << "The parentheses are not balanced or do not match.\n";
}
return 0;
}
```
在这个程序中,`isValid`函数实现了栈的初始化、入栈、出栈操作,以及判栈空操作。当用户输入一个括号序列后,它会返回"匹配"或"不匹配"。
阅读全文