[数据结构]:04-循环队列(数组)(C语言实现)

news2024/9/24 15:26:39

目录

前言

已完成内容

循环队列实现

01-开发环境

02-文件布局

 03-代码

01-主函数

02-头文件

03-QueueCommon.cpp

04-QueueFunction.cpp

结语


前言

        此专栏包含408考研数据结构全部内容,除其中使用到C++引用外,全为C语言代码。使用C++引用主要是为了简化指针的使用,避免二重指针的出现。

已完成内容

[数据结构]:01-顺序表(C语言实现)_Chandni.的博客-CSDN博客

[数据结构]:02-单链表(C语言实现)_Chandni.的博客-CSDN博客

[数据结构]:03-栈(C语言实现)_Chandni.的博客-CSDN博客

循环队列实现

01-开发环境

        语言:C/C++14

        编译器:MinGW64

        集成开发环境:CLion2022.1.3

02-文件布局

        请在CLion集成开发环境中创建C++可执行程序,否则无法运行,原因上面已解释。

                        

 03-代码

01-主函数

        用于测试和初始化队列。

#include "./Head/QueueData.h"
#include "./Source/QueueCommon.cpp"
#include "./Source/QueueFunction.cpp"

int main() {
    ArrayQueue Q;
    // 初始化
    InitializationQueue(Q);

    // 入队
    QueuePush(Q, 1);
    QueuePush(Q, 2);
    QueuePush(Q, 3);
    QueuePush(Q, 4);
    QueuePush(Q, 5);
    QueuePrint(Q);
    printf("---------------------\n");

    // 出队
    ElemType value;
    QueuePop(Q, value);
    printf("Queue Pop Value = %d\n", value);
    QueuePop(Q, value);
    printf("Queue Pop Value = %d\n", value);
    QueuePrint(Q);
    printf("---------------------\n");

    // 入队
    QueuePush(Q, 4);
    QueuePush(Q, 5);
    QueuePrint(Q);
    printf("---------------------\n");
    return 0;
}

02-头文件

        用于存储结构体和常量等。

//
// Created by 24955 on 2023-02-26.
//

#ifndef INC_01_ARRAYQUEUE_QUEUEDATA_H
#define INC_01_ARRAYQUEUE_QUEUEDATA_H
// 头文件
#include <Stdio.h>

// 常量
#define MaxSize 5
typedef int ElemType;

// 结构体
typedef struct {
    ElemType data[MaxSize];
    int front, rear;
} ArrayQueue;
#endif //INC_01_ARRAYQUEUE_QUEUEDATA_H

03-QueueCommon.cpp

        用于存储公共函数以及队列的输出。

//
// Created by 24955 on 2023-02-26.
//
// 初始化队列
void InitializationQueue(ArrayQueue &Queue) {
    /*
     * 1. 初始化队列*/
    Queue.front = 0;
    Queue.rear = 0;
}

// 判断队列是否为空
bool JudgeQueueEmpty(ArrayQueue Queue) {
    /*
     * 1. 头指针和尾指针相等则队列为空
     * 2. 这里的指针加引号,只是一种标识,这样说方便理解*/
    if (Queue.front == Queue.rear) {
        return true;
    } else {
        return false;
    }
}

// 判断队列是否已满
bool JudgeQueueFull(ArrayQueue Queue) {
    /*
     * 1. 尾指针+1取模与头指针相等则满*/
    if ((Queue.rear + 1) % MaxSize == Queue.front) {
        return true;
    } else {
        return false;
    }
}

// 输出队列元素
void QueuePrint(ArrayQueue Queue) {
    /*
     * 1. 判断队列是否为空
     * 2. 若不为空则从头输出*/
    if (!JudgeQueueEmpty(Queue)) {
        while (Queue.front != Queue.rear) {
            printf("%3d", Queue.data[Queue.front]);
            Queue.front = (Queue.front + 1) % MaxSize;
        }
        printf("\n");
    } else {
        printf("Queue Empty.\n");
    }
}

04-QueueFunction.cpp

        用于存储入队、出队等函数。

//
// Created by 24955 on 2023-02-26.
//
// 入队
void QueuePush(ArrayQueue &Queue, ElemType value) {
    /*
     * 1. 判断队列是否已满
     * 2. 若不满则入队*/
    if (!JudgeQueueFull(Queue)) {
        Queue.data[Queue.rear] = value;
        Queue.rear = (Queue.rear + 1) % MaxSize;
    } else {
        printf("Queue Full.\n");
    }
}

