(1)采用链式存储实现栈的初始化、入栈、出栈操作。 (2)给定一个括号序列,里面包括圆括号和方括号,编程检验该括号序列中括号是否配对,用c++做出以上任务
时间: 2024-10-13 10:16:37 浏览: 38
数据结构-二叉树的建立与遍历 (2).docx
(1)采用链式存储实现栈的初始化、入栈、出栈操作,可以按照以下步骤:
1. 初始化:创建一个空的链表作为栈的基础结构,当栈为空时,head指针指向NULL。
```cpp
struct StackNode {
int data;
StackNode* next;
};
StackNode* stackHead = nullptr; // 初始状态
```
2. 入栈(Push):新元素添加到链表头部。
```cpp
void push(int item) {
StackNode* newNode = new StackNode();
newNode->data = item;
newNode->next = stackHead;
stackHead = newNode;
}
```
3. 出栈(Pop):弹去并返回栈顶元素(如果非空),然后更新头节点。
```cpp
int pop() {
if (stackHead == nullptr) {
throw "Stack is empty";
}
StackNode* topElement = stackHead;
int result = topElement->data;
stackHead = stackHead->next;
delete topElement;
return result;
}
```
(2)检验括号配对(例如:()`[]{})的C++实现,可以使用栈的数据结构。遍历输入字符串,遇到左括号就压入栈中,遇到右括号时检查栈顶是否有对应的左括号,如果有则出栈,如果没有或出栈的是不是对应类型的括号,则表示不匹配。最后,如果栈为空则所有括号都已配对。
```cpp
#include <iostream>
#include <string>
bool isValid(std::string s) {
std::stack<char> brackets;
for (char c : s) {
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 {
return false; // 不匹配的括号
}
}
return brackets.empty(); // 检查剩余括号是否全部匹配
}
int main() {
std::string input = "()[]{}";
if (isValid(input)) {
std::cout << "The brackets are valid.\n";
} else {
std::cout << "The brackets are not valid.\n";
}
return 0;
}
```
阅读全文