用c++实现顺序栈带基本操作和括号匹配问题
时间: 2024-03-20 20:43:41 浏览: 103
好的,以下是 C++ 实现顺序栈带基本操作和括号匹配问题的代码示例:
```c++
#include <iostream>
#include <stack>
#include <string>
using namespace std;
const int MAXSIZE = 100; // 栈的最大容量
class Stack {
private:
char data[MAXSIZE]; // 栈的元素数组
int top; // 栈顶指针
public:
Stack() { // 构造函数,初始化栈顶指针
top = -1;
}
bool push(char x) { // 入栈操作
if (top == MAXSIZE - 1) { // 栈满
cout << "Error: Stack is full." << endl;
return false;
}
data[++top] = x; // 先将栈顶指针加1,再将元素x入栈
return true;
}
bool pop(char &x) { // 出栈操作
if (top == -1) { // 栈空
cout << "Error: Stack is empty." << endl;
return false;
}
x = data[top--]; // 先将栈顶元素出栈,再将栈顶指针减1
return true;
}
bool getTop(char &x) { // 获取栈顶元素
if (top == -1) { // 栈空
cout << "Error: Stack is empty." << endl;
return false;
}
x = data[top]; // 直接获取栈顶元素
return true;
}
bool isEmpty() { // 判断栈是否为空
return top == -1;
}
};
bool isMatch(char a, char b) { // 判断两个括号是否匹配
return (a == '(' && b == ')') || (a == '[' && b == ']') || (a == '{' && b == '}');
}
bool isValid(string s) { // 判断字符串中的括号是否匹配
Stack st;
for (int i = 0; i < s.length(); i++) {
if (s[i] == '(' || s[i] == '[' || s[i] == '{') {
st.push(s[i]);
} else if (s[i] == ')' || s[i] == ']' || s[i] == '}') {
char ch;
if (!st.pop(ch) || !isMatch(ch, s[i])) {
return false;
}
}
}
return st.isEmpty();
}
int main() {
Stack s; // 创建一个栈
char x;
s.push('a');
s.push('b');
s.push('c');
s.pop(x);
cout << "Pop element: " << x << endl;
s.getTop(x);
cout << "Top element: " << x << endl;
cout << "Is empty? " << (s.isEmpty() ? "Yes" : "No") << endl;
string str = "({[()]})";
cout << str << " is ";
cout << (isValid(str) ? "valid" : "invalid") << endl;
return 0;
}
```
这个顺序栈使用了一个数组来存储元素,同时使用一个指针 top 来记录当前栈顶的位置。入栈操作 `push()` 将元素插入到栈顶,出栈操作 `pop()` 删除栈顶元素并返回其值,获取栈顶元素操作 `getTop()` 直接返回栈顶元素的值,判断栈是否为空操作 `isEmpty()` 判断 top 是否等于 -1。
在这个代码示例中,我们还实现了一个函数 `isMatch()` 来判断两个括号是否匹配,并使用一个栈来解决括号匹配问题。函数 `isValid()` 用于判断给定字符串中的括号是否匹配。
阅读全文