循环队列及C语言实现一

  循环队列是为了充分利用内存,进行数据操作的一种基本算法。具体实现方式可划分为:链式队列和静态队列,这里所谓的静态是指在一片连续的内存区域进行数据操作。本文只讲述静态队列,也是最简单的实现方式,链式队列以及链表的实现内容请参见我的其它博文。以下静态循环队列简称为循环队列。
  
一、循环队列的特点及要素
<1> 先进先出(FIFO);
<2> 首尾元素 front 和 rear 的数值;
<3> 队列操作: 队列初始化、销毁队列、遍历队列、队列满、队列空、入队列,出队列。
<4> 队列满判断的两种方式:因为需要区分与队列空时 front 与 rear 的位置关系。
方式一:front == rear 并且 flag_full = true;
方式二:front= (rear + 1) % size;

二、具体实现及输出结果见下面程序,因为较为简单,不作注解了。有疑问可以 send comments to me。

#include <stdio.h>
#include <stdlib.h>typedef struct queue{char *buf;int front;int rear;int size;
} Queue, *pQueue;void Init_Queue(Queue *q, int maxsize)
{q->buf = (char *)malloc(sizeof(char) * maxsize);if (q->buf == NULL) {perror("malloc error: ");exit(1);}q->front = 0;q->rear = 0;q->size = maxsize;
}void Destroy_Queue(Queue *q)
{free(q->buf);
}void Traverse_Queue(Queue *q)
{int i = q->front;while (i % q->size != q->rear) {printf("buf[%d]: %d\n", i, q->buf[i]);i++;}
}bool Queue_Empty(Queue *q)
{return (q->front == q->rear);
}bool Queue_Full(Queue *q)
{return (q->front == ((q->rear + 1) % q->size));
}bool EnQueue(Queue *q, char val)
{if (!Queue_Full(q)) {*(q->buf + q->rear) = val;q->rear = (q->rear + 1) % q->size;return true;}printf("Queue Full!\n");return false;
}bool DeQueue(Queue *q, char *val)
{if(!Queue_Empty(q)) {*val = *(q->buf + q->front);q->front = (q->front + 1) % q->size;return true;} printf("Queue Empty!\n");return false;
}void main()
{Queue q;char a;Init_Queue(&q, 6);printf("Input queue elements: \n");while(!Queue_Full(&q)) {scanf("%d", &a);EnQueue(&q, a);}printf("Traverse queue elements: \n");Traverse_Queue(&q);printf("Delete queue elements: \n");while(!Queue_Empty(&q)) {DeQueue(&q, &a);printf("%d\n", a);}Destroy_Queue(&q);
}

程序运行结果:

这里写图片描述
关于循环队列主题的系列文章,可移步至以下链接:
1. 《循环队列及C语言实现<一>》
2. 《循环队列及C语言实现<二>》
3. 《循环队列及C语言实现<三>》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403394.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序自定义导航栏;uni-app微信小程序自定义顶部导航栏;微信小程序顶部导航栏高度;微信小程序左上角胶囊按钮;uni-app微信小程序左上角胶囊设置

本文是自定义微信小程序的顶部导航栏&#xff1b;自定义微信小程序底部导航栏tabBar看另外这篇 文末的两个文件代码可以直接复制使用 自定义导航栏页图 一、场景&#xff1a; 有些时候&#xff0c;微信小程序需要我们在导航栏做更多的操作样式&#xff08;例如高度、颜色、加…

HTML5与HTML4的比较

HHTML5封装一些标签和属性&#xff0c;方便了开发。 1 <form> 2 <p> 3 <label>Username:<input name"search" type"text" id"search" autofocus></label> 4 </p> 5 &l…

[iOS]Unable to run app in Simulator

From: http://blog.csdn.net/snowwind/article/details/41099575 今天在试Admob的时候&#xff0c;发现在simulator上&#xff0c;程序突然不能运行了&#xff0c; 提示 [plain] view plaincopy Unable to run app in Simulator An error was encountered while running (…

mysql的一些常用函数

以下是mysql中的一些函数 一、数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制&#xff08;OCT返回八进制&#xff0c;HEX返回十六进制&#xff09;CEILING(x) 返回大于x的最小整数值EXP(x) 返回值e&#xff08;自然对数的底&#xff09;的x次方FLOOR(x) 返回…

uni-app微信小程序动态样式设置;微信小程序style行内式无效;微信小程序style行内式编译报错;微信小程序:style设置样式

场景&#xff1a;微信小程序设置动态样式&#xff0c;有些时候是需要用到变量来书写的&#xff1b;但是实际使用发现&#xff0c;行内式书写虽然有效&#xff0c;但是会使得微信小程序的编辑失败&#xff1b;故需要使用动态的v-bind来写动态变量行内式样式&#xff08;既使用:s…

循环队列及C语言实现二

在我的上一篇博文中已经讲到循环队列的特点作用以及C语言实现&#xff0c;当然实现和操作的方式比较简单&#xff0c;在实际项目应用中略显粗糙。因此&#xff0c;这一篇提供一个进阶篇的实现与操作接口。具体函数作用可以参见我的注释部分&#xff0c;使用的时候直接把里面的接…

MAC下secureCRT无法保存密码的解决方法

