采用合适的存储方式建立广义表,实现:1)广义表的建立;2)求广义表的长度;3)求广义表的深度;4)求广义表的表头;5)求广义表的表尾;6)广义表的输出。 用c语言实现并调用,要求一起实现
时间: 2024-12-18 08:11:23 浏览: 4
广义表的广度(长度)和深度的计算
5星 · 资源好评率100%
在C语言中,我们可以使用链表作为基础数据结构来实现广义表。以下是具体的实现:
1. 广义表的建立:
```c
typedef struct Node {
int data; // 数据域
struct Node* next; // 指针域,指向下一个元素
} Node;
// 创建一个新的节点
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = NULL;
return newNode;
}
// 创建广义表,如:[1, 2, [3, 4]]
Node* createList(Node** head, int... values) {
Node* current = *head;
for (int i = 0; i < sizeof(values)/sizeof(values[0]); i++) {
if (!current) {
*head = createNode(values[i]);
} else {
current->next = createNode(values[i]);
current = current->next;
}
}
return *head;
}
```
2. 求广义表的长度:
```c
int getLength(Node* head) {
int count = 0;
while (head) {
count++;
head = head->next;
}
return count;
}
```
3. 求广义表的深度(递归实现):
```c
int getDepth(Node* head) {
if (head == NULL) {
return 0;
} else if (head->next == NULL) {
return 1;
} else {
return 1 + getDepth(head->next);
}
}
```
4. 求广义表的表头:
```c
Node* getHead(Node* head) {
return head;
}
```
5. 求广义表的表尾(非递归实现,需要辅助指针):
```c
Node* getTail(Node* head) {
Node* prev = NULL;
Node* curr = head;
while (curr->next != NULL) {
prev = curr;
curr = curr->next;
}
return prev;
}
```
6. 广义表的输出(遍历打印):
```c
void printList(Node* head) {
Node* temp = head;
while (temp) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
```
以上都是在命令行环境中运行的,如果要在一个完整的应用中调用,可以考虑封装成函数或者类的形式。记得处理好内存管理和错误情况。
阅读全文