数据结构:循环队列

一、队列的概念

操作受限的线性表,允许在队列的一端执行入队操作,另一端执行出队操作

先进先出(FIFO)

1.顺序队列

物理结构连续,依赖于数组实现

队列中有一个队头指针和队尾指针,队头指针保存每次要出队的元素,队尾指针保存每次要入队的位置

顺序队列存在假溢满现象:队列中仍然有位置入队元素,但是队尾指针已经走到了队满的条件

2.循环队列

循环队列用于解决假溢满现象

如果循环队列的每个位置都存入元素,队列的判空和判满是同一种条件:front==rear;

所以循环队列会人为的浪费掉一个空间,用作判满条件

二、功能

循环队列结构体

#ifndef __SEQ_QUEUE_H__
#define __SEQ_QUEUE_H__
#define MAX 8
#include <stdio.h>
#include <stdlib.h>typedef int datatype;
typedef struct seq_que{datatype data[MAX];int front;int rear;
}queue,*queue_p;//创建
queue_p creat_que();
//判空
int que_empty(queue_p S);
//判满
int que_full(queue_p S);
//入队
void push_queue(queue_p S,datatype data);
//出队
void pop_queue(queue_p S);
//打印
void out_put(queue_p S);
//销毁
void free_que(queue_p *S);#endif

1.创建

//创建
queue_p creat_que(){queue_p S=(queue_p)malloc(sizeof(queue));if(S==NULL){printf("入参为空\n");return NULL;}S->front=0;S->front=S->rear;return S;
}

2.判空

//判空
int que_empty(queue_p S){if(S==NULL){printf("入参为空\n");return -1;}
return S->front==S->rear?1:0;}

3.判满

int que_full(queue_p S){if(S==NULL){printf("入参为空\n");return -1;}return (S->rear+1)%MAX==S->front?1:0;
}

4.入队

//入队
void push_queue(queue_p S,datatype data){if(S==NULL){printf("入参为空\n");return;}if(que_full(S)){printf("队列已满\n");return;
}
S->data[S->rear]=data;
S->rear=(S->rear+1)%MAX;
}

5.出队

//出队
void pop_queue(queue_p S){if(S==NULL){printf("入参为空\n");return;}if(que_empty(S)){printf("队列为空\n");return;}
S->front=(S->front+1)%MAX;
}

6.打印

//打印
void out_put(queue_p S){if(S==NULL){printf("入参为空\n");return;}//符合队列的性质,从头开始打印//先保留一份队头元素的下标int temp=S->front;while(temp!=S->rear){printf("%d ",S->data[temp]);temp=(temp+1)%MAX;}putchar(10);
}

7.销毁

