运用C语言栈编写括号检验的程序
时间: 2024-10-12 13:11:25 浏览: 7
在C语言中,我们可以使用栈数据结构来检查括号的配对是否正确。栈是一种先进后出(LIFO)的数据结构,非常适合用于处理需要回溯的问题,比如检查括号序列。
以下是简单的步骤和伪代码来描述这个程序:
1. 定义一个空栈,并创建一个包含所有合法括号的集合(如'{'、'}'、'('、')'等)。
2. 遍历输入字符串中的每个字符,对于每个字符:
- 如果是开括号('{'、'(' 或 '['),将其压入栈中。
- 如果是闭括号,检查栈顶元素是否是对应的开括号:
- 如果是,则弹出栈顶元素;如果不是,则说明不匹配,返回错误。
3. 循环结束后,如果栈为空,表示所有的开括号都找到了对应,括号检查通过;否则,栈中有剩余的开括号,说明不匹配,返回错误。
```c
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#define MAX Stack Size // 指定栈的最大容量
bool isValid(char s[]) {
stack = (char*)malloc(MAX * sizeof(char)); // 初始化栈
int top = -1;
for(int i = 0; s[i] != '\0'; i++) {
if(s[i] == '{' || s[i] == '(' || s[i] == '[') {
stack[++top] = s[i];
} else if(s[i] == '}' && stack[top] == '{') {
stack[top--] = '\0'; // 移除栈顶元素
} else if(s[i] == ')' && stack[top] == '(') {
stack[top--] = '\0';
} else if(s[i] == ']' && stack[top] == '[') {
stack[top--] = '\0';
} else {
return false; // 匹配失败
}
}
if(stack[top] != '\0') { // 如果还有剩余的括号,说明不匹配
free(stack);
return false;
} else {
free(stack);
return true;
}
}
int main() {
char str[] = "({[()])";
if(isValid(str)) {
printf("The parentheses are valid.\n");
} else {
printf("The parentheses are invalid.\n");
}
return 0;
}