// 出队
void QueuePop(ArrayQueue &Queue, ElemType &value) {
    /*
     * 1. 判断队列是否已空
     * 2. 若非空则出队*/
    if (!JudgeQueueEmpty(Queue)) {
        value = Queue.data[Queue.front];
        Queue.front = (Queue.front + 1) % MaxSize;
    } else {
        printf("Queue Empty.\n");
    }
}

结语

       本章循环队列的实现形式为数组的实现形式,循环队列还可以使用链表形式实现,链表实现形式请关注本专栏下一章。

        此博客主要用于408考研数据结构C语言实现记录,内有不足,可留言,可讨论。

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

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

相关文章

1.7校验码:校验码、规则校验码-奇偶校验、检验码-循环校验码CRC、模2除法、校验码-海明校验

1.7校验码&#xff1a;校验码、规则校验码-奇偶校验、检验码-循环校验码CRC、模2除法、校验码-海明校验校验码校验码-奇偶校验编码规则检验码-循环校验码CRC编码规则什么是模2除法如何计算校验码校验码-海明校验校验码 计算机在接收相应信息的时候能够识别的的都是一些电器信号…

【Spring6】| Spring的入门程序、集成Log4j2日志框架

目录 一&#xff1a;Spring的入门程序 1. Spring的下载 2. Spring的jar文件 3. 第一个Spring程序 4. 第一个Spring程序详细剖析 5. Spring6启用Log4j2日志框架 一&#xff1a;Spring的入门程序 1. Spring的下载 官网地址&#xff1a;https://spring.io/ 官网地址&…

数学建模 latex 图片以及表格排版整理(overleaf)

无论是什么比赛&#xff0c;图片和表格的格式都非常重要&#xff0c;这边的重要不只是指规范性&#xff0c;还有抓住评委眼球的能力。 那么怎样抓住评委的眼球&#xff1f; 最重要的一点就是善用图片和表格&#xff08;当然撰写论文最重要的是逻辑&#xff0c;这个是需要长期…

CorelDRAW2023最新版序列号使用教程

CorelDRAW2023用起来非常顺手&#xff0c;旨在为用户解决因在工作上带来的问题&#xff0c;在业内可谓享有极高的声誉&#xff0c;是业内人士常用的一款工具&#xff0c;有了它&#xff0c;可以更好的帮助用户把握好各个方面的细节&#xff0c;减少其他方面的失误&#xff0c;让…

RabbitMQ交换机(Exchanges)

目录 一、概念 二、临时队列 三、绑定 四、Fanout&#xff08;扇出交换机&#xff09; &#xff08;一&#xff09;介绍 &#xff08;二&#xff09;实战 五、Direct&#xff08;直接交换机&#xff09; &#xff08;一&#xff09;介绍 &#xff08;二&#xff09;实…

【LeetCode】1255. 得分最高的单词集合

1255. 得分最高的单词集合 题目描述 你将会得到一份单词表 words&#xff0c;一个字母表 letters &#xff08;可能会有重复字母&#xff09;&#xff0c;以及每个字母对应的得分情况表 score。 请你帮忙计算玩家在单词拼写游戏中所能获得的「最高得分」&#xff1a;能够由 …

我看谁还敢说不懂git

文章目录一、Git介绍1.1、Git的作用1.2、Git的理念1.3、Git的特点1.4、Git对比SVN二、Git的概念2.1、Git基础概念三、Git的基本操作3.1、使用Git管理一个代码仓库的流程3.2、Git常用命令介绍四、Git状态的变化五、Git安装和配置5.1、Git的安装5.2、Git的配置六、Git的高级操作6…

【阅读笔记】SecureML: A System for ScalablePrivacy-Preserving Machine Learning

1. Motivation 针对机器学习中的出现的数据隐私泄露的风险&#xff0c;提出了线性回归、逻辑回归以及简单神经网络的隐私保护模型。 2. Contributions 2.1 为线性回归、逻辑回归以及神经网络设计安全计算协议 2.1.1.1 线性回归 线性回归损失函数为&#xff1a; , 采用SG…

数据分析:某电商优惠卷数据分析

数据分析&#xff1a;某电商优惠卷数据分析 作者&#xff1a;AOAIYI 专栏&#xff1a;python数据分析 作者简介&#xff1a;Python领域新星作者、多项比赛获奖者&#xff1a;AOAIYI首页 &#x1f60a;&#x1f60a;&#x1f60a;如果觉得文章不错或能帮助到你学习&#xff0c;可…

单变量回归问题

