用c写一个关于栈和队列的文件输入输出
时间: 2024-02-13 14:02:54 浏览: 25
好的,我来给你提供一份使用C语言实现栈和队列的文件输入输出的代码,供你参考:
```
#include <stdio.h>
#include <stdlib.h>
// 定义栈结构体
typedef struct {
int *data;
int top;
int size;
} Stack;
// 定义队列结构体
typedef struct {
int *data;
int front;
int rear;
int size;
} Queue;
// 初始化栈
void initStack(Stack *s, int size) {
s->data = (int*)malloc(size * sizeof(int));
s->top = -1;
s->size = size;
}
// 判断栈是否为空
int isEmptyStack(Stack *s) {
return s->top == -1;
}
// 判断栈是否已满
int isFullStack(Stack *s) {
return s->top == s->size - 1;
}
// 入栈
void push(Stack *s, int x) {
if (isFullStack(s)) {
printf("Stack is full!\n");
return;
}
s->data[++s->top] = x;
}
// 出栈
int pop(Stack *s) {
if (isEmptyStack(s)) {
printf("Stack is empty!\n");
return -1;
}
return s->data[s->top--];
}
// 初始化队列
void initQueue(Queue *q, int size) {
q->data = (int*)malloc(size * sizeof(int));
q->front = q->rear = 0;
q->size = size;
}
// 判断队列是否为空
int isEmptyQueue(Queue *q) {
return q->front == q->rear;
}
// 判断队列是否已满
int isFullQueue(Queue *q) {
return (q->rear+1)%q->size == q->front;
}
// 入队
void enqueue(Queue *q, int x) {
if (isFullQueue(q)) {
printf("Queue is full!\n");
return;
}
q->data[q->rear] = x;
q->rear = (q->rear+1) % q->size;
}
// 出队
int dequeue(Queue *q) {
if (isEmptyQueue(q)) {
printf("Queue is empty!\n");
return -1;
}
int x = q->data[q->front];
q->front = (q->front+1) % q->size;
return x;
}
// 栈的文件输入输出
void stackFileIO() {
FILE *fp;
Stack s;
int size = 10;
// 初始化栈
initStack(&s, size);
// 向栈中压入数据
push(&s, 1);
push(&s, 2);
push(&s, 3);
// 将栈中的数据写入文件
fp = fopen("stack.txt", "w");
if (fp == NULL) {
printf("Error: Failed to open file!\n");
return;
}
fprintf(fp, "%d\n", s.top+1);
for (int i = 0; i <= s.top; i++) {
fprintf(fp, "%d ", s.data[i]);
}
fclose(fp);
// 从文件中读取数据到栈中
fp = fopen("stack.txt", "r");
if (fp == NULL) {
printf("Error: Failed to open file!\n");
return;
}
int n;
fscanf(fp, "%d", &n);
initStack(&s, n);
for (int i = 0; i < n; i++) {
int x;
fscanf(fp, "%d", &x);
push(&s, x);
}
fclose(fp);
// 输出栈中的数据
while (!isEmptyStack(&s)) {
printf("%d ", pop(&s));
}
printf("\n");
}
// 队列的文件输入输出
void queueFileIO() {
FILE *fp;
Queue q;
int size = 10;
// 初始化队列
initQueue(&q, size);
// 向队列中插入数据
enqueue(&q, 1);
enqueue(&q, 2);
enqueue(&q, 3);
// 将队列中的数据写入文件
fp = fopen("queue.txt", "w");
if (fp == NULL) {
printf("Error: Failed to open file!\n");
return;
}
fprintf(fp, "%d %d\n", q.front, q.rear);
for (int i = q.front; i != q.rear; i = (i+1) % q.size) {
fprintf(fp, "%d ", q.data[i]);
}
fclose(fp);
// 从文件中读取数据到队列中
fp = fopen("queue.txt", "r");
if (fp == NULL) {
printf("Error: Failed to open file!\n");
return;
}
int f, r;
fscanf(fp, "%d%d", &f, &r);
initQueue(&q, r-f);
q.front = f;
q.rear = r;
for (int i = q.front; i != q.rear; i = (i+1) % q.size) {
int x;
fscanf(fp, "%d", &x);
enqueue(&q, x);
}
fclose(fp);
// 输出队列中的数据
while (!isEmptyQueue(&q)) {
printf("%d ", dequeue(&q));
}
printf("\n");
}
int main() {
stackFileIO();
queueFileIO();
return 0;
}
```
以上代码中,我们分别实现了栈和队列的文件输入输出功能。在这个例子中,我们将栈和队列中的数据写入文件,然后再从文件中读取数据到栈和队列中,最后输出栈和队列中的数据。
希望这份代码对你有所帮助!