数据结构:循环队列

一、队列的概念

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

先进先出(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://www.mzph.cn/news/707161.shtml

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

相关文章

SpringCloud--Nacos解析

一、Nacos简介 Spring Cloud Alibaba Nacos是一个用于动态服务发现、配置管理和服务管理的平台&#xff0c;是阿里巴巴开源的一个项目&#xff0c;旨在简化微服务架构中的服务治理。Nacos 提供了一组简单易用的特性集&#xff0c;可以快速的实现动态服务发现、服务配置、服务元…

2024食品工程与智慧农业国际学术会议(ICFESA2024)

2024食品工程与智慧农业国际学术会议(ICFESA2024) 一、【会议简介】 2024食品工程与智慧农业国际学术会议&#xff08;ICFESA2024&#xff09;是一个专注于食品工程和智慧农业领域的国际学术会议。会议将在杭州举行&#xff0c;该会议旨在汇聚全球相关领域的专家学者&#xff…

LiveGBS流媒体平台GB/T28181功能-查看国标设备下通道会话列表直播|回放|对讲|播放|录像|级联UDP|TCP|H264|H265会话

LiveGBS流媒体平台GB/T28181功能-查看直播|回放|对讲|播放|录像|级联UDP|TCP|H264|H265会话 1、会话列表2、会话类型3、搭建GB28181视频直播平台 1、会话列表 LiveGBS-> 国标设备-》点击在线状态 点击会话列表 2、会话类型 下拉会话类型可以看到 直播会话、回放会话、下载…

Windows网络问题:局域网内电脑连接wifi连不上

Windows网络问题&#xff1a;局域网内电脑连接wifi连不上 前提连接的网络没有问题 1、身边是否有人能连接上此网络 2、判断是否是无线网络的问题&#xff0c;寻找有线网络尝试 3、通过手机热点测试是否是电脑本身问题 经过上述的几步判断&#xff0c;如果是电脑本身的问题进行…

pytorch中的setattr和getattr:多层网络堆叠

同一个网络模块的多层叠加是深度学习中常用的操作&#xff0c;如果使用nn.Sequential将这些模块叠加到一起就会显得很呆&#xff1a; self.blocknn.Sequential(capsule_net(),capsule_net(),capsule_net(),capsule_net(),capsule_net(),capsule_net(), )对于这种方法&#xff0…

Qt中tableView控件的使用

tableView使用注意事项 tableView在使用时&#xff0c;从工具栏拖动到底层页面后&#xff0c;右键进行选择如下图所示&#xff1a; 此处需要注意的是&#xff0c;需要去修改属性&#xff0c;从UI上修改属性如下所示&#xff1a; 也可以通过代码修改属性&#xff1a; //将其设…

栈和队列——c语言实现栈

本节复习栈和队列中栈的增删查改。 首先回顾一下栈的性质&#xff1a; 栈的存储数据的原则是“后入先出”&#xff0c; 先入的在栈底&#xff0c; 后入的在栈顶。 弹出数据时在栈顶弹出。 开始实现栈的接口 栈的所有函数接口 //栈的初始化 void StackInit(Stack* pst); //入栈…

某查查首页瀑布流headers加密

目标网站&#xff1a; 某查查 对目标网站分析发现 红框内的参数和值都是加密的&#xff0c;是根据算法算出来的&#xff0c;故进行逆向分析。 由于没有固定参数名&#xff0c;只能通过搜索headers&#xff0c;在搜索的位置上打上断点&#xff0c;重新请求。 断点在此处断住&a…

解决“source ~/.bashrc 无效”的问题

dockerfile 在执行 RUN source ~/.bashrc 的时候会报错&#xff1a; RUN source ~/.bashrc: 0.188 /bin/sh: 1: source: not found 原因 dockerfile默认的shell是sh&#xff0c;无法使用source 解决方案 在 RUN source ~/.bashrc 前面添加以下指令&#xff0c;将shell改为ba…

Vue/React 前端高频面试

说一说vue钩子函数 钩子函数是Vue实例创建和销毁过程中自动执行的函数。按照组件生命周期的过程分为&#xff1a;挂载阶段 -> 更新阶段 -> 销毁阶段。 每个阶段对应的钩子函数分别为&#xff1a;挂载阶段&#xff08;beforeCreate&#xff0c;created&#xff0c;befor…

半小时到秒级,京东零售定时任务优化怎么做的?

导言&#xff1a; 京东零售技术团队通过真实线上案例总结了针对海量数据批处理任务的一些通用优化方法&#xff0c;除了供大家借鉴参考之外&#xff0c;也更希望通过这篇文章呼吁大家在平时开发程序时能够更加注意程序的性能和所消耗的资源&#xff0c;避免在流量突增时给系统…

Data Leakage and Evaluation Issues inMicro-Expression Analysis 阅读笔记

IEEE Transactions on Affective Computing上的一篇文章&#xff0c;做微表情识别&#xff0c;阅读完做个笔记。本文讨论了Data Leakage对模型准确度评估的影响&#xff0c;及如何融合多个微表情数据集&#xff0c;从而提升模型的准确度。工作量非常饱满&#xff0c;很认真&…

Oracle PL/SQL Programming 第8章:Strings 读书笔记

总的目录和进度&#xff0c;请参见开始读 Oracle PL/SQL Programming 第6版 具有字符数据类型的变量存储文本并由字符函数操作。 本章重点讨论单字节字符集&#xff0c;不涉及Unicode 或多字节字符集&#xff0c;不涉及CLOB&#xff08;字符大对象&#xff09;和 LONG。 Str…

HTTP与HTTPS-HTTPS 的应用数据是如何保证完整性的?

资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) HTTPS 的应用数据是如何保证完整性的? TLS 在实现上分为握手协议和记录协议两层 TLS 握手协议就是我们前面说的 TLS 四次握手的过程&#xff0c;负责协商加密算法和生成对称密钥&#xff0c;后续用此密…

