用C语言代码编写链栈左右括号是否配对程序设计
时间: 2024-10-11 15:17:49 浏览: 33
链栈的简单应用-c语言 栈的顺序和链式实现代码ppt
在C语言中,编写一个检查链栈(也称为递归堆栈)以确定字符串中的左右括号是否匹配可以采用递归算法和数据结构。这里我们可以使用两个链栈,一个用于存储左括号,另一个用于临时存储右括号,直到找到相应的左括号。
首先,定义一个节点结构体,包含一个字符和指向下一个节点的指针:
```c
typedef struct Node {
char data;
struct Node* next;
} StackNode;
```
然后,我们需要创建两个链栈(用数组表示简化,实际应用可能需要链表):
```c
StackNode leftStack[100], rightStack[100];
int leftIndex = -1, rightIndex = -1;
```
接下来是一个辅助函数`isPair`,它会处理单个字符并更新链栈:
```c
void isPair(StackNode* stack[], int* index, char c) {
if (c == '(') {
// 如果遇到左括号,入栈
stack[index][index++] = {'('};
} else if (c == ')') {
// 遇到右括号,如果栈不为空且顶元素是左括号,则出栈并比较
if (stack[index] && stack[index][-1] == '(') {
stack[index--][-1] = '\0'; // 出栈左括号
} else {
// 匹配失败
return;
}
} else if (c == '{' || c == '[') {
// 对于大括号和方括号,处理方式类似
stack[index][index++] = {c};
}
}
```
最后,主函数遍历输入的字符串,并调用`isPair`:
```c
int checkBrackets(char str[]) {
for (char c : str) {
isPair(leftStack, &leftIndex, c);
if (rightIndex != -1) {
// 如果右边有剩余栈元素,则继续检查下一对括号
continue;
}
isPair(rightStack, &rightIndex, c); // 只检查右括号
if (rightIndex == -1) {
// 如果右括号未匹配到对应的左括号,返回false
return 0;
}
}
// 如果所有括号都已成功匹配,返回true
return leftIndex == -1 && rightIndex == -1;
}
```
阅读全文