#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MaxSize 5typedef struct{     //与第一种循环列表的实现唯一区别是rear指针指向当前队尾元素 而前者指向当前队尾元素的下一位置int data[MaxSize];//所以此时在判空 判满 计算队列长度的语句上有所区别,如下所示int front,rear;   //          第一种rear                        第二种rear//判空:    Q.rear==Q.front                   (Q.rear+1)%MaxSize==Q.front
}SqQueue;            //判满:   (Q.rear+1)%MaxSize==Q.front        (Q.rear+2)%MaxSize==Q.front//长度:   (Q.rear-Q.front+MaxSize)%MaxSize   (Q.rear-Q.front+1-MaxSize)%MaxSize//Note:    此时如果在C语言中各自单独实现上述三种操作不需要使用SqQueue类型指针 所以使用"Q.成分"的写法//         同时这种实现方式也需要牺牲一个存储单元int IniteQueue(SqQueue *Q){Q->front=0;Q->rear=MaxSize-1;printf("该循环队列已完成初始化\n\n");return 1;}int isEmpty(SqQueue Q){if((Q.rear+1)%MaxSize==Q.front)return 1;elsereturn 0;
}int length(SqQueue Q){return((Q.rear-Q.front+MaxSize+1)%MaxSize);}int EnQueue(SqQueue *Q,int e){if((Q->rear+2)%MaxSize==Q->front){printf("该循环队列已满 本次入队操作非法\n\n");return 0;}Q->rear=(Q->rear+1)%MaxSize;Q->data[Q->rear]=e;printf("本次入队元素:%d\n\n",e);return 1;}int DeQueue(SqQueue *Q,int *e){if(isEmpty(*Q)){printf("该循环队列为空 本次出队操作非法\n\n");return 0;}*e=Q->data[Q->front];Q->front=(Q->front+1)%MaxSize;printf("本次出队元素:%d\n\n",*e);return 0;}int GetHead(SqQueue Q){if(isEmpty(Q)){printf("该循环队列为空 本次查对头元素操作非法\n\n");return 0;}printf("循环队列当前对头元素为:%d\n\n",Q.data[Q.front]);return Q.data[Q.front];
}int main(){SqQueue Q;int discard;IniteQueue(&Q);if(isEmpty(Q))printf("当前该循环队列为空\n\n");elseprintf("当前该循环队列的长度为%d\n\n",length(Q));EnQueue(&Q,9);EnQueue(&Q,5);EnQueue(&Q,2);EnQueue(&Q,7);EnQueue(&Q,9);if(isEmpty(Q))printf("当前该循环队列为空\n\n");elseprintf("当前该循环队列的长度为%d\n\n",length(Q));DeQueue(&Q,&discard);if(isEmpty(Q))printf("当前该循环队列为空\n\n");elseprintf("当前该循环队列的长度为%d\n\n",length(Q));GetHead(Q);return 1;
}