//销毁
void free_que(queue_p *S){if(S==NULL || *S==NULL){printf("入参为空\n");return; }free(*S);*S=NULL;
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

网站三合一缩略图片介绍展示源码

网站三合一缩略图片介绍展示源码&#xff0c;PHP源码&#xff0c;运行需要php环境支持&#xff0c;效果截图如下 蓝奏云下载&#xff1a;https://wfr.lanzout.com/ihY8y1pgim6j

Springboot+vue的考务报名平台(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的考务报名平台&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的考务报名平台&#xff0c;采用M&#xff08;model&#xff0…

新加坡服务器托管:开启全球化发展之门

新加坡作为一个小国家&#xff0c;却在全球范围内享有极高的声誉。新加坡作为亚洲的科技中心&#xff0c;拥有先进的通信基础设施和成熟的机房托管市场。除了其独特的地理位置和发达的经济体系外&#xff0c;新加坡还以其开放的商业环境和便利的托管服务吸引着越来越多的国际公…

Python手册(Machine Learning)--LightGBM

Overview LightGBM&#xff08;Light Gradient Boosting Machine&#xff09;是一种高效的 Gradient Boosting 算法&#xff0c; 主要用于解决GBDT在海量数据中遇到的问题&#xff0c;以便更好更快的用于工业实践中。 数据结构说明lightgbm.DatasetLightGBM数据集lightgbm.Bo…

【前端素材】推荐优质后台管理系统Salreo平台模板(附源码)

一、需求分析 当我们从多个层次来详细分析后台管理系统时&#xff0c;可以将其功能和定义进一步细分&#xff0c;以便更好地理解其在不同方面的作用和实际运作。 1. 结构层次 在结构层次上&#xff0c;后台管理系统可以分为以下几个部分&#xff1a; a. 辅助功能模块&#…

项目分享|基于ELF 1开发板的车牌识别系统

该项目选用ElfBoard ELF 1开发板作为核心硬件平台&#xff0c;利用USB接口连接的摄像头捕捉并识别车牌信息。一旦车牌成功识别&#xff0c;系统会触发绿灯指示&#xff0c;并将识别所得的车牌号码实时传输至手机APP。车牌识别技术方面&#xff0c;借助了百度提供的OCR&#xff…

Java+SpringBoot+Vue+MySQL:狱内罪犯危险性评估系统全栈开发

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

postman访问k8s api

第一种方式&#xff1a; kubectl -n kubesphere-system get sa kubesphere -oyaml apiVersion: v1 kind: ServiceAccount metadata:annotations:meta.helm.sh/release-name: ks-coremeta.helm.sh/release-namespace: kubesphere-systemcreationTimestamp: "2023-07-24T07…

vue2后台管理系统demo,包含增删查改、模糊搜索、分页

因一直敲小程序&#xff0c;vue不熟练&#xff0c;自己练手项目&#xff0c;就包含增删查改以及模糊搜索分页 一、页面简单但功能齐全 二、数据是mock模拟 三、启动步骤 1、 json-server --watch data.json 启动mock数据 2、npm i 下载依赖 3、npm run serve 四、github地址…

最新IE跳转Edge浏览器解决办法(2024.2.26)

最新IE跳转Edge浏览器解决办法&#xff08;2024.2.26&#xff09; 1. IE跳转原因1.1. 原先解决办法1.2. 最新解决办法1.3. 最后 1. IE跳转原因 关于IE跳转问题是由于在2023年2月14日&#xff0c;微软正式告别IE浏览器&#xff0c;导致很多使用Windows10系统的电脑在打开IE浏览…

PHP请求示例获取淘宝商品详情数据API接口(按关键词搜索商品列表)

请求示例&#xff0c;API接口接入Anzexi58 item_get-获得淘宝商品详情 taobao.item_get 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥WeChat18305163218api_nameString是API接口名称&#xff08;包…

存储卡0字节危机:原因解析与数据拯救之道

存储卡0字节现象揭秘 在数字时代&#xff0c;存储卡作为我们存储重要数据的主要工具之一&#xff0c;一旦遭遇“0字节”的困境&#xff0c;无疑是一场数据灾难。所谓存储卡0字节&#xff0c;即存储卡的文件系统显示容量为0&#xff0c;所有文件仿佛凭空消失&#xff0c;用户无…

Ubuntu服务器fail2ban的使用

作用&#xff1a;限制ssh远程登录&#xff0c;防止被人爆破服务器&#xff0c;封禁登录ip 使用lastb命令可查看到登录失败的用户及ip&#xff0c;无时无刻的不在爆破服务器 目录 一、安装fail2ban 二&#xff0c;配置fail2ban封禁ip的规则 1&#xff0c;进入目录并创建ssh…

在TMP中计算书名号《》高度的问题

1&#xff09;在TMP中计算书名号《》高度的问题 2&#xff09;FMOD设置中关于Virtual Channel Count&Real Channel Count的参数疑问 3&#xff09;Unity 2021.3.18f1 ParticleSystemTrailGeometryJob粒子拖尾系统崩溃 4&#xff09;XLua打包Lua文件粒度问题 这是第375篇UWA…

Simulink搭建一阶低通数字滤波器(设定X(n)为非0起始值)

一、一阶低通数字滤波器原理 一阶滤波&#xff0c;亦称一阶惯性滤波或一阶低通滤波。其数学表达式如下&#xff1a; 其中&#xff1a;α代表滤波系数&#xff1b;X(n)表示本次采样值&#xff1b;Y(n-1) 为上次滤波输出值&#xff1b;Y(n) 为本次滤波输出值。一阶低通滤波方法通…

让两个电脑通信的方法(TCP连接,UDP连接,C/S架构)

目录 TCP-面向连接UDP-面向无连接C/S架构服务器和客户端的工作过程C/S架构例子 让两个电脑通信的方法是 在C/S的基础上&#xff0c;采用TCP和UDP的方式连接 TCP-面向连接 UDP-面向无连接 C/S架构 服务器和客户端的工作过程 C/S架构例子 服务器与客户端通信的过程类似公司与客户…

http模块-通过创建的服务器将本地文件转换成web资源

案例-通过创建的服务器将本地文件转换成web资源 目的&#xff1a;将本地文件转换成web资源思路&#xff1a;将文件实际存放的地址作为每个资源的请求url地址。大致流程&#xff1a; 浏览器–请求->自己写的web服务器–读文件->磁盘目录–读取完毕->自己写的web服务器…

WinForms中的Timer探究:Form Timer与Thread Timer的差异

WinForms中的Timer探究&#xff1a;Form Timer与Thread Timer的差异 在Windows Forms&#xff08;WinForms&#xff09;应用程序开发中&#xff0c;定时器&#xff08;Timer&#xff09;是一个常用的组件&#xff0c;它允许我们执行定时任务&#xff0c;如界面更新、周期性数据…

Python实现自动检测设备连通性并发送告警到企业微信

背景&#xff1a;门禁机器使用的WiFi连接&#xff0c;因为某些原因会不定期自动断开连接&#xff0c;需要人工及时干预&#xff0c;以免影响门禁数据同步&#xff0c;故写此脚本&#xff0c;定时检测门禁网络联通性。 #首次使用要安装tcping模块 pip install tcpingfrom tcpin…

vue3第三节(v-model 执行原理)

特殊说明&#xff1a; 以下vue3语法是基于 3.4之前版本进行使用的&#xff0c;3.4之后的版本 引入了 defineModel 宏&#xff0c;后续会介绍defineModel 1、vue3 与vue2 中v-model区别 vue3 中v-model绑定的不再是value&#xff0c;而是modelValue&#xff0c;接收的方法也不再…