From: http://www.php230.com/securecrt-for-mac-store-password.html 在mac下新安装了secureCRT&#xff0c;取代系统自带的终端工具&#xff0c;主要是为了方便链接服务器。 mac下面的secureCRT默认保存不上密码&#xff0c;我们选择了保存密码后&#xff0c;下次登录还是提…

Intellij idea 快键键

1.快速进入实现类&#xff1a; Command AltB2.全局查找&#xff1a; Shift Shift3.类继承关系&#xff1a; Ctrl H4.在继承层次上跳转则用 Command B / CommandAltB分别对应父类或父方法定义和子类或子方法实现5.查看当前类的所有方法 Command F126.查看类或方法在哪里使用…

微信小程序下拉刷新列表onPullDownRefresh;微信小程序上划加载列表onReachBottom;uni-app微信小程序下拉加载数据;uni-app微信小程序上划页面加载数据

需求&#xff1a;微信小程序列表加载有两种方式&#xff0c;分别是按住页面下拉加载数据数据&#xff08;触发onPullDownRefresh&#xff09;和直接上划滚动页面到底部加载数据&#xff08;触发onReachBottom函数&#xff09;。 本文主要是使用上划滚动页面触底加载数据&#x…

table下面appendChild别忘了tbody

table下面appendChild别忘了tbody

ARP协议在同网段及跨网段下的工作原理

一、ARP在同个网段下的工作原理 首先&#xff0c;每台主机都会在自己的ARP缓冲区中建立一个 ARP列表&#xff0c;以表示IP地址和MAC地址的对应关系。当源主机需要将一个数据包要发送到目的主机时&#xff0c;会首先检查自己 ARP列表中是否存在该 IP地址对应的MAC地址&#xff0…

decode 类似 case when

将查询的结果翻译成其他值,类似 case when to_char(创建时间,mm) 01 then 查询统计的是1月 when to_char(创建时间,mm) 02 then 查询统计的是2月 when to_char(创建时间,mm) 03 then 查询统计的是3月 ....................... select decode( to_char(创建时间,mm) , 01…

如何查看服务器当前的负载信息

From: http://blog.csdn.net/mal327/article/details/7423750 如何查看服务器当前的负载信息http://www.flybaaa.com/help/69_1.html网吧内突然很卡&#xff0c;这个情况我相信大家都有遇见过&#xff0c;但是通过什么方法来排查是否linux服务器的负载过大导致的这个问题呢&am…

前端vue实现图片压缩并且将其转换为jpg格式图片;前端转换图片格式;前端使用js转换图片格式;前端使用canvas将png格式图片转成jpg格式

需求中可能有时需要将png图片转成jpg图片或者格式互转&#xff0c;前端使用js和canvas转换图片的格式&#xff1b; 原理&#xff1a; 是使用FileReader来把文件读入内存&#xff0c;并且读取文件中的数据。 readAsDataURL方法可以在浏览器主线程中异步访问文件系统&#xff0c;…

mysql中创建表时提示 no database selected

用习惯了oracle或者sqlserver的界面形式 当用到mysql时创建表时往往就会忘记添加表空间这个前提。在一个用户下面可建多个表空间使用语句 create database your_database_name;下面讲一下在建表时有两种方法&#xff1a;1、在命令窗口中用命令 use database_name;该命令将会转…

系统中已安装了vmware,请先卸载干净并重启电脑

打开VMware目录&#xff0c;有个卸载的.cmd 以管理员身份运行&#xff0c;成功之后注销一下电脑。进入系统把VM目录删除&#xff0c;重新解压缩或者安装&#xff0c;再以管理员身份运行安装的.cmd&#xff0c;就可以了。

前端读取文件图片信息流;js读取图片不同信息流;js读取图片;前端就js读取二进制数据;前端js读取文件流使用FileReader对象的readAsDataURL方法来读取图像文件;

原文链接 FileReader来把文件读入内存&#xff0c;并且读取文件中的数据。 readAsDataURL方法可以在浏览器主线程中异步访问文件系统&#xff0c;读取文件中的数据&#xff0c;且读取后 result 为 DataURL, DataURL 可直接 赋值给 img.src。 FileReader 的 result 可以有 3 种形…

【转】LAMP网站架构方案分析【精辟】

【转】LAMP网站架构方案分析【精辟】 http://www.cnblogs.com/mo-beifeng/archive/2011/09/13/2175197.htmlXubuntu下LAMP环境安装(最佳的PHP环境搭建) http://www.cnblogs.com/mo-beifeng/archive/2011/08/13/2137605.html 转载于:https://www.cnblogs.com/bravehunter/p/5709…

有源晶振和无源晶振的区别

1、晶振在电路中就相当于人的一个心脏&#xff0c;晶振为电路提供了一个时钟信号。有源晶振比较贵&#xff0c;但是有源晶振自身就能震动。而无论是无源晶振&#xff0c;还是有源晶振&#xff0c;都有自身的优点和缺点所在&#xff0c;若考虑产品成本&#xff0c;建议可以选择无…

免费设计图标的网站;免费设计的网站;免费设计的网站;

链接1&#xff1a;canva设计logo和图标 链接2&#xff1a;包图网 可以自行设计、编辑、下载logo图标海报等