用c++写一个数据结构中关于栈、队列的应用算法:输入一个字符串,分别进行回文判断和括号匹配的代码
时间: 2024-11-22 13:36:45 浏览: 11
在 C++ 中,我们可以设计一个简单的栈和队列的数据结构来解决回文判断和括号匹配的问题。下面是一个基本的示例:
**1. 回文判断**
对于回文字符串,可以使用两个指针,一个从前往后,另一个从后往前,同时检查字符是否相等,直到两者相遇或者交错。
```cpp
#include <iostream>
#include <stack>
bool isPalindrome(std::string str) {
std::stack<char> stack;
for (int i = 0; i < str.size(); ++i) {
stack.push(str[i]);
}
int j = str.size() - 1;
while (!stack.empty()) {
if (str[j] != stack.top()) {
return false;
}
stack.pop();
j--;
}
return true;
}
int main() {
std::string input;
std::cout << "Enter a string: ";
std::cin >> input;
if (isPalindrome(input)) {
std::cout << "The string is a palindrome." << std::endl;
} else {
std::cout << "The string is not a palindrome." << std::endl;
}
return 0;
}
```
**2. 括号匹配**
可以使用一个栈来保存左括号,遇到右括号时,检查栈顶元素是否与其配对。如果不匹配或栈为空,则返回false;反之,弹出栈顶元素并继续检查剩余的右括号。
```cpp
#include <iostream>
#include <stack>
#include <string>
bool isParenthesesMatched(const std::string &s) {
std::stack<char> parenthesesStack;
for (char c : s) {
if (c == '(' || c == '[' || c == '{') {
parenthesesStack.push(c);
} else if (c == ')' && !parenthesesStack.empty() && parenthesesStack.top() == '(') {
parenthesesStack.pop();
} else if (c == ']' && !parenthesesStack.empty() && parenthesesStack.top() == '[') {
parenthesesStack.pop();
} else if (c == '}' && !parenthesesStack.empty() && parenthesesStack.top() == '{') {
parenthesesStack.pop();
} else {
return false;
}
}
return parenthesesStack.empty();
}
int main() {
std::string input;
std::cout << "Enter a string with brackets: ";
std::cin >> input;
if (isParenthesesMatched(input)) {
std::cout << "The brackets are properly matched." << std::endl;
} else {
std::cout << "The brackets are not properly matched." << std::endl;
}
return 0;
}
```
阅读全文