C语言实现顺序循环队列实例
什么是顺序循环队列?
在计算机科学中,队列(Queue)是一个数据结构,用于存储按顺序排列的元素,具有FIFO(First In First Out)的特点。顺序循环队列是一种基于数组实现的队列,在队列尾部加入元素,在队列头部删除元素。
顺序循环队列的实现
数据结构定义
顺序循环队列的核心是数据结构的定义,它包含以下信息:
- 队列最大长度max_length
- 队头位置head
- 队尾位置tail
- 数据存储data
#define MAX_LENGTH 10
typedef struct {
int max_length;
int head;
int tail;
int data[MAX_LENGTH];
}CircleQueue;
初始化
当创建一个空队列时,必须先将队列的头部和尾部位置都指向0,代表当前队列没有数据。
void init(CircleQueue *queue)
{
queue->max_length = MAX_LENGTH;
queue->head = 0;
queue->tail = 0;
}
入队
当向队列里添加一个元素时,先判断队列是否已满,即队尾位置是否与队列最大长度相等。如果是,说明队列已满,无法添加新元素。否则,将新元素添加到队尾,同时更新队尾位置。
int enqueue(CircleQueue *queue, int value)
{
if (queue->tail == queue->max_length) {
printf("队列已满,无法添加元素\n");
return -1;
}
queue->data[queue->tail] = value;
queue->tail++;
return 0;
}
出队
当从队列中删除一个元素时,先判断队列是否为空,即队头位置是否等于队尾位置。如果是,说明队列为空,没有元素可以被删除。否则,将队头元素删除,同时更新队头位置。
int dequeue(CircleQueue *queue, int *pvalue)
{
if (queue->head == queue->tail) {
printf("队列为空,没有元素可以被删除\n");
return -1;
}
*pvalue = queue->data[queue->head];
queue->head++;
return 0;
}
示例说明
以下是一个使用顺序循环队列实现的队列的示例代码。通过该代码,可以更好地理解上述数据结构定义及入队、出队操作的逻辑。
#include <stdio.h>
#define MAX_LENGTH 10
typedef struct {
int max_length;
int head;
int tail;
int data[MAX_LENGTH];
}CircleQueue;
void init(CircleQueue *queue)
{
queue->max_length = MAX_LENGTH;
queue->head = 0;
queue->tail = 0;
}
int enqueue(CircleQueue *queue, int value)
{
if (queue->tail == queue->max_length) {
printf("队列已满,无法添加元素\n");
return -1;
}
queue->data[queue->tail] = value;
queue->tail++;
return 0;
}
int dequeue(CircleQueue *queue, int *pvalue)
{
if (queue->head == queue->tail) {
printf("队列为空,没有元素可以被删除\n");
return -1;
}
*pvalue = queue->data[queue->head];
queue->head++;
return 0;
}
int main()
{
CircleQueue queue;
init(&queue);
int value, i;
for (i = 0; i < 11; i++) {
if (enqueue(&queue, i) == -1) {
break;
}
}
for (i = 0; i < 11; i++) {
if (dequeue(&queue, &value) == -1) {
break;
}
printf("%d,", value);
}
return 0;
}
程序输出结果如下:
队列已满,无法添加元素
0,1,2,3,4,5,6,7,8,9,
该示例代码中,创建了一个队列,通过for循环往队列中添加了11个元素。当队列已满时,无法继续添加新元素。接着循环从队列中取出元素,并将取出的元素打印到屏幕上。在没有取出所有元素之前,如果队列为空,将停止取出元素。最终,程序输出了10个元素的值。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现顺序循环队列实例 - Python技术站