基于顺序存储的环形队列算法库构建

news2024/11/27 8:28:43

学习贺利坚老师基于数组的环形队列

数据结构之自建算法库——顺序环形队列_下空队列q中依次入队列数据元素abc-CSDN博客文章浏览阅读5.2k次,点赞6次,收藏6次。本文针对数据结构基础系列网络课程(3):栈和队列中第9课时环形队列的存储及基本操作。按照“0207将算法变程序”[视频]部分建议的方法,建设自己的专业基础设施算法库。下图是数据存储结构设计及各种操作实现的要点: 顺序环形队列算法库采用程序的多文件组织形式,包括两个文件:      1.头文件:sqqueue.h,包含定义顺序环形队列数据结构的代码、宏定义、要实现算法的函数的声明;#ifnd_下空队列q中依次入队列数据元素abchttps://blog.csdn.net/sxhelijian/article/details/48464301

本人详细引入博客

队列的定义-CSDN博客文章浏览阅读1k次,点赞5次,收藏2次。ADT Queue{数据对象:D = { ai | ai 属于 ElemType, i=1,2,3...,n,n>=0}//ElemType为类型标识符数据关系:R = { | ai , ai+1 属于 D, i = 1,3,...,n-1}//前后顺序关系数据操作:InitQueue(&q):初始化队列 ,构造一个空队列DestroyQueue(&q):销毁队列 . 释放队列q 占用的存储空间._队列的定义https://blog.csdn.net/qq_57484399/article/details/127333046本人详细讲解博客

队列的顺序存储结构-CSDN博客文章浏览阅读1.2k次,点赞4次,收藏8次。说白了,就是一个数组 ,然后在两端进行操作 ,两端用首队指针和尾指针分别指向 ,然后进行相关的删除,插入操作, 目的还是模拟现实对数据的处理●描述队列•数据元素data , 元素具有同一类型ElemType ,最多为MaxSize(数组容量)•当前队首front•当前队尾 rear定义队列的数据结构以上是我们的队列的存储结构, 队列中有存储数据的数组 ElemType data[MaxSize];_队列的顺序存储结构https://blog.csdn.net/qq_57484399/article/details/127334106环形队列引入详细讲解

环形队列的存储及基本操作_环形队列基本操作-CSDN博客文章浏览阅读601次,点赞2次,收藏6次。{int front;int rear;}SqQueue;//rear 指向队尾元素// front 指向队头元素的前一个位置。_环形队列基本操作https://blog.csdn.net/qq_57484399/article/details/127340862

版本更新日志

v1.0: 基于之前的逻辑框架 , 简单改名, 易于理解

V1.0

算法库函数

//(1) 初始化顺序的循环队列
void Init_Sequential_circular_queue(Sequential_circular_queue *&init_queue);
//(2) 销毁顺序的循环队列
void Destroy_Sequential_circular_queue(Sequential_circular_queue *&destroy_queue);
//(3) 判断顺序循环队列是否为空
bool IsEmpty_Sequential_circular_queue(Sequential_circular_queue *judge_queue);
//(4) 测算循环队列的元素个数
int Length_Sequential_circular_queue(Sequential_circular_queue *measure_queue);
//(5) 入队元素
bool Enter_Sequential_circular_queue(Sequential_circular_queue *&enter_queue, ElemType enter_value);
//(6) 出队元素
bool Out_Sequential_circular_queue(Sequential_circular_queue *&Out_queue, ElemType &Out_value);

头文件

Sequential_circular_queue.h

#ifndef SEQUENTIAL_CIRCULAR_QUEUE_H_INCLUDED

#define SEQUENTIAL_CIRCULAR_QUEUE_H_INCLUDED

#define   MaxSize 8      //数组长度

typedef char ElemType;//自定义队列类型

//数组循环队列,自定义结构体
typedef struct
{
    ElemType data[MaxSize];//存储队列数据
    int Front;//队首指针
    int Rear;//队尾指针

}Sequential_circular_queue;

//(1) 初始化顺序的循环队列
void Init_Sequential_circular_queue(Sequential_circular_queue *&init_queue);
//(2) 销毁顺序的循环队列
void Destroy_Sequential_circular_queue(Sequential_circular_queue *&destroy_queue);
//(3) 判断顺序循环队列是否为空
bool IsEmpty_Sequential_circular_queue(Sequential_circular_queue *judge_queue);
//(4) 测算循环队列的元素个数
int Length_Sequential_circular_queue(Sequential_circular_queue *measure_queue);
//(5) 入队元素
bool Enter_Sequential_circular_queue(Sequential_circular_queue *&enter_queue, ElemType enter_value);
//(6) 出队元素
bool Out_Sequential_circular_queue(Sequential_circular_queue *&Out_queue, ElemType &Out_value);

#endif //SEQUENTIAL_CIRCULAR_QUEUE_H_INCLUDE

库函数实现

Sequential_circular_queue.cpp

/*****************************************
功  能: 基于顺序存储的环形队列
编程人: 王涛
时  间: 2024.6.22
版  本: V1.0
******************************************/
#include <stdio.h>
#include <malloc.h>
#include "Sequential_circular_queue.h"

/**************************************************
(1)函数名: Init_Sequential_circular_queue
功  能: 初始创建的顺序循环队列
参  数: (1)Sequential_circular_queue *&init_queue:要初始化的顺序队列
返回值: 无
**************************************************/

void Init_Sequential_circular_queue(Sequential_circular_queue *&init_queue)
{
    init_queue = (Sequential_circular_queue*)malloc(sizeof(Sequential_circular_queue));
    init_queue->Front = 0;
    init_queue->Rear = 0;
}

/**************************************************
(2)函数名: Destroy_Sequential_circular_queue
功  能: 销毁顺序存储的循环队列
参  数: (1)Sequential_circular_queue *&destroy_queue: 要销毁的队列
注  意: 传入的是 *& 指针地址, 所以可以修改原函数
返回值: 无(只有成功,没有失败)
**************************************************/
void Destroy_Sequential_circular_queue(Sequential_circular_queue *&destroy_queue)
{
    free(destroy_queue);
}

/**************************************************
(3)函数名: IsEmpty_Sequential_circular_queue
功  能: 判断顺序循环队列是否为空
参  数: Sequential_circular_queue *&judge_queue:要判断的
返回值: bool:判断是队列是否为空
**************************************************/
bool IsEmpty_Sequential_circular_queue(Sequential_circular_queue *judge_queue)
{
    //队首,队尾重合,则队列为空
    return (judge_queue->Front == judge_queue->Rear);
}

/**************************************************
(4)函数名: Length_Sequential_circular_queue
功  能: 测算循环队列的元素个数
参  数: Sequential_circular_queue *&measure_queue:要进行测量元素个数的队列
返回值: int: 返回队列元素个数/长度
**************************************************/
int Length_Sequential_circular_queue(Sequential_circular_queue *measure_queue)
{
    return (measure_queue->Rear - measure_queue->Front+MaxSize)%MaxSize;
}

/**************************************************
(5)函数名: Enter_Sequential_circular_queue
功  能:入队元素
参  数:(1)Sequential_circular_queue *&enter_queue:入队元素的队列
       (2)ElemType enter_value:入队的元素值
返回值:bool: 是否队满? 是,成功:否,失败
**************************************************/
bool Enter_Sequential_circular_queue(Sequential_circular_queue *&enter_queue, ElemType enter_value)
{
    //判断防止队满上溢
    if((enter_queue->Rear+1)%MaxSize == enter_queue->Front)
    {
        return false;
    }
    enter_queue->Rear = (enter_queue->Rear + 1)%MaxSize;
    enter_queue->data[enter_queue->Rear] = enter_value;
    return true;
}

/**************************************************
函数名: Out_Sequential_circular_queue
功  能:出队元素
参  数:(1)Sequential_circular_queue *&Out_queue:出队队列
        (2)ElemType &Out_value:出队队列元素值
注  意: 出队队列,要进行修改,所以是*&(指针地址)
        并且要传回出队元素的数值,所以也用的是 &(地址)
返回值: bool: 出队成功? 队非空,成功:队空,失败
**************************************************/
bool Out_Sequential_circular_queue(Sequential_circular_queue *&Out_queue, ElemType &Out_value)
{
    if(IsEmpty_Sequential_circular_queue(Out_queue))//判断为空,则跳出
    {
        return false;
    }
    Out_queue->Front = (Out_queue->Front + 1)%MaxSize; //锁定出队元素序号
    Out_value = Out_queue->data[Out_queue->Front];//传回出队数值
    return true;
}



主函数测试

main.cpp

#include <stdio.h>
#include "Sequential_circular_queue.h"

int main()
{
    ElemType test_data1;
    Sequential_circular_queue *test_queue1;
    printf("(1)初始化队列test_queue1\n");
    Init_Sequential_circular_queue(test_queue1);
    printf("(2)依次进队列元素 a b c \n");
    if(Enter_Sequential_circular_queue(test_queue1,'a') == 0)
    {
        printf("\n队满, 不能进队!\n");
    }
    if(Enter_Sequential_circular_queue(test_queue1,'b') == 0)
    {
        printf("\n队满, 不能进队!\n");
    }
    if(Enter_Sequential_circular_queue(test_queue1,'c') == 0)
    {
        printf("\n队满, 不能进队!\n");
    }

    printf("\n(3)队列为%s\n",(IsEmpty_Sequential_circular_queue(test_queue1)?"空":"非空"));


    if(Out_Sequential_circular_queue(test_queue1, test_data1) == 0)
    {
        printf("队空, 不能出队\n");
    }
    else
    {
        printf("(4)出队一个元素 %c \n", test_data1);
    }
    printf("(5)队列test_queue1的元素个数:%d\n", Length_Sequential_circular_queue(test_queue1));
    printf("(6) 依次进队列元素 d e f\n");

    test_data1 = 'd';
    if(Enter_Sequential_circular_queue(test_queue1, test_data1) == 0)
    {
        printf("\n队满,%c不能进队\n",test_data1);
    }
    test_data1 = 'e';
    if(Enter_Sequential_circular_queue(test_queue1, test_data1) == 0)
    {
        printf("\n队满,%c不能进队\n",test_data1);
    }
    test_data1 = 'f';
    if(Enter_Sequential_circular_queue(test_queue1, test_data1) == 0)
    {
        printf("\n队满,%c不能进队\n",test_data1);
    }
    printf("\n(7) 队列test1的元素个数是%d\n", Length_Sequential_circular_queue(test_queue1));
    printf("(8)出队列序号:");
    while(!IsEmpty_Sequential_circular_queue(test_queue1))
    {
        Out_Sequential_circular_queue(test_queue1,test_data1);
        printf("\n%c\n",test_data1);
    }
    printf("\n");
    printf("(9)释放队列\n");
    Destroy_Sequential_circular_queue(test_queue1);
    return 0;

}

运行结果

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

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

相关文章

用Visual Studio调试CMake项目并生成Visual Studio工程

一. 在Windows系统上安装CMake 访问CMake官方网站https://cmake.org/download&#xff0c;或通过文末链接下载&#xff1a;在下载页面上&#xff0c;找到并点击“Download”链接以获取最新的稳定版本的CMake。请注意&#xff0c;虽然新版本可能包含更多功能和改进&#xff0c;…

MATLAB | 怎样绘制这样的环形柱状图

Hey, 各位又是好久不见&#xff0c;最近忙到后台消息都有些来不及看&#xff0c;非常抱歉&#xff0c;今天带来一个环形柱状图绘制的简易小代码,绘制效果如下&#xff1a; 下面直接给出完整代码&#xff0c;替换一下数据即可&#xff0c;代码都有注释的&#xff1a; 完整代码 …

Redis—SortedSet数据类型及其常用命令详解

文章目录 一、Redis概述SortedSet类型1 ZADD&#xff1a;向有序集合添加成员2 ZREM&#xff1a;从有序集合中移除一个或多个成员3 ZSCORE : 获取sorted set中的指定元素的score值4 ZRANK&#xff1a;获取sorted set 中的指定元素的排名5 ZCARD&#xff1a;获取sorted set中的元…

库卡机器人减速机维修齿轮磨损故障

一、KUKA机器人减速器齿轮磨损故障的原因 1. 润滑不足&#xff1a;润滑油不足或质量不佳可能导致齿轮磨损。 2. 负载过重&#xff1a;超过库卡机械臂减速器额定负载可能导致齿轮磨损。 3. 操作不当&#xff1a;未按照说明书操作可能导致KUKA机器人减速器齿轮磨损。 4. 维护不足…

Unity Apple Vision Pro 开发(三):visionOS 应用形态

文章目录 &#x1f4d5;教程说明&#x1f4d5;常用名词解释&#x1f4d5;visionOS 空间类型⭐Shared Space 共享空间⭐Full Space/Immersive Space 独占空间 &#x1f4d5;visionOS 渲染框架&#x1f4d5;Unity 开发 visionOS 应用的不同模式⭐**窗口模式**⭐VR 模式⭐MR 模式 …

关于edge浏览器注册Kaggle不显示验证部分的问题

使用edge注册kaggle没有显示验证的部分导致无法完成注册 法一 谷歌大法好&#xff0c;使用谷歌注册就么有问题&#xff0c;然鹅需要魔法上网。 法二 使用 edge的Header Editor的插件 收到邮件后填写即可 参考博客&#xff1a; Kaggle平台注册弹不出验证码怎么办&#…

【C++LeetCode】【热题100】最长连续序列【中等】-不同效率的题解【5】

题目&#xff1a; 暴力方法&#xff1a; class Solution { public:int longestConsecutive(vector<int>& nums) {int maxlen1;//定义最长连续序列if(nums.size()<1){//特殊情况的长度 等于序列长度return nums.size();}std::unordered_set<int> uniqu…

内容安全复习 8 - 视觉内容伪造与检测

文章目录 研究背景内容伪造方法虚假人脸生成人脸替换属性编辑表情重演跨模态人脸编辑 伪造检测方法眨眼检测交互式人脸活体检测一些了解方法挑战 研究背景 图像内容篡改造成新闻报道的偏颇易导致社会和公共秩序的不安&#xff0c;对公共安全产生不良影响。 造成的影响&#x…

数据结构经典面试之列表——C#和C++篇

文章目录 1. 数据结构概述2. 列表&#xff08;List&#xff09;的基本概念与操作3. 列表的具体实现方式3.1 数组实现3.2 链表实现 4. 列表在C#和C中的使用示例4.1 C#中的列表使用示例4.2 C中的列表使用示例 5. 总结 数据结构是计算机科学中非常重要的一个领域&#xff0c;它主要…

vue-cli 根据文字生成pdf格式文件 jsPDF

1.安装jspdf npm install jspdf --save 2.下载ttf格式文件 也可以用C:\Windows\Fonts下的字体文件&#xff0c;反正调一个需要的ttf字体文件就行&#xff0c;但有的字体存在部分字体乱码现象 微软雅黑ttf下载地址&#xff1a; FontsMarket.com - Download Microsoft YaHei …

一种基于稀疏学习的旋转机械故障诊断方法(MATLAB)

稀疏表示方法是一种利用最少原子在过完备字典上表示或逼近信号的方法&#xff0c;该方法具有信号表示的高分辨率、稀疏性、强抗干扰能力和自适应性等优点。稀疏表示聚焦于设计合适的稀疏表示字典和挖掘有用的稀疏先验信息&#xff0c;其核心思想是将故障特征信息近似表示为字典…

数据挖掘与分析——数据预处理

数据探索 波士顿房价数据集&#xff1a;卡内基梅隆大学收集&#xff0c;StatLib库&#xff0c;1978年&#xff0c;涵盖了麻省波士顿的506个不同郊区的房屋数据。 一共含有506条数据。每条数据14个字段&#xff0c;包含13个属性&#xff0c;和一个房价的平均值。 数据读取方法…

Ubuntu安装Vins-Fusion(1) —— Ubuntu18.04安装vins-fusion

目录 前言 1、准备1.1 安装ROS1.2 安装 Ceres Solver 2、安装 VINS-Fusion3、测试&#xff08;EuRoC MAV 数据集&#xff09;3.1、下载数据集3.2 Monocualr camera IMU3.3 Stereo cameras IMU3.4 Stereo cameras 参考 前言 VINS-Fusion 是一种基于优化的多传感器状态估计器&…

华为RH2288 V3安装 Linux 系统,安装过程心得

带着U盘&#xff0c;怀着激动的心情进入机房安装操作系统&#xff0c;结果没有显示器和键盘鼠标&#xff0c;傻眼了。 作为过来人&#xff0c;温馨提醒&#xff0c;进入机房前记得先打听&#xff0c;准备好这些&#xff1a;机房房间号、机柜编号、物理机编号、键盘、鼠标、显示…

C#调用OpenCvSharp计算并显示带掩膜的图像直方图

之前的文章简要测试了调用OpenCvSharp的Cv2.CalcHist函数计算直方图的用法&#xff0c;不过使用过程中参数mask的值始终为null&#xff0c;也就是计算的整幅图像的直方图&#xff0c;如果mask不为空&#xff0c;则可以计算图像指定区域的直方图&#xff0c;本文学习掩膜的创建方…

一键部署开源PaaS服务Dokploy,代替Vercel, Netlify 以及 Heroku

前言 Vercel, Netlify 以及 Heroku都是知名的PaaS&#xff08;Platform as a Service|平台即服务&#xff09;服务商&#xff0c;利用这些平台我们可以方便快捷的进行项目部署。尤其是各家生态完善&#xff0c;是很多独立开发者的首选之地。 但是随之而来的就是另外的隐患了&…

如何用Spring使用Redis作为消息订阅?

目录 一、Spring 框架介绍二、Redis 框架介绍三、什么是消息订阅四、如何用Spring使用Redis作为消息订阅 一、Spring 框架介绍 Spring 框架是一个开源的 Java 平台&#xff0c;它提供了全面的基础设施支持&#xff0c;以便您可以更容易地开发 Java 应用程序。Spring 处理了基础…

全局唯一ID生成

全局ID生成器&#xff0c;是一种在分布式系统下用来生成全局唯一ID的工具需满足以下特性&#xff1a; 唯一性、递增性、安全性、高可用、高性能 生成在所有库或表中都满足唯一得ID 实现&#xff1a; 利用Redis的自增功能 INCRBY key increment (INCRBY | Docs)&#xff0c;并在…

mysql 某个时间字段取值时间标识的字符串的值

SELECT STR_TO_DATE(substr(out_trade_no, 1,14), %Y-%m-%d %H:%i:%s) FROM o_order WHERE id 364457; UPDATE o_order SET created_time DATE_FORMAT(STR_TO_DATE(substr(out_trade_no, 1,14), %Y%m%d %H%i%s), %Y-%m-%d %H:%i:%s) WHERE id 364457; 举例&#xff1a; 1…