「今天是学习C语言第 151 天」
纸上学来终觉浅,绝知此事要躬行。—— 陆游「冬夜读书示子聿」# 循环队列
队列使用顺序存储实现,逻辑上是一个环状空间,可以循环增加和删除数据。
1.使用头指针和尾指针分别指向队头和队尾。
2.头指针始终指向队头,尾指针指向队尾的下一个位置。
3.当头指针等于尾指针时,队列为空。
4.为方便判断队列是否已满,队列中实际少用一个数据空间,这样当队列尾指针的下一个位置等于头指针时,表明队列已满。
# 实现要点
1.循环队列使用顺序存储实现,适用于队列长度已固定。
2.对于队列长度不固定,使用链队列,链队列实现请看前一篇文章。
3.队列中留空一个位置,方便判断队列空满状态。
4.使用指针值求余数的方法,实现“循环”效果。
# 代码运行结果
输入10个数,保存到循环队列,然后输出。
请输入数据总个数:10
请依次输入10个整数:0 1 2 3 4 5 6 7 8 9
循环队列输出结果:0 1 2 3 4 5 6 7 8 9
# 代码实现:循环队列
/* ========================================== 名称 :C语言实现常用数据结构 功能 :循环队列(顺序队列) 环境 :Windows 10 + Dev-C++编译 作者 :一只会C的猫 公众号 :C语言大全(coderpointer) 时间 :2020.8.14 ==========================================*/#include #include // 循环队列最大长度#define MAX_SIZE 100// 循环队列结构typedef struct { // 动态分配的内存 int *base; // 队头位置 int front; // 队尾位置 int rear;}seq_queue;// 创建和初始化队列seq_queue *create_init_queue(){ // 创建队列结构 seq_queue *q = (seq_queue *)malloc(sizeof(seq_queue)); if(q == NULL) return NULL; // 动态分配队列存储空间 q->base = (int *)malloc(MAX_SIZE * sizeof(int)); if(q->base == NULL) return NULL; // 空队列,头尾指针相等 q->front = q->rear = 0; return q;}// 入队int en_seq_queue(seq_queue *q, int data){ if(q == NULL) return -1; // 判断队列是否已满 if((q->rear+1) % MAX_SIZE == q->front) return -1; *(q->base + q->rear) = data; q->rear = (q->rear + 1) % MAX_SIZE; return 0;}// 出队int de_seq_queue(seq_queue *q, int *data){ if(q == NULL || data == NULL) return -1; // 判断队列是否为空 if(q->rear == q->front) return -1; *data = *(q->base + q->front); q->front = (q->front + 1) % MAX_SIZE; return 0; }// 查看队列所有元素// 只要调用出队操作即可 void print_queue(seq_queue *q){ if(q != NULL) { int t; while(de_seq_queue(q, &t) != -1) printf("%d ", t); printf("\n"); }} // 销毁和释放void free_queue(seq_queue *q){ if(q != NULL) { free(q->base); free(q); }}int main(void){ // 创建队列保存数据 seq_queue *q = create_init_queue(); int n,d; printf("请输入数据总个数:"); scanf("%d", &n); printf("请依次输入%d个整数:", n); int i; for(i=0; i { scanf("%d", &d); en_seq_queue(q, d); } printf("循环队列输出结果:"); print_queue(q); // 释放内存空间 free_queue(q); return 0;}
---------- End ----------
往期精彩推荐:
一万分钟C语言学习计划:2020开篇
C语言内存管理的两种方式
C89标准库功能简介
C语言链接与存储类型
C语言标准输入输出
C语言入门基本语法
更多请点击公众号历史文章...
「喜欢C请赏个 赞 点击右下角 在看」