前言
- 本节主要进行C语言数据结构循环队列的学习。

“性痴则志凝,故书痴者文必工,艺痴者技必良。” ——《聊斋志异·阿宝》
1.队列的介绍
- 循环队列是一种顺序表示的队列,用一组地址连续的存储单元依次存放从队头到队尾的元素。
- 由于队列中队头和队尾的位置是动态变化的,要附设两个指针 front 和 rear ,分别指示队头元素和队尾元素在数组中的位置。
- 初始化队列时,令 front = rear = 0。

- 此节,不使用链表,直接使用数组实现队列。
2.结构体指针实现队列
- 实现内容与前章相同,1.初始化队列;2.入队;3.出队;4.遍历队列。
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define MAXSIZE 5
//因为如果存满MAXSIZE个数,而faont与rear相等时,无法区分队列是满还是空;因为使用牺牲rear指向的一个元素,如MAXSIZE==5,则只存4个:当faont与rear+1相等时即认为满,不再往rear里写入;faont与rear相等时为空
typedef struct Node//定义数据结构
{
int faont;
int rear;
int data[MAXSIZE];
}Node;
Node* initList()//初始化头节点
{
Node* Queue=(Node*)malloc(sizeof(Node));
Queue->faont=Queue->rear=0;
return Queue;
}
bool isFull(Node* Queue)//检查队列是否为满
{
if((Queue->rear+1)%MAXSIZE==Queue->faont)//加满5个则重新计数
return 1;
else
return 0;
}
bool isEmpty(Node* Queue)//检查队列是否为空
{
if(Queue->rear==Queue->faont)
return 1;
else
return 0;
}
bool enQueue(Node* Queue,int data)//入队
{
if(isFull(Queue))//入队前判是否为满
return 0;
else
{
Queue->data[Queue->rear]=data;
Queue->rear=(Queue->rear+1)%MAXSIZE;
return 1;
}
}
int deQueue(Node* Queue)//出队
{
if(isEmpty(Queue))//出队前判是否为空
return 0;
else
{
int data=Queue->data[Queue->faont];
Queue->faont=(Queue->faont+1)%MAXSIZE;
return data;
}
}
void printList(Node* Queue)//遍历操作
{
int count=(Queue->rear - Queue->faont+MAXSIZE)%MAXSIZE;
int index=Queue->faont;
for (int i = 0; i < count; i++)
{
printf("%d->",Queue->data[index]);
index=(index+1)%MAXSIZE;
}
printf("NULL\n");
}
int main()
{
Node* Queue= initList();//初始化头节点,创捷队列
printf("%d\n",deQueue(Queue));
printList(Queue);
enQueue(Queue,1);
printList(Queue);
enQueue(Queue,2);
printList(Queue);
enQueue(Queue,3);
printList(Queue);
enQueue(Queue,4);
printList(Queue);
enQueue(Queue,5);
printList(Queue);
printf("%d\n",deQueue(Queue));
printList(Queue);
printf("%d\n",deQueue(Queue));
printList(Queue);
printf("%d\n",deQueue(Queue));
printList(Queue);
printf("%d\n",deQueue(Queue));
printList(Queue);
printf("%d\n",deQueue(Queue));
printList(Queue);
printf("%d\n",deQueue(Queue));
printList(Queue);
system("pause");
}

参考资料:
链接: UP从0到1带你手撕数据结构全集(C语言版)
本文详细介绍了如何使用C语言通过结构体指针实现循环队列,包括队列的初始化、入队、出队操作,以及如何判断队列状态并进行遍历。通过实例演示了如何创建和操作循环队列,适合初学者理解数据结构基本概念。
1125

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



