写出c语言循环队列代码,操作步骤:1.初始化循环队列,2.判断循环队列是否为空,3.入列,4.出列,5.取队首
时间: 2024-10-15 11:05:18 浏览: 30
浅谈Java并发 J.U.C之AQS:CLH同步队列
当然可以。这里是一个简单的 C 语言循环队列的实现示例:
```c
#include <stdio.h>
#define MAX_SIZE 10
typedef struct {
int *data; // 队列元素的存储数组
int front; // 队头指针
int rear; // 队尾指针
} Queue;
// 初始化循环队列
void initQueue(Queue *queue) {
queue->front = -1;
queue->rear = -1;
queue->data = (int*)malloc(MAX_SIZE * sizeof(int));
}
// 判断队列是否为空
int isEmpty(Queue *queue) {
return queue->front == -1 && queue->rear == -1;
}
// 入列(enqueue)
void enqueue(Queue *queue, int value) {
if ((queue->rear + 1) % MAX_SIZE == queue->front) { // 队满
printf("Queue is full.\n");
return;
}
queue->rear = (queue->rear + 1) % MAX_SIZE; // 循环更新队尾
queue->data[queue->rear] = value;
if (queue->front == -1) queue->front = queue->rear; // 队列首次插入时更新front
}
// 出列(dequeue)
int dequeue(Queue *queue) {
if (isEmpty(queue)) {
printf("Queue is empty.\n");
return -1;
}
int value = queue->data[queue->front]; // 取队首元素
queue->front = (queue->front + 1) % MAX_SIZE; // 更新队头
if (queue->front == queue->rear) queue->front = queue->rear = -1; // 清空队列
return value;
}
// 取队首
int getFront(Queue *queue) {
if (isEmpty(queue)) {
printf("Queue is empty.\n");
return -1;
}
return queue->data[queue->front];
}
int main() {
Queue myQueue;
initQueue(&myQueue);
enqueue(&myQueue, 1);
enqueue(&myQueue, 2);
enqueue(&myQueue, 3); // 示例操作
if (getFront(&myQueue) != 1) {
printf("Error getting front element.\n");
return 1;
}
printf("Dequeued: %d\n", dequeue(&myQueue)); // 结果应为1
return 0;
}
```
阅读全文