<数据结构> rear指针指向队尾元素 牺牲一个存储位置 的循环队列实现(C语言)(第4种/共6种)
#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种)相关推荐
- 实现一个通用的生产者消费者队列(c语言版本)
背景:笔者之前一直从事嵌入式音视频相关的开发工作,对于音视频的数据的处理,生产者消费者队列必不可少,而如何实现一个高效稳定的生产者消费者队列则十分重要,不过按照笔者从业的经验,所看到的现象,不容乐观, ...
- java 数组 移动位置_将数组元素从一个数组位置移动到另一数组位置
我很难弄清楚如何移动数组元素. 例如,给出以下内容: var arr = [ 'a', 'b', 'c', 'd', 'e']; 我为什么能写入移动功能'd'之前, 'b' ? 或'a'后'c' ? ...
- 数据结构(严蔚敏)之五——循环队列(c语言实现)
在这里我先强调几点概念: 1.在非空队列中,头指针始终指向队列头元素,而尾指针始终指向队列尾元素的下一个位置. 2.在单队列中我们判断队列是否为空的条件是:Q.front==Q.rear;而在循环队列 ...
- c++数据结构中 顺序队列的队首队尾_yiduobo的每日leetcode 622.设计循环队列
祖传的手艺不想丢了,所以按顺序写一个leetcode的题解.计划每日两题,争取不卡题吧. 622.设计循环队列https://leetcode-cn.com/problems/design-circu ...
- 【C语言】一个好用的循环队列与使用示例(以EC200/600为例的AT框架)
目录 1.前言 2.结论 3.循环队列 3.1写队列到队列头 3.2从尾部读读队列 3.3获取当前队列内数据数量 3.4清空队列 3.5两个重要结构体 4.效果与示例 4.1三个读队列线程 4.2 A ...
- 《大话数据结构》3、4、5线性表、栈与队列、串
第3章线性表 41 线性表:零个或多个数据元素的有限序列. 3.1开场白 42 门外家长都挤在大门口与门里的小孩子的井然有序,形成了鲜明对比.哎,有时大人的所作所为,其实还不如孩子. 3.2线性表的定 ...
- 数据结构 队列(顺序队列 循环队列 链队列)
目录 一.引入 二.队列的定义 三.队列的抽象数据类型 四.队列的存储方式 五.队列的顺序存储(不太常用 后面5.4会给出原因) 5.1顺序存储队列的基本知识点 5.2队列的顺序存储描述 5.3顺序存 ...
- 栈顶指针和队尾指针指向当前位置和指向下一个位置的区别?——轻松搞懂栈和队列指针的指向问题
我们先看一下队列的队尾指针指向队尾元素的当前位置的入队操作: 可以看到,当队尾指针指向的是队尾元素时,我想加入一个新的元素,这时直接放在队尾指向的位置是不可以的,因为这个位置已经有元素了,所以先要对队 ...
- 队列练习之Example005-Q 是一个队列,S 是一个空栈,实现将队列中的元素逆置的算法
Example005 题目 Q 是一个队列,S 是一个空栈,实现将队列中的元素逆置的算法. 分析 主要考查对队列和栈的特性与操作.由于对队列的一系列操作不可能将其中的元素全部逆置,而栈可以将入栈的元素 ...
- 【数据结构】队列-顺序队列、循环队列、链队、双端队列
定义 队列是只允许在一端进行插入,而在另一端进行删除的线性表. 队头(Front):允许删除的一端,又称为队首. 队尾(Rear): 允许插入的一端. 先进入队列的元素必然先离开队列,即先进先出(Fi ...
最新文章
- 待解决的问题--用DOS命令删除远程主机系统文件的方法
- 用c语言实现去bmp图片的背景,菲律宾博牛网-官方网站
- Python基础语法精心总结!看完都知道的可以往下继续学习了
- 【译】On Path Independence
- java spring 拦截器_Spring MVC拦截器(Interceptor)的配置及使用
- k-substrings(CF961F)
- 阿里云自带的mysql_阿里云Centos使用自带mysql
- JSP——九大内置对象和其四大作用域
- leetcode之回文链表
- DIY一款600元成本的电路板热成像故障分析仪
- SharePoint使用CamlQuery查询人员和组
- 多目标优化问题和遗传算法学习笔记
- java16 新特性
- 今天给大家推荐一个深挖国内外前端新领域的前端社区
- 微信小程序如何修改小程序名称
- 为什么日本的网页设计风格还停留在90年代?
- 基于Java语言在窗体上实现飞机大战小游戏
- 科普|汽车毫米波雷达的规定和标准 微功率短距离无线电发射SRRC认证
- 一元二次方程通解方程c语言编程,一元二次方程求解程序完整代码
- JVM(运行时数据区结构)详解一
热门文章
- Excel中Mac和Windows对绝对和相对引用的快速切换方式
- 红楼梦——诗词鉴赏之芙蓉女儿诔
- 2022-01-28 Android app 背景图首尾相接滚动效果,ImageView 滚动显示效果
- java版微信调小i机器人接口说明书_java版微信调用小i机器人
- 2.4 设置工作表的背景图片 [原创Excel教程]
- beyond compare this license key has been revoked
- mocha测试框架使用
- APView500电能质量在线监测装置 谐波分析 电压不平衡
- yolo数据集标注软件安装+使用流程
- 计算几何基础--线段的性质