队列是一种重要的先进先出数据结构,在操作系统、算法、网络通信等领域广泛应用。本文将详细介绍如何使用C语言的数组来实现队列,包括完整的代码实现、详细的图文解释和实用的测试用例!
队列是一种线性数据结构,遵循先进先出原则:
- 入队(Enqueue):元素从队尾加入;
- 出队(Dequeue):元素从队首移除。
一、数据结构定义
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 5
int queue[MaxSize];
int front = -1; // 队首指针,指向队首元素的前一个位置
int rear = -1; // 队尾指针,指向队尾元素的位置
1. 初始空队列

2. 指针移动规则
front:总是指向"队首元素的前一个位置";
rear:总是指向"队尾元素的位置"。

二、关键操作详细
1. 入队操作(add_queue)
void add_queue(int value) {
if (rear >= MaxSize - 1) {
printf("队列已满,不能入队\n");
} else {
rear = rear + 1; // 队尾指针后移
queue[rear] = value; // 存入新元素
printf("入队成功:%d\n", value);
}
}
2. 出队操作(del_queue)
int del_queue() {
int tempvalue;
if (front == rear) {
printf("队列为空,不能出队\n");
tempvalue = -1;
} else {
front = front + 1; // 队首指针后移
tempvalue = queue[front]; // 取出队首元素
queue[front] = 0; // 可选:清空位置
printf("出队成功:%d\n", tempvalue);
}
return tempvalue;
}
3. 获取队首元素(get_front)
返回:队首元素值,如果队列为空返回-1。
int get_front() {
if (front == rear) {
printf("队列为空\n");
return -1;
}
return queue[front + 1];
}
4. 获取队尾元素(get_rear)
返回:队尾元素值,如果队列为空返回-1。
int get_rear() {
if (front == rear) {
printf("队列为空\n");
return -1;
}
return queue[rear];
}
5. 打印元素(print_queue)
void print_queue() {
if (front == rear) {
printf("队列为空\n");
return;
}
printf("队列元素:");
for (int i = front + 1; i <= rear; i++) {
printf("%d ", queue[i]);
}
printf("\n");
}
6. 打印队列完整状态,包括指针位置(print_queue_full)
void print_queue_full() {
printf("队列数组:");
for (int i = 0; i < MaxSize; i++) {
printf("%d ", queue[i]);
}
printf("\n");
printf("front指针:%d, rear指针:%d\n", front, rear);
}
7.主函数main
int main() {
int a, b, c;
a = 10;
b = 20;
c = 30;
printf("=== 数组实现队列测试 ===\n");
// 测试1:基本入队
printf("1. 测试基本入队操作:\n");
add_queue(a);
add_queue(b);
add_queue(c);
print_queue();
print_queue_full();
// 测试2:获取元素
printf("\n2. 测试获取元素:\n");
printf("队首元素:%d\n", get_front());
printf("队尾元素:%d\n", get_rear());
// 测试3:出队操作
printf("\n3. 测试出队操作:\n");
del_queue();
print_queue();
print_queue_full();
// 测试4:继续入队测试队列满
printf("\n4. 测试队列满:\n");
add_queue(40); // 成功入队
add_queue(50); // 成功入队
add_queue(60); // 应该提示队列已满
print_queue();
print_queue_full();
// 测试5:清空队列
printf("\n5. 清空队列:\n");
while (front != rear) {
del_queue();
}
print_queue();
print_queue_full();
// 测试6:空队列操作
printf("\n6. 空队列测试:\n");
del_queue(); // 应该提示队列为空
printf("队首元素:%d\n", get_front());
return 0;
}
三、运行结果

4094

被折叠的 条评论
为什么被折叠?



