【数据结构】顺序循环队列及其实现(C语言)
给定一个大小为MAXSIZE的数组储存一个队列,经过若干次的插入和删除以后,当队尾指针 rear = MAXSIZE 时,呈现队列满的状态,而事实上数组的前部可能还有空闲的位置。为了有效地利用空间,引入循环队列(环状)。
在循环队列中,如果队列中最后一个结点存放在数组的最后一个元素位置,而数组前面有空位置的话,则下次在进行插入操作时,将插入到数组最前面那个元素的位置。其他情况下的插入操作和一般的队列的插入操作一样。
如果再插入一个新的结点,则数组空间将全部被占用,队列已满,且rear == front。
若删除一个结点,队列成为空队列,也有 rear == front。
如何区别?
方法一:
设置一个标志。由于rear+1使rear==front -> 满队列
由于 front +1 使rear == front -> 空队列
方法二:
牺牲一个数组元素的空间,即若数组大小为MAXSIZE,该数组所表示的循环队列最多允许储存MAXSIZE-1个结点。
循环队列满的条件:(rear+1)%MAXSIZE == front
循环队列空的条件: rear == front
#include <stdio.h>
#include <stdlib.h>
const int MAXSIZE = 5;
typedef struct
{int a[MAXSIZE];int front;int rear;
}sequence_queue;void init(sequence_queue *sq)
{sq->front=0;sq->rear=0;
}void insert(sequence_queue *sq,int x)
{if((sq->rear+1)%MAXSIZE==sq->front){printf("full\n");return ;}sq->a[sq->rear]=x;sq->rear=(sq->rear+1)%MAXSIZE;printf("front = %d\n",sq->front);printf("rear = %d\n",sq->rear);
}void del(sequence_queue *sq)
{if(sq->front==sq->rear){printf("none\n");return ;}sq->front=(sq->front+1)%MAXSIZE;printf("front = %d\n",sq->front);printf("rear = %d\n",sq->rear);
}void display(sequence_queue sq)
{int i=sq.front;if(sq.front==sq.rear){printf("none\n");return ;}while(i!=sq.rear){printf("%5d",sq.a[i]);i++;i=i%MAXSIZE;}printf("\n");
}int main ()
{sequence_queue sq;int x,a;init(&sq);while(1){scanf("%d",&x);switch(x){case 1:{scanf("%d",&a);insert(&sq,a);display(sq);printf("\n");break;}case 2:{del(&sq);display(sq);printf("\n");break;}default:{printf("只能输入1或者2\n");break;}}}return 0;
}
相关文章:

C++中Reference与指针(Pointer)的使用对比
了解引用reference与指针pointer到底有什么不同可以帮助你决定什么时候该用reference,什么时候该用pointer。在C 中,reference在很多方面与指针(pointer)具有同样的能力。虽然多数C程序员对于何时使用reference何时使用pointer 都会有一些直觉࿰…
云南实现手机自主补(换)领居民身份证
图为云南首位通过手机自主补领居民身份证的申领人付宏强。 缪超 摄 中新网昆明1月22日电 (缪超)春节临近,云南实现手机自主补(换)领居民身份证,首张通过手机补办的居民身份证于22日在武定县公安局狮山派出所成功申领。 据悉,为方便民众因遗失…
NDK JNI 安装与配置(一)(UBUNTU16.04 )
1、下载Android NDK自解压包,官方地址:https://developer.android.com/ndk/downloads/index.html#download下载:$ wget -c http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin2、解压,将Android NDK压缩包解压到…

【数据结构】顺序表的应用(4)(C语言)
【数据结构】顺序表的应用(1)(C语言) 【数据结构】顺序表的应用(2)(C语言) 【数据结构】顺序表的应用(3)(C语言) 设计一个算法&…

