C语言实现队列的示例详解
简介
队列是一种常用的数据结构,类似于排队,先进先出。C语言中可以使用结构体、数组、指针等方式来实现队列。本文将介绍如何使用数组实现队列。
实现过程
使用数组实现队列需要定义两个指针:一个指向队列头,一个指向队列尾。
1. 定义队列结构体
结构体定义如下,其中front
为队列头指针,rear
为队列尾指针,maxSize
为队列容量,arr
为存储数据的数组。
typedef struct {
int front;
int rear;
int maxSize;
int *arr;
} Queue;
2. 初始化队列
初始化队列需要给front
和rear
赋初始值-1,表示队列为空。maxSize
为队列容量,可以根据需要进行修改。使用动态分配内存来分配arr
数组。
void initQueue(Queue *queue, int maxSize) {
queue->front = -1;
queue->rear = -1;
queue->maxSize = maxSize;
queue->arr = (int*)malloc(maxSize * sizeof(int));
}
3. 判断队列是否为空
当front
和rear
的值相等时,表示队列为空。
int isEmpty(Queue *queue) {
return queue->front == queue->rear;
}
4. 判断队列是否已满
当rear
的值等于maxSize - 1
时,表示队列已满。
int isFull(Queue *queue) {
return queue->rear == queue->maxSize - 1;
}
5. 入队
当队列未满时,将数据添加到队列尾部。
void enqueue(Queue *queue, int data) {
if (isFull(queue)) {
printf("Queue is full, cannot enqueue!\n");
return;
}
queue->rear++;
queue->arr[queue->rear] = data;
}
6. 出队
当队列非空时,从队列头部取出数据。
int dequeue(Queue *queue) {
if (isEmpty(queue)) {
printf("Queue is empty, cannot dequeue!\n");
return -1;
}
queue->front++;
return queue->arr[queue->front];
}
7. 查看队头元素
查看队头元素不会改变队列的状态,即不会删除元素。
int peek(Queue *queue) {
if (isEmpty(queue)) {
printf("Queue is empty, no element to peek!\n");
return -1;
}
return queue->arr[queue->front + 1];
}
8. 销毁队列
使用完队列后,需将分配的内存释放。
void destroyQueue(Queue *queue) {
free(queue->arr);
queue->arr = NULL;
queue->front = -1;
queue->rear = -1;
queue->maxSize = 0;
}
示例说明
示例1
int main() {
Queue queue;
initQueue(&queue, 5);
enqueue(&queue, 1);
enqueue(&queue, 2);
enqueue(&queue, 3);
enqueue(&queue, 4);
enqueue(&queue, 5);
enqueue(&queue, 6); // 队列已满,无法入队
printf("队头元素:%d\n", peek(&queue)); // 输出队头元素
printf("出队元素:%d\n", dequeue(&queue)); // 出队
printf("队头元素:%d\n", peek(&queue));
destroyQueue(&queue);
return 0;
}
输出结果:
Queue is full, cannot enqueue!
队头元素:1
出队元素:1
队头元素:2
示例2
int main() {
Queue queue;
initQueue(&queue, 5);
printf("队列是否为空:%d\n", isEmpty(&queue)); // 队列为空
enqueue(&queue, 1);
enqueue(&queue, 2);
printf("队列是否为空:%d\n", isEmpty(&queue)); // 队列非空
printf("队头元素:%d\n", peek(&queue));
printf("出队元素:%d\n", dequeue(&queue));
printf("队头元素:%d\n", peek(&queue));
printf("出队元素:%d\n", dequeue(&queue));
printf("队列是否为空:%d\n", isEmpty(&queue)); // 队列为空
destroyQueue(&queue);
return 0;
}
输出结果:
队列是否为空:1
队列是否为空:0
队头元素:1
出队元素:1
队头元素:2
出队元素:2
队列是否为空:1
总结
以上是使用数组实现队列的详细攻略。队列作为一种基本的数据结构,在算法和程序设计中使用广泛,掌握如何实现队列对于提高编程能力非常有帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现队列的示例详解 - Python技术站