c语言先进先出结构体怎么写
时间: 2023-04-08 14:03:49 浏览: 70
你可以使用数组来实现先进先出的结构体,具体实现方式如下:
typedef struct {
int front, rear;
int data[MAXSIZE];
} Queue;
void initQueue(Queue *q) {
q->front = q->rear = 0;
}
int isEmpty(Queue *q) {
return q->front == q->rear;
}
int isFull(Queue *q) {
return (q->rear + 1) % MAXSIZE == q->front;
}
int enQueue(Queue *q, int x) {
if (isFull(q)) {
return 0;
}
q->data[q->rear] = x;
q->rear = (q->rear + 1) % MAXSIZE;
return 1;
}
int deQueue(Queue *q, int *x) {
if (isEmpty(q)) {
return 0;
}
*x = q->data[q->front];
q->front = (q->front + 1) % MAXSIZE;
return 1;
}
这样,你就可以使用 Queue 结构体来实现先进先出的队列了。
相关问题
队列示例代码先进先出 C语言
下面是一个简单的队列示例代码,使用C语言实现先进先出:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_QUEUE_SIZE 10
// 定义队列结构体
typedef struct {
int front; // 队首指针
int rear; // 队尾指针
int data[MAX_QUEUE_SIZE]; // 队列元素数组
} Queue;
// 初始化队列
void initQueue(Queue *q) {
q->front = q->rear = 0;
}
// 判断队列是否为空
int isQueueEmpty(Queue *q) {
return q->front == q->rear;
}
// 判断队列是否已满
int isQueueFull(Queue *q) {
return (q->rear + 1) % MAX_QUEUE_SIZE == q->front;
}
// 入队操作
int enqueue(Queue *q, int element) {
if (isQueueFull(q)) {
printf("Queue is full!\n");
return 0;
}
q->data[q->rear] = element;
q->rear = (q->rear + 1) % MAX_QUEUE_SIZE;
return 1;
}
// 出队操作
int dequeue(Queue *q, int *element) {
if (isQueueEmpty(q)) {
printf("Queue is empty!\n");
return 0;
}
*element = q->data[q->front];
q->front = (q->front + 1) % MAX_QUEUE_SIZE;
return 1;
}
int main() {
Queue q;
initQueue(&q);
// 入队操作
int i;
for (i = 0; i < MAX_QUEUE_SIZE; i++) {
enqueue(&q, i);
}
// 出队操作
int element;
while (!isQueueEmpty(&q)) {
dequeue(&q, &element);
printf("%d ", element);
}
printf("\n");
return 0;
}
```
以上代码实现了一个简单的循环队列,队列的长度为10,可以自行修改`MAX_QUEUE_SIZE`的值进行测试。
先进先出算法代码c语言
以下是一个基于队列的先进先出(FIFO)算法的 C 语言代码:
``` c
#include <stdio.h>
// 定义队列结构体
#define MAX_SIZE 100
struct Queue {
int items[MAX_SIZE];
int front;
int rear;
};
// 创建一个空队列
struct Queue* createQueue() {
struct Queue* queue = malloc(sizeof(struct Queue));
queue->front = -1;
queue->rear = -1;
return queue;
}
// 判断队列是否已满
int isFull(struct Queue* queue) {
if (queue->rear == MAX_SIZE - 1) {
return 1;
} else {
return 0;
}
}
// 判断队列是否为空
int isEmpty(struct Queue* queue) {
if (queue->front == -1 && queue->rear == -1) {
return 1;
} else {
return 0;
}
}
// 在队列尾部添加元素
void enqueue(struct Queue* queue, int value) {
if (isFull(queue)) {
printf("队列已满,无法添加元素\n");
} else {
if (isEmpty(queue)) {
queue->front = 0;
}
queue->rear++;
queue->items[queue->rear] = value;
printf("元素 %d 已添加到队列中\n", value);
}
}
// 从队列头部取出元素
int dequeue(struct Queue* queue) {
int item;
if (isEmpty(queue)) {
printf("队列为空,无法取出元素\n");
item = -1;
} else {
item = queue->items[queue->front];
queue->front++;
if (queue->front > queue->rear) {
printf("队列已空\n");
queue->front = -1;
queue->rear = -1;
}
}
return item;
}
int main() {
struct Queue* queue = createQueue();
// 在队列尾部添加元素
enqueue(queue, 1);
enqueue(queue, 2);
enqueue(queue, 3);
// 从队列头部取出元素
int first_element = dequeue(queue);
printf("取出的元素是:%d\n", first_element);
// 从队列头部取出元素
first_element = dequeue(queue);
printf("取出的元素是:%d\n", first_element);
// 打印当前队列是否为空
if (isEmpty(queue)) {
printf("队列已空\n");
} else {
printf("队列不为空\n");
}
return 0;
}
```
输出:
```
元素 1 已添加到队列中
元素 2 已添加到队列中
元素 3 已添加到队列中
取出的元素是:1
取出的元素是:2
队列不为空
```
在这个例子中,我们首先定义了一个队列结构体,其中包括一个整型数组 `items`、一个整型变量 `front` 和一个整型变量 `rear`。然后,我们使用 `malloc` 函数动态分配了一个 `Queue` 结构体,并将其赋值给指针变量 `queue`。接着,我们使用 `createQueue` 函数创建了一个空队列。
在 `enqueue` 函数中,我们首先使用 `isFull` 函数判断队列是否已满。如果已满,则输出一条错误消息;否则,我们将队列的 `rear` 指针向后移动一位,并将新元素添加到队列中。在 `dequeue` 函数中,我们首先使用 `isEmpty` 函数判断队列是否为空。如果为空,则输出一条错误消息并返回 `-1`;否则,我们从队列的 `front` 位置取出元素,并将 `front` 指针向后移动一位。如果在取出元素后队列已空,则将 `front` 和 `rear` 指针重置为 `-1`。
最后,我们在 `main` 函数中创建了一个队列,然后使用 `enqueue` 函数向队列中添加了三个元素。接着,我们使用 `dequeue` 函数两次,从队列中依次取出了两个元素,并将它们打印出来。最后,我们使用 `isEmpty` 函数判断队列是否为空,并打印出相应的消息。
阅读全文