举例eC语言 双向循环链表 然后我先从文件读取数据 ,然后之后的文件操作
时间: 2024-02-26 12:57:36 浏览: 58
好的,以下是一个简单的双向循环链表的 eC 语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct node {
int data;
struct node* prev;
struct node* next;
} Node;
// 定义链表结构体
typedef struct list {
Node* head;
} List;
// 初始化链表
void initList(List* list) {
list->head = NULL;
}
// 在链表尾部插入节点
void insert(List* list, int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
if (list->head == NULL) {
newNode->prev = newNode;
newNode->next = newNode;
list->head = newNode;
} else {
Node* tail = list->head->prev;
newNode->prev = tail;
newNode->next = list->head;
tail->next = newNode;
list->head->prev = newNode;
}
}
// 从文件读取数据并插入到链表中
void readFromFile(List* list, char* filename) {
FILE* fp = fopen(filename, "r");
if (fp == NULL) {
printf("Failed to open file %s\n", filename);
return;
}
int data;
while (fscanf(fp, "%d", &data) != EOF) {
insert(list, data);
}
fclose(fp);
}
// 将链表内容写入文件
void writeToFile(List* list, char* filename) {
FILE* fp = fopen(filename, "w");
if (fp == NULL) {
printf("Failed to open file %s\n", filename);
return;
}
Node* current = list->head;
do {
fprintf(fp, "%d ", current->data);
current = current->next;
} while (current != list->head);
fclose(fp);
}
int main() {
List list;
initList(&list);
// 从文件读取数据并插入到链表中
readFromFile(&list, "data.txt");
// 将链表内容写入文件
writeToFile(&list, "output.txt");
return 0;
}
```
在这个例子中,我们定义了一个 `List` 结构体和一个 `Node` 结构体,表示链表和节点。然后我们实现了 `initList`、`insert`、`readFromFile` 和 `writeToFile` 等函数来操作链表。
在 `main` 函数中,我们首先初始化了一个空链表,然后调用 `readFromFile` 函数从文件中读取数据并插入到链表中,最后调用 `writeToFile` 函数将链表中的数据写入文件。注意,在读取文件时,我们使用了 `fscanf` 函数来读取文件中的整数,而在写入文件时,我们使用了 `fprintf` 函数来将整数写入文件中。
阅读全文