Java泛型:泛型类、泛型接口和泛型方法
2019独角兽企业重金招聘Python工程师标准>>> 根据《Java编程思想 (第4版)》中的描述,泛型出现的动机在于:有许多原因促成了泛型的出现,而最引人注意的一个原因,就是为了创建容器类。 泛型类 容器…

POJ 2456 Aggressive cows(二分答案)
Aggressive cowsTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 22674 Accepted: 10636Description Farmer John has built a new long barn, with N (2 < N < 100,000) stalls. The stalls are located along a straight line at positions x1,...,xN (0…

JMeter打开脚本报错处理方法
今天电脑重装了系统,安装好jmeter后打开以前写的脚本,总是报错如下图,研究了半天也没搞明白。 后来一个群里的人员提醒才想起来,是脚本的问题,为啥捏? 因为之前写的脚本用了一些监听,而这些监听…

Android开发中libs包下面的mips、armeabi、armeabi-v7a和x86
简介 在Android日常的开发过程中有的项目需要引入第三方的库,有时候大家可能会在libs文件夹下看到 mips、armeabi、armeabi-v7a和x86这四个文件夹。那么这三个文件夹下面的包是干什么用的? 这三个包下面存放的用C编译的本地库文件(各类『.…

【数据结构】判断一个单链表中各结点的值是否有序
count记录的是单链表的总长 count1记录的是升序的结点的个数 count2记录的是降序的结点的个数 如果count1或者count2等于count,那么就说明该序列是升序或者降序的。 稍加改进可以在准确判断是升序还是降序还是无序 (个人认为链表中只有一个结点或者…

MSSQL-最佳实践-行级别安全解决方案
title: MSSQL-最佳实践-行级别安全解决方案 author: 风移 摘要 在SQL Server安全系列专题月报分享中,我们已经分享了:如何使用对称密钥实现SQL Server列加密技术、使用非对称密钥加密方式实现SQL Server列加密、使用混合密钥实现SQL Server列加密技术和列…
浮点数运算原理详解
导读: 浮点数运算是一个非常有技术含量的话题,不太容易掌握。许多程序员都不清楚使用操作符比较float/double类型的话到底出现什么问题。 许多人使用float/double进行货币计算时经常会犯错。这篇文章是这一系列中的精华,所有的软件开发人员都…

vCenter的安装
转载于:https://blog.51cto.com/yht1990/1857211

【数据结构】双链表的应用
1、设计一个算法,在双链表中值为y的结点前面插入一个值为x的新结点,即使得值为x的新结点成为值为y的结点的前驱结点。 2、设计一个算法,将一个双链表改建成一个循环双链表。 #include <stdio.h> #include <stdlib.h>typedef st…

Eclipse for Tricore 的安装方法
1.安装JDK32位版 2.安装Eclipse for Tricore 32位版(应该也只有32位的) 3.OK(如果打开Tricore提示找不到JDK的话,在网上搜索如何配置JDK,修改环境变量) 注意:Eclipse的位数必须和JDK位数相同 转…
NDK JNI方式读写Android系统的demo(二)
NDK & JNI(方式读写Android系统的Demo) 大家都知道Android系统是一种基于Linux的自由及开放源码的操作系统,所以读写GPIO也可以直接用Linux那一套export/unexport方法,本文将介…

【数据结构】顺序串的插入算法,删除算法,连接运算,顺序串求子串算法
主函数自行添加 头文件 宏定义 #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 串的顺序存储 typedef struct {char str[MAXSIZE];int length; }seqstring; 顺序串的创建 void creat(seqstring *S) {char c;int i0;while((cgetchar())!\n){S-…

log4j日志记录级别是如何工作?
级别p的级别使用q,在记录日志请求时,如果p>q启用。这条规则是log4j的核心。它假设级别是有序的。对于标准级别它们关系如下:ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF。 举个栗子 下面的栗子明确指出如何可以过…

Kafka背后公司获1.25亿融资,估值超25亿美元
北京时间1月24日,开源Apache Kafka项目背后的公司Confluent在官方博客宣布进行了D轮融资,价值约为1.25亿美元,公司总估值高达25亿美元。 Confluent公司CEO Jay Kreps在博客中表示:我很高兴地宣布,Confluent已经募集了1…

深入学习jQuery描述文本内容的3个方法
前面的话 在javascript中,描述元素内容有5个属性,分别是innerHTML、outerHTML、innerText、outerText和textContent。这5个属性各自有各自的功能,且兼容性不同。jQuery针对这样的处理提供了3个便捷的方法,分别是:html(…
NDK JNI Android Studio开发与调试DEMO(三)(生成 .so 文件)
Android Studio NDK 开发与调试(生成 .so 文件) 温馨提示:如果你的 Android Studio 版本在 3.0以上 , 建议你用 cMake /ndk-build 的新姿势进行 NDK 开发 : https://developer.android.google.cn/index.html AS与g&am…
字符串的模式匹配 (朴素模式匹配算法 ,KMP算法)
字符串的模式匹配 寻找字符串p在字符串t中首次出现的起始位置 字符串的顺序存储 typedef struct {char str[MAXSIZE];int length; }seqstring; 朴素的模式匹配算法 基本思想:用p中的每一个字符去与t中的字符一一比较。 模式p 正文 t 如果匹配成功,…

框架页面jquery装载
转载于:https://www.cnblogs.com/moonsoft/p/10313309.html

NDKJNI Android 相关资料整理(四)
JNI/NDK开发指南 JNI/NDK开发指南(一)—— JNI开发流程及HelloWorld http://blog.csdn.net/xyang81/article/details/41777471 JNI/NDK开发指南(二)——JVM查找java native方法的规则 http://blog.csdn.net/xyang81/article/det…
【ACM】与全排列相关的STL函数 prev_permutation next_permutation
排列 与 全排列 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。 当mn时所有的排列情况叫全排列。如果这组数有n个,那么全排列数为n!个。 对于全排列的求解…

虚拟机无法使用网卡桥接模式
重装了好几遍操作系统,换了两个虚拟机,差点怀疑人生…… 最终的原因竟然是win10!!! 1.执行WINR 输入services.msc,打开服务管理器(回车)。 2.找到Device Install Service服务 启动此…

Azure自动化部署运维浅谈
本次来谈一谈如何在Azure中实现一些简单的自动化运维的需求,一般来讲自动化运维我们通过很多第三方的工具平台实现,比较流行的目前有很多,比如老牌的chef, puppet,新兴的PowerShell DSC, ansible。这些应该都是耳熟能详的了。那么在Azure平台…
NDK/JNI demo ( 五 ) ORB_SLAM2在Android上的移植过程
Android平台搭建和NDK环境配置 Android移植基础 NDK是集成的Android中调用C代码的工具包,核心是JNI(Java Native Interface)技术,具体这里略过不表。只说说NDK开发的基本步骤: 1. 编写Java代码:在Java中定义…

[Nancy On .Net Core Docker] 轻量级的web框架
.net core现在已经有了大的发展,虽然笔者现在已经从事python开发,但是一直在关注.net的发展,在逛博客园的时候,发现有大家都会提到Nancy这个框架,在简单的使用之后,发现竟然是如此的简单而优雅 public clas…

【算法】【ACM】深入理解Dijkstra算法(单源最短路径算法)
Dijkstra算法是用来求解从某个源点到其他各顶点的最短路径(单源最短路径)。 下面的Dijkstra算法的讲解都是基于这个有向图,在遇到其他问题可以类比。 算法的基本思想: 把图中的定点分成两组,第一组包括已确定最短路径…

智能POS常见问题整理
智能POS预警值为小于所设的数量,H5就会变为锁定状态 智能POS查看数据库方法: 商米D1:设置-存储设备和USB-内部存储设备-浏览-winboxcash tablet.db为智能POS数据库 Winbox文件夹内,为相应logcat文件,应用出现问题时&am…