c语言队列存入文件,队列实现文件C语言
时间: 2024-03-24 19:41:00 浏览: 14
要实现队列存入文件,可以考虑以下几个步骤:
1. 定义队列结构体,包括队列的头节点、尾节点、节点数量和节点数据类型等信息。
```
typedef struct node {
int data;
struct node* next;
} Node;
typedef struct queue {
Node* head;
Node* tail;
int size;
} Queue;
```
2. 初始化队列,将头节点和尾节点都指向NULL,节点数量设为0。
```
void initQueue(Queue* q) {
q->head = NULL;
q->tail = NULL;
q->size = 0;
}
```
3. 实现入队操作,将新节点加入队列末尾,同时更新尾节点和节点数量。
```
void enqueue(Queue* q, int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (q->head == NULL) {
q->head = newNode;
} else {
q->tail->next = newNode;
}
q->tail = newNode;
q->size++;
}
```
4. 实现出队操作,将队列头节点弹出,同时更新头节点和节点数量。
```
int dequeue(Queue* q) {
if (q->head == NULL) {
return -1; // 队列为空,返回错误码
}
int data = q->head->data;
Node* temp = q->head;
q->head = q->head->next;
free(temp);
q->size--;
return data;
}
```
5. 将队列中的数据存入文件,可以使用标准C库中的文件操作函数,例如fopen、fprintf和fclose等。
```
void saveQueue(Queue* q, char* filename) {
FILE* fp = fopen(filename, "w");
if (fp == NULL) {
printf("Error opening file.\n");
return;
}
Node* curr = q->head;
while (curr != NULL) {
fprintf(fp, "%d\n", curr->data);
curr = curr->next;
}
fclose(fp);
}
```
完整代码示例:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node* next;
} Node;
typedef struct queue {
Node* head;
Node* tail;
int size;
} Queue;
void initQueue(Queue* q) {
q->head = NULL;
q->tail = NULL;
q->size = 0;
}
void enqueue(Queue* q, int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (q->head == NULL) {
q->head = newNode;
} else {
q->tail->next = newNode;
}
q->tail = newNode;
q->size++;
}
int dequeue(Queue* q) {
if (q->head == NULL) {
return -1;
}
int data = q->head->data;
Node* temp = q->head;
q->head = q->head->next;
free(temp);
q->size--;
return data;
}
void saveQueue(Queue* q, char* filename) {
FILE* fp = fopen(filename, "w");
if (fp == NULL) {
printf("Error opening file.\n");
return;
}
Node* curr = q->head;
while (curr != NULL) {
fprintf(fp, "%d\n", curr->data);
curr = curr->next;
}
fclose(fp);
}
int main() {
Queue q;
initQueue(&q);
enqueue(&q, 1);
enqueue(&q, 2);
enqueue(&q, 3);
saveQueue(&q, "queue.txt");
return 0;
}
```
运行此程序后,会在当前目录下生成一个名为“queue.txt”的文件,其中包含队列中的所有元素(每个元素占一行)。