数据结构C语言广义表代码实现
时间: 2023-09-27 07:09:13 浏览: 275
广义表是一种常用的数据结构,它可以表示多层次的嵌套结构。在C语言中,可以使用链表来实现广义表。
以下是一个简单的广义表的C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 结点的数据类型定义
typedef struct Node {
char data; // 数据域,存储广义表的元素
struct Node* next; // 指针域,指向下一个结点
struct Node* sublist; // 子表指针,指向子表的头结点
} Node;
// 创建结点
Node* createNode(char data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
newNode->sublist = NULL;
return newNode;
}
// 插入结点到广义表中
void insert(Node** head, char data) {
if (*head == NULL) {
*head = createNode(data);
return;
}
Node* current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = createNode(data);
}
// 插入子表到广义表中
void insertSublist(Node** head, Node* sublist) {
if (*head == NULL) {
*head = sublist;
return;
}
Node* current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = sublist;
}
// 打印广义表
void printList(Node* head) {
if (head == NULL) {
printf("()");
return;
}
printf("(");
Node* current = head;
while (current != NULL) {
if (current->sublist == NULL) {
printf("%c", current->data);
} else {
printList(current->sublist);
}
if (current->next != NULL) {
printf(", ");
}
current = current->next;
}
printf(")");
}
// 释放广义表的内存
void freeList(Node** head) {
Node* current = *head;
while (current != NULL) {
Node* temp = current;
current = current->next;
if (temp->sublist != NULL) {
freeList(&temp->sublist);
}
free(temp);
}
*head = NULL;
}
int main() {
Node* list = NULL;
// 插入元素到广义表中
insert(&list, 'A');
insert(&list, 'B');
insert(&list, 'C');
// 创建子表并插入到广义表中
Node* sublist = createNode('D');
insert(&sublist->sublist, 'E');
insert(&sublist->sublist, 'F');
insertSublist(&list, sublist);
// 打印广义表
printList(list);
// 释放广义表的内存
freeList(&list);
return 0;
}
```
这段代码实现了一个简单的广义表,可以通过调用`insert`和`insertSublist`函数插入元素和子表,并通过`printList`函数打印整个广义表。记得在程序结束时,调用`freeList`函数释放广义表的内存。
注意:这只是一个简单的实现示例,实际应用中可能需要根据具体需求进行修改和扩展。
阅读全文