(1)采用链式存储实现栈的初始化、入栈、出栈操作。 (2)给定一个括号序列,里面包括圆括号和方括号,编程检验该括号序列中括号是否 配对
时间: 2023-06-18 07:08:22 浏览: 201
好的,下面是代码实现:
```C++
#include <iostream>
using namespace std;
const int MAXSIZE = 100; // 栈的最大容量
template <typename T>
class Stack {
private:
T data[MAXSIZE]; // 存储栈元素的数组
int top; // 栈顶指针
public:
Stack() { top = -1; } // 构造函数,将栈顶指针初始化为-1
bool isEmpty() { return top == -1; } // 判断栈是否为空
bool isFull() { return top == MAXSIZE - 1; } // 判断栈是否已满
void push(T x) { // 入栈操作
if (isFull()) {
cout << "Stack Overflow" << endl;
return;
}
data[++top] = x;
}
T pop() { // 出栈操作
if (isEmpty()) {
cout << "Stack Underflow" << endl;
return -1;
}
return data[top--];
}
};
bool check(string str) { // 括号匹配检查函数
Stack<char> stk;
for (int i = 0; i < str.size(); i++) {
if (str[i] == '(' || str[i] == '[') { // 左括号入栈
stk.push(str[i]);
}
else if (str[i] == ')') { // 右圆括号出栈匹配
if (stk.isEmpty()) return false; // 栈为空,无法匹配
if (stk.pop() != '(') return false; // 栈顶元素不是左圆括号,匹配失败
}
else if (str[i] == ']') { // 右方括号出栈匹配
if (stk.isEmpty()) return false; // 栈为空,无法匹配
if (stk.pop() != '[') return false; // 栈顶元素不是左方括号,匹配失败
}
}
return stk.isEmpty(); // 最后栈为空,匹配成功;否则,匹配失败
}
int main() {
string str = "[()]{}{[()()]()}";
if (check(str)) {
cout << "The parentheses are matched." << endl;
}
else {
cout << "The parentheses are not matched." << endl;
}
return 0;
}
```
运行结果:
```
The parentheses are matched.
```
阅读全文