c语言二进制文件链表
时间: 2023-12-21 18:31:59 浏览: 80
c语言实现链表的基本操作,链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
以下是一个C语言程序,用于将二叉树按层次遍历转换为单链表:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构
struct Node {
int data;
struct Node* left;
struct Node* right;
};
// 定义单链表节点结构
struct ListNode {
int data;
struct ListNode* next;
};
// 创建一个新的二叉树节点
struct Node* createNode(int data) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
if (newNode == NULL) {
printf("内存分配失败!\n");
exit(1);
}
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 将二叉树转换为单链表
void convertBinaryTreeToLinkedList(struct Node* root, struct ListNode** head) {
if (root == NULL) {
return;
}
// 创建一个新的单链表节点
struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
if (newNode == NULL) {
printf("内存分配失败!\n");
exit(1);
}
newNode->data = root->data;
newNode->next = NULL;
// 如果链表为空,则将新节点设置为头节点
if (*head == NULL) {
*head = newNode;
} else {
// 否则,将新节点添加到链表的末尾
struct ListNode* current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
// 递归地将左子树和右子树转换为链表
convertBinaryTreeToLinkedList(root->left, head);
convertBinaryTreeToLinkedList(root->right, head);
}
// 打印单链表
void printLinkedList(struct ListNode* head) {
struct ListNode* current = head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
int main() {
// 创建一个二叉树
struct Node* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
root->right->left = createNode(6);
root->right->right = createNode(7);
// 将二叉树转换为单链表
struct ListNode* head = NULL;
convertBinaryTreeToLinkedList(root, &head);
// 打印单链表
printf("转换后的单链表:");
printLinkedList(head);
return 0;
}
```
这个程序将二叉树按层次遍历转换为单链表。它首先创建一个新的单链表节点,然后将二叉树的根节点的数据复制到该节点中,并将其添加到链表的末尾。然后,递归地将左子树和右子树转换为链表,并将它们连接到链表的末尾。最后,打印转换后的单链表。
阅读全文