设计算法,对以字符串形式表示的广义表,构造出其相应 的链表存储结构
时间: 2024-04-29 15:23:53 浏览: 16
1. 定义广义表节点的结构体:
```
typedef struct GLNode {
char data; // 节点的数据,可以是元素或子表的标志
struct GLNode *sublist; // 指向子表的指针
struct GLNode *next; // 指向下一个节点的指针
} GLNode;
```
2. 定义函数 `createGL(char *str)`,该函数接受一个以字符串形式表示的广义表,返回相应的链表存储结构。
```
GLNode* createGL(char *str) {
GLNode *head = NULL, *p = NULL, *q = NULL;
int i = 0;
while (str[i] != '\0') {
if (str[i] == '(') { // 子表的开始
GLNode *subhead = createGL(str + i + 1); // 递归创建子表
i += strlen(str + i + 1) + 1; // 跳过子表的字符串
if (p == NULL) { // 第一个节点
p = (GLNode*)malloc(sizeof(GLNode));
p->data = '#'; // 标记为子表
p->sublist = subhead;
p->next = NULL;
head = p;
}
else { // 非第一个节点
q = (GLNode*)malloc(sizeof(GLNode));
q->data = '#'; // 标记为子表
q->sublist = subhead;
q->next = NULL;
p->next = q;
p = q;
}
}
else if (str[i] == ')') { // 子表的结束
return head; // 返回链表头节点
}
else if (str[i] == ',') { // 元素的分隔符
i++; // 跳过分隔符
}
else { // 元素
if (p == NULL) { // 第一个节点
p = (GLNode*)malloc(sizeof(GLNode));
p->data = str[i];
p->sublist = NULL;
p->next = NULL;
head = p;
}
else { // 非第一个节点
q = (GLNode*)malloc(sizeof(GLNode));
q->data = str[i];
q->sublist = NULL;
q->next = NULL;
p->next = q;
p = q;
}
i++; // 指向下一个字符
}
}
return head; // 返回链表头节点
}
```
3. 示例:
```
char str[] = "(a,b,(c,d),(e,f,g))";
GLNode *head = createGL(str);
```
上述代码将创建以下链表结构:
```
head -> ['a'] -> ['b'] -> ['#'] -> sublist -> ['c'] -> ['d'] -> NULL
| | | |
v v v v
NULL NULL next NULL
| | | |
v v v v
NULL NULL sublist ['e'] -> ['f'] -> ['g'] -> NULL
| | |
v v v
NULL NULL NULL
| | |
v v v
NULL NULL NULL
```
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)