如何用简单的c语言实现一个顺序存储结构的队列,入队(Enqueue)和出队(Dequeue)操作?
时间: 2024-10-15 20:21:21 浏览: 49
顺序存储和链式存储的泛型队列_C语言项目
在C语言中,可以使用数组来实现一个基本的顺序存储结构的队列。这里是一个简化的例子,包含了队列的创建、入队(Enqueue)和出队(Dequeue)操作:
```c
#include <stdio.h>
#define MAX_SIZE 10 // 队列最大容量
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->front == 0 && q->rear == MAX_SIZE - 1) || (q->front == q->rear));
}
// 入队操作(Enqueue)
void enqueue(Queue* q, int value) {
if (isQueueFull(q)) {
printf("Error: Queue is full.\n");
return;
}
if (isQueueEmpty(q)) {
q->front = 0;
q->rear = 0;
} else {
q->rear = (q->rear + 1) % MAX_SIZE; // 循环数组索引
}
q->data[q->rear] = value;
printf("Enqueued: %d\n", value);
}
// 出队操作(Dequeue)
int dequeue(Queue* q) {
if (isQueueEmpty(q)) {
printf("Error: Queue is empty.\n");
return -1;
}
int value = q->data[q->front];
if (q->front == q->rear) { // 如果队列只剩下一个元素
q->front = -1; // 更新队头指针
q->rear = -1;
} else {
q->front = (q->front + 1) % MAX_SIZE; // 循环数组索引
}
printf("Dequeued: %d\n", value);
return value;
}
// 测试示例
int main() {
Queue queue;
initQueue(&queue);
enqueue(&queue, 1);
enqueue(&queue, 2);
enqueue(&queue, 3);
dequeue(&queue);
dequeue(&queue);
return 0;
}
```
这个程序首先定义了一个队列结构体,包含一个整型数组用于存储数据,以及两个指针表示队头和队尾。然后实现了初始化、判断队列状态、入队和出队的基本操作。
阅读全文