单变量回归问题 对于某房价问题&#xff0c;x为房屋大小&#xff0c;h即为预估房价&#xff0c;模型公式为&#xff1a; hθ(x)θ0θ1xh_{\theta}(x)\theta_{0}\theta_{1}x hθ​(x)θ0​θ1​x 要利用训练集拟合该公式&#xff08;主要是计算θ0、θ1\theta_{0}、\theta_{1}θ…

JavaScript DOM和BOM

目录 查找html元素 1.通过id 2.通过标签名 3.通过类名 DOM 1.创建动态的HTML内容 2.修改元素内容 3.改变HTML属性 4.改变css样式 DOM事件 DOM节点 1.添加HTML元素 2.删除HTML元素 浏览器对象 1.Window对象 2.Screen对象 3.History对象 4.Location对象 5.Navi…

深入理解java虚拟机精华总结:jvm内存模型(运行时数据区域)、对象、OOM异常

深入理解java虚拟机精华总结&#xff1a;jvm内存模型、对象、OOM异常jvm内存模型对象对象的创建对象的内存布局对象的访问定位OOM异常Java堆溢出栈溢出方法区溢出直接内存溢出以前读过好几遍《深入理解java虚拟机》这本书&#xff0c;最近又打算重读一遍&#xff0c;并且做一些…

一个接口多个实现如何选择注入对应的Bean_@Primary_@Resource_@Qualifier_@ConditionalOnProperty

文章目录引入结论案例Primary 指定默认注入的BeanQualifier配合Autowired 按名称注入对应的BeanResource 默认按照类型注入&#xff0c;可指定名称注入ConditionalOnProperty 结合配置文件统一设置bean的注入引入 在springboot中&#xff0c;如果一个接口有多个实现&#xff0…

SpringMVC - 13 - SpringMVC执行流程

文章目录1、SpringMVC常用组件2、DispatcherServlet初始化过程a>初始化WebApplicationContextb>创建WebApplicationContextc>DispatcherServlet初始化策略3、DispatcherServlet调用组件处理请求a>processRequest()b>doService()c>doDispatch()d>processDi…

【Neo4j】图数据库CypherQueryLanguage随笔

CQL语言随笔 一、Cyther关系描述 如图&#xff1a;唐僧&#xff0c;孙悟空&#xff0c;白骨精三者的关系图&#xff1a; Cypher语言描述他们的关系&#xff1a; (孙悟空)<-[:赶走]-(唐僧)-[:被骗]->(白骨精)-[:被打死]->(孙悟空) 二、CQL语言的使用案例 创建结点…

七、HTTPTomcatServlet

1&#xff0c;Web概述 1.1 Web和JavaWeb的概念 Web是全球广域网&#xff0c;也称为万维网(www)&#xff0c;能够通过浏览器访问的网站。 在我们日常的生活中&#xff0c;经常会使用浏览器去访问百度、京东、传智官网等这些网站&#xff0c;这些网站统称为Web网站。如下就是通…

_react

React 中 keys 的作用是什么&#xff1f; Keys是 React 用于追踪哪些列表中元素被修改、被添加或者被移除的辅助标识 在开发过程中&#xff0c;我们需要保证某个元素的 key 在其同级元素中具有唯一性。在 React Diff 算法中React 会借助元素的 Key 值来判断该元素是新近创建的还…

ADAS-可见光相机之Cmos Image Sensor

引言 “ 可见光相机在日常生活、工业生产、智能制造等应用有着重要的作用。在ADAS中更是扮演着重要的角色&#xff0c;如tesla model系列全车身10多个相机&#xff0c;不断感知周围世界。本文着重讲解下可见光相机中的CIS(CMOS Image Sensor)。” 定义 光是一种电磁波&…

如何在 iPhone 上恢复已删除的通话记录/通话记录

您的通话记录/通话记录可能很重要&#xff0c;尤其是当您想要拨打之前联系过但未保存的号码时。如果您碰巧删除了通话记录&#xff08;有意或无意&#xff09;&#xff0c;本指南将帮助您了解如何检索它们并找回您需要使用的所有记录。我们将根据您的情况和您拥有的工具讨论不同…

【Tomcat 】Tomcat 架构原理解析到架构设计借鉴

Tomcat 发展这么多年&#xff0c;已经比较成熟稳定。在如今『追新求快』的时代&#xff0c;Tomcat 作为 Java Web 开发必备的工具似乎变成了『熟悉的陌生人』&#xff0c;难道说如今就没有必要深入学习它了么&#xff1f;学习它我们又有什么收获呢&#xff1f; 静下心来&#…