c语言写一个循环队列
时间: 2023-09-21 07:06:29 浏览: 148
如何实现循环队列
### 回答1:
如果你想写一个循环队列,那么你可以按照以下步骤进行:
1. 定义一个数组,用来存储队列中的元素。
2. 定义两个变量,用来表示队列的头和尾。
3. 定义一个函数,用来将元素插入队列的尾部。
4. 定义一个函数,用来从队列的头部取出元素。
以下是一个示例代码,它实现了一个简单的循环队列:
```c
#include <stdio.h>
#include <stdlib.h>
#define QUEUE_SIZE 10
int queue[QUEUE_SIZE];
int head = 0;
int tail = 0;
// 将元素插入队列尾部
void enqueue(int element) {
queue[tail] = element;
tail = (tail + 1) % QUEUE_SIZE;
}
// 从队列头部取出元素
int dequeue() {
int element = queue[head];
head = (head + 1) % QUEUE_SIZE;
return element;
}
int main() {
for (int i = 0; i < QUEUE_SIZE; i++) {
enqueue(i);
}
for (int i = 0; i < QUEUE_SIZE; i++) {
printf("%d ", dequeue());
}
return 0;
}
```
在这个代码中,我们定义了一个大小为 10 的数组 `queue`,用来存储队列中的元素。我们还定义了两个变量 `head` 和 `tail`,用来表示队列的头和尾。
在 `enqueue` 函数中,我们将元素插入到队列尾部。在 `dequeue` 函数中,我们从队列头部取出元素。
在 `main` 函数中
### 回答2:
循环队列是一种常见的队列数据结构,它使用数组来实现。下面是一个简单的C语言代码示例,实现了一个循环队列。
```c
#include <stdio.h>
#define MAX_SIZE 5
// 定义循环队列的结构体
typedef struct {
int data[MAX_SIZE];
int front;
int rear;
} Queue;
// 初始化循环队列
void initQueue(Queue *queue) {
queue->front = queue->rear = 0;
}
// 判断队列是否为空
int isEmpty(Queue queue) {
return queue.front == queue.rear;
}
// 判断队列是否已满
int isFull(Queue queue) {
return (queue.rear + 1) % MAX_SIZE == queue.front;
}
// 入队
int enqueue(Queue *queue, int item) {
if (isFull(*queue)) {
printf("Queue is full.\n");
return 0; // 入队失败
}
queue->data[queue->rear] = item;
queue->rear = (queue->rear + 1) % MAX_SIZE;
return 1; // 入队成功
}
// 出队
int dequeue(Queue *queue, int *item) {
if (isEmpty(*queue)) {
printf("Queue is empty.\n");
return 0; // 出队失败
}
*item = queue->data[queue->front];
queue->front = (queue->front + 1) % MAX_SIZE;
return 1; // 出队成功
}
int main() {
Queue queue;
initQueue(&queue);
// 入队
enqueue(&queue, 1);
enqueue(&queue, 2);
enqueue(&queue, 3);
// 出队
int item;
dequeue(&queue, &item);
printf("Dequeued item: %d\n", item);
return 0;
}
```
以上代码实现了一个能够入队和出队的循环队列。在使用之前,我们首先需要初始化队列,然后可以使用 `enqueue` 函数将元素入队,使用 `dequeue` 函数从队列中出队。其中,`isEmpty` 函数用于判断队列是否为空,`isFull` 函数则用于判断队列是否已满。
### 回答3:
循环队列是一种特殊的队列数据结构,可以在固定大小的数组上实现队列的操作。使用C语言可以轻松实现一个循环队列,下面是一个简单的示例代码:
```c
#include <stdio.h>
#define MAX_SIZE 5
// 定义循环队列的结构体
typedef struct {
int data[MAX_SIZE];
int front; // 队头指针
int rear; // 队尾指针
} CircularQueue;
// 初始化循环队列
void initQueue(CircularQueue *queue) {
queue->front = queue->rear = 0;
}
// 入队操作
void enqueue(CircularQueue *queue, int value) {
if ((queue->rear + 1) % MAX_SIZE == queue->front) {
printf("Queue is full\n");
return;
}
queue->data[queue->rear] = value;
queue->rear = (queue->rear + 1) % MAX_SIZE;
printf("Enqueued: %d\n", value);
}
// 出队操作
void dequeue(CircularQueue *queue) {
if (queue->front == queue->rear) {
printf("Queue is empty\n");
return;
}
int value = queue->data[queue->front];
queue->front = (queue->front + 1) % MAX_SIZE;
printf("Dequeued: %d\n", value);
}
// 打印循环队列
void printQueue(CircularQueue *queue) {
if (queue->front == queue->rear) {
printf("Queue is empty\n");
return;
}
printf("Elements in the queue: ");
int i = queue->front;
while (i != queue->rear) {
printf("%d ", queue->data[i]);
i = (i + 1) % MAX_SIZE;
}
printf("\n");
}
int main() {
CircularQueue queue;
initQueue(&queue);
enqueue(&queue, 1);
enqueue(&queue, 2);
enqueue(&queue, 3);
printQueue(&queue);
dequeue(&queue);
printQueue(&queue);
dequeue(&queue);
dequeue(&queue);
dequeue(&queue);
return 0;
}
```
此示例中,我们使用`CircularQueue`结构体表示循环队列,并定义了`initQueue`、`enqueue`、`dequeue`和`printQueue`等函数来对队列进行初始化、入队、出队和打印操作。在`main`函数中我们展示了如何使用循环队列。
阅读全文