C语言编写递归算法,输出广义表中所有原子项及其所在层次
时间: 2024-05-16 12:14:50 浏览: 125
假设广义表已经以字符串形式存储在一个字符数组 `str` 中,可以按照以下方式编写递归算法来输出所有原子项及其所在层次:
```c
#include <stdio.h>
void print_atoms(char str[], int level) {
int i = 0;
while (str[i] != '\0') {
// 如果当前字符不是左括号,说明是原子项
if (str[i] != '(' && str[i] != ')') {
printf("%c 在第 %d 层\n", str[i], level);
// 跳过当前原子项
while (str[i] != '(' && str[i] != ')' && str[i] != '\0') {
i++;
}
continue;
}
// 如果当前字符是左括号,说明进入了下一层
if (str[i] == '(') {
print_atoms(str + i + 1, level + 1);
}
i++;
}
}
int main() {
char str[] = "(a,(b,(c,d)),e)";
print_atoms(str, 1);
return 0;
}
```
在这个算法中,我们使用一个 `level` 变量来记录当前所在层次。对于每个字符,如果它不是左括号或右括号,就输出它所在的层次和字符本身,然后跳过整个原子项;如果它是左括号,就递归地调用 `print_atoms` 函数进入下一层。注意,在递归调用时,我们将字符串指针 `str` 指向了当前左括号后面的字符,这样可以避免对已经处理过的字符进行重复处理。
对于示例广义表 `(a,(b,(c,d)),e)`,该算法会输出:
```
a 在第 1 层
b 在第 2 层
c 在第 3 层
d 在第 3 层
e 在第 1 层
```
阅读全文