用C语言的队列写一个加入和离开排队的代码,详细标明注释
时间: 2024-02-27 16:54:56 浏览: 21
好的,以下是用C语言实现队列的加入和离开排队的代码,注释已经详细标明:
```c
#include <stdio.h>
#define MAXSIZE 100 // 定义队列最大长度为100
/* 队列结构体 */
typedef struct {
int data[MAXSIZE]; // 队列数据
int front; // 队列头部指针
int rear; // 队列尾部指针
} Queue;
/* 初始化队列 */
void initQueue(Queue *queue) {
queue->front = queue->rear = 0; // 队列头部和尾部指针初始化为0
}
/* 判断队列是否为空 */
int isEmpty(Queue *queue) {
return queue->front == queue->rear; // 如果队列头部和尾部指针相等,说明队列为空
}
/* 判断队列是否已满 */
int isFull(Queue *queue) {
return (queue->rear + 1) % MAXSIZE == queue->front; // 如果队列尾部指针的下一个位置等于队列头部指针,说明队列已满
}
/* 入队操作 */
int enqueue(Queue *queue, int data) {
if (isFull(queue)) { // 如果队列已满,无法入队
return -1;
}
queue->data[queue->rear] = data; // 将数据存储到队列尾部指针所指向的位置
queue->rear = (queue->rear + 1) % MAXSIZE; // 队列尾部指针向后移动一位,如果超过了队列最大长度,则回到队列头部
return 0;
}
/* 出队操作 */
int dequeue(Queue *queue, int *data) {
if (isEmpty(queue)) { // 如果队列为空,无法出队
return -1;
}
*data = queue->data[queue->front]; // 将队列头部指针所指向的数据存储到data中
queue->front = (queue->front + 1) % MAXSIZE; // 队列头部指针向后移动一位,如果超过了队列最大长度,则回到队列头部
return 0;
}
int main() {
Queue queue;
initQueue(&queue); // 初始化队列
int data;
// 入队操作
enqueue(&queue, 10);
enqueue(&queue, 20);
enqueue(&queue, 30);
// 出队操作
dequeue(&queue, &data);
printf("出队数据:%d\n", data);
dequeue(&queue, &data);
printf("出队数据:%d\n", data);
dequeue(&queue, &data);
printf("出队数据:%d\n", data);
// 再次入队
enqueue(&queue, 40);
enqueue(&queue, 50);
enqueue(&queue, 60);
return 0;
}
```
以上代码实现了一个简单的队列,可以通过 `enqueue` 函数将数据加入队列,通过 `dequeue` 函数将数据从队列中取出。其中,`isEmpty` 和 `isFull` 函数分别用于判断队列是否为空和是否已满。在 `enqueue` 函数中,如果队列已满则返回 -1,否则将数据添加到队列尾部指针所指向的位置,并将队列尾部指针向后移动一位。在 `dequeue` 函数中,如果队列为空则返回 -1,否则将队列头部指针所指向的数据存储到参数 `data` 中,并将队列头部指针向后移动一位。