Spring Boot和Spring MVC常用注解

在Spring Boot和Spring MVC中,注解(Annotations)扮演着至关重要的角色,它们简化了传统的XML配置方式,使得开发过程更加直观和便捷。下面将介绍一些在Spring Boot和Spring MVC中常用的注解及其用法:Spring Boot常用注解 @SpringBootApplication:Spring Boot的核心注解,用于…

Redis的发布订阅功能教程,实现实时消息和key过期事件通知功能

Redis的发布订阅 Redis的发布/订阅(Pub/Sub)功能是一种消息传递模式,用于实现消息发布者(publisher)和订阅者(subscriber)之间的消息通信。在这种模式下,消息的发送者(发布者)将消息发送到特定的频道(channel),而订阅了该频道的接收者(订阅者)将会接收到这些消息…

SpringMVC的文件上传与下载

SpringMVC文件上传: 使用:org.springframework.web.multipart.commons.CommonsMultipartResolver 使用:headPhoto.transferTo(file); 2、文件存储位置问题 String realPath = request.getServletContext().getRealPath("/upload") String dir = new File(realP…

第7集《灵峰宗论导读》

《灵峰宗论》导读。诸位法师&#xff0c;诸位同学&#xff0c;阿弥陀佛&#xff01;&#xff08;阿弥陀佛&#xff01;&#xff09; 请大家打开讲义第16面。 在这一科当中讲到乙一、发心篇&#xff0c;发心篇总共有五篇的论文。前面两篇主要是说明成佛作祖、堕坑落堑&#xf…

【linux 时间问题】centos7.4时间快了8小时,ntpdate命令无法更新时间

出现ntpdate: the NTP socket is in use, exiting的错误信息通常意味着NTP客户端或服务器已经在运行&#xff0c;并且正在使用NTP socket。在CentOS 7.4上&#xff0c;ntpd或chronyd服务可能会与ntpdate命令冲突&#xff0c;因为它们都用于时间同步。 首先&#xff0c;您可以尝…

计算机网络的基础知识

网络的性能指标&#xff1a;网络速率&#xff0c;bpsbit/s&#xff1b; 时延包括四个组成部分&#xff1a;发送时延、传播时延、排队时延、处理时延&#xff1b; 网络各个层次结构设计的基本三原则&#xff1a;各个层次之间是相互独立的&#xff0c;每一个层之间有足够的灵活…