<数据结构> rear指针指向队尾元素 牺牲一个存储位置 的循环队列实现(C语言)(第4种/共6种)相关推荐

  1. 实现一个通用的生产者消费者队列(c语言版本)

    背景:笔者之前一直从事嵌入式音视频相关的开发工作,对于音视频的数据的处理,生产者消费者队列必不可少,而如何实现一个高效稳定的生产者消费者队列则十分重要,不过按照笔者从业的经验,所看到的现象,不容乐观, ...

  2. java 数组 移动位置_将数组元素从一个数组位置移动到另一数组位置

    我很难弄清楚如何移动数组元素. 例如,给出以下内容: var arr = [ 'a', 'b', 'c', 'd', 'e']; 我为什么能写入移动功能'd'之前, 'b' ? 或'a'后'c' ? ...

  3. 数据结构(严蔚敏)之五——循环队列(c语言实现)

    在这里我先强调几点概念: 1.在非空队列中,头指针始终指向队列头元素,而尾指针始终指向队列尾元素的下一个位置. 2.在单队列中我们判断队列是否为空的条件是:Q.front==Q.rear;而在循环队列 ...

  4. c++数据结构中 顺序队列的队首队尾_yiduobo的每日leetcode 622.设计循环队列

    祖传的手艺不想丢了,所以按顺序写一个leetcode的题解.计划每日两题,争取不卡题吧. 622.设计循环队列https://leetcode-cn.com/problems/design-circu ...

  5. 【C语言】一个好用的循环队列与使用示例(以EC200/600为例的AT框架)

    目录 1.前言 2.结论 3.循环队列 3.1写队列到队列头 3.2从尾部读读队列 3.3获取当前队列内数据数量 3.4清空队列 3.5两个重要结构体 4.效果与示例 4.1三个读队列线程 4.2 A ...

  6. 《大话数据结构》3、4、5线性表、栈与队列、串

    第3章线性表 41 线性表:零个或多个数据元素的有限序列. 3.1开场白 42 门外家长都挤在大门口与门里的小孩子的井然有序,形成了鲜明对比.哎,有时大人的所作所为,其实还不如孩子. 3.2线性表的定 ...

  7. 数据结构 队列(顺序队列 循环队列 链队列)

    目录 一.引入 二.队列的定义 三.队列的抽象数据类型 四.队列的存储方式 五.队列的顺序存储(不太常用 后面5.4会给出原因) 5.1顺序存储队列的基本知识点 5.2队列的顺序存储描述 5.3顺序存 ...

  8. 栈顶指针和队尾指针指向当前位置和指向下一个位置的区别?——轻松搞懂栈和队列指针的指向问题

    我们先看一下队列的队尾指针指向队尾元素的当前位置的入队操作: 可以看到,当队尾指针指向的是队尾元素时,我想加入一个新的元素,这时直接放在队尾指向的位置是不可以的,因为这个位置已经有元素了,所以先要对队 ...

  9. 队列练习之Example005-Q 是一个队列,S 是一个空栈,实现将队列中的元素逆置的算法

    Example005 题目 Q 是一个队列,S 是一个空栈,实现将队列中的元素逆置的算法. 分析 主要考查对队列和栈的特性与操作.由于对队列的一系列操作不可能将其中的元素全部逆置,而栈可以将入栈的元素 ...

  10. 【数据结构】队列-顺序队列、循环队列、链队、双端队列

    定义 队列是只允许在一端进行插入,而在另一端进行删除的线性表. 队头(Front):允许删除的一端,又称为队首. 队尾(Rear): 允许插入的一端. 先进入队列的元素必然先离开队列,即先进先出(Fi ...

最新文章

  1. 待解决的问题--用DOS命令删除远程主机系统文件的方法
  2. 用c语言实现去bmp图片的背景,菲律宾博牛网-官方网站
  3. Python基础语法精心总结!看完都知道的可以往下继续学习了
  4. 【译】On Path Independence
  5. java spring 拦截器_Spring MVC拦截器(Interceptor)的配置及使用
  6. k-substrings(CF961F)
  7. 阿里云自带的mysql_阿里云Centos使用自带mysql
  8. JSP——九大内置对象和其四大作用域
  9. leetcode之回文链表
  10. DIY一款600元成本的电路板热成像故障分析仪
  11. SharePoint使用CamlQuery查询人员和组
  12. 多目标优化问题和遗传算法学习笔记
  13. java16 新特性
  14. 今天给大家推荐一个深挖国内外前端新领域的前端社区
  15. 微信小程序如何修改小程序名称
  16. 为什么日本的网页设计风格还停留在90年代?
  17. 基于Java语言在窗体上实现飞机大战小游戏
  18. 科普|汽车毫米波雷达的规定和标准 微功率短距离无线电发射SRRC认证
  19. 一元二次方程通解方程c语言编程,一元二次方程求解程序完整代码
  20. JVM(运行时数据区结构)详解一

热门文章

  1. Excel中Mac和Windows对绝对和相对引用的快速切换方式
  2. 红楼梦——诗词鉴赏之芙蓉女儿诔
  3. 2022-01-28 Android app 背景图首尾相接滚动效果,ImageView 滚动显示效果
  4. java版微信调小i机器人接口说明书_java版微信调用小i机器人
  5. 2.4 设置工作表的背景图片 [原创Excel教程]
  6. beyond compare this license key has been revoked
  7. mocha测试框架使用
  8. APView500电能质量在线监测装置 谐波分析 电压不平衡
  9. yolo数据集标注软件安装+使用流程
  10. 计算几何基础--线段的性质