c语言实现队列的编写
时间: 2024-04-21 12:02:17 浏览: 96
实现一个队列(Queue)的常见方法是使用数组或链表。这里我给出使用数组实现的示例代码:
```c
#include <stdio.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int front;
int rear;
} Queue;
void initQueue(Queue *q) {
q->front = -1;
q->rear = -1;
}
int isQueueEmpty(Queue *q) {
return q->front == -1;
}
int isQueueFull(Queue *q) {
return (q->rear + 1) % MAX_SIZE == q->front;
}
void enqueue(Queue *q, int value) {
if (isQueueFull(q)) {
printf("Queue is full. Cannot enqueue.\n");
return;
}
if (isQueueEmpty(q)) {
q->front = 0;
q->rear = 0;
} else {
q->rear = (q->rear + 1) % MAX_SIZE;
}
q->data[q->rear] = value;
}
int dequeue(Queue *q) {
if (isQueueEmpty(q)) {
printf("Queue is empty. Cannot dequeue.\n");
return -1; // or any other error value
}
int value = q->data[q->front];
if (q->front == q->rear) {
// Queue has only one element, reset front and rear
q->front = -1;
q->rear = -1;
} else {
q->front = (q->front + 1) % MAX_SIZE;
}
return value;
}
int main() {
Queue q;
initQueue(&q);
enqueue(&q, 10);
enqueue(&q, 20);
enqueue(&q, 30);
printf("Dequeued: %d\n", dequeue(&q));
printf("Dequeued: %d\n", dequeue(&q));
printf("Dequeued: %d\n", dequeue(&q));
return 0;
}
```
这段代码实现了一个循环队列(circular queue),通过 `enqueue` 函数向队列中添加元素,通过 `dequeue` 函数从队列中取出元素。在使用循环队列时,我们通过 `% MAX_SIZE` 运算来实现循环的效果,这样队列可以在数组末尾和开头之间循环使用。
阅读全文