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

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

数据结构之自建算法库——顺序环形队列_下空队列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.mzph.cn/web/32431.shtml

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

相关文章

华为---理解OSPF Route-ID(五)

9.5 理解OSPF Route-ID 9.5.1 原理概述 一些动态路由协议要求使用Router-ID作为路由器的身份标示&#xff0c;如果在启动这些路由协议时没有指定Router-ID,则默认使用路由器全局下的路由管理Router-ID。 Router-ID选举规则为&#xff0c;如果通过Router-ID命令配置了Router-…

1.22 LeetCode总结(基本算法)_位运算

进制的概念 进制即进位计数制&#xff0c;是利用固定的数字符号和统一的规则的带进位的计数方法。 任何一种进位计数制都有一个基数&#xff0c;基数为 X 的进位计数制称为 X 进制&#xff0c;表示每一个数位上的数运算时都是逢 X 进一。 504. 七进制数 手法1&#xff1a;当…

APP启动流程解析

简单概括启动微信的流程就是&#xff1a; 1.Launcher通知AMS 要启动微信了&#xff0c;并且告诉AMS要启动的是哪个页面也就是首页是哪个页面 2.AMS收到消息告诉Launcher知道了&#xff0c;并且把要启动的页面记下来 3.Launcher进入Paused状态&#xff0c;告诉AMS&#xff0c…

[FreeRTOS 基础知识] 互斥访问与回环队列 概念

文章目录 为什么需要互斥访问&#xff1f;使用队列实现互斥访问休眠和唤醒机制环形缓冲区 为什么需要互斥访问&#xff1f; 在裸机中&#xff0c;假设有两个函数&#xff08;func_A, func_B&#xff09;都要修改a的值&#xff08;a&#xff09;&#xff0c;那么将a定义为全局变…

css-vxe列表中ant进度条与百分比

1.vxe列表 ant进度条 <vxe-column field"actualProgress" title"进度" align"center" width"200"><template #default"{ row }"><a-progress:percent"Math.floor(row.actualProgress)"size"s…

Java程序之可爱的小兔兔

题目&#xff1a; 古典问题&#xff0c;有一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子&#xff0c;小兔子长到第三个月后每个月又生一对兔子&#xff0c;假如兔子都不死&#xff0c;问每个月的兔子总数为多少? 程序分析&#xff1a; 兔子的规律为数列1,1,2,3,…

C++基础知识——《缺省参数》和《函数重载》

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;Yan. yan.                        …

【Android进阶学习】Android-广播接收器(Broadcast-Receivers)

android:theme“style/AppTheme” > 现在&#xff0c;无论什么时候Android设备被启动&#xff0c;都将被广播接收器MyReceiver所拦截&#xff0c;并且在onReceive()中实现的逻辑将被执行。 有许多系统产生的事件被定义为类Intent中的静态常量值。下面的表格列举了重要的系…

微积分-导数1(导数与变化率)

切线 要求与曲线 C C C相切于 P ( a , f ( a ) ) P(a, f(a)) P(a,f(a))点的切线&#xff0c;我们可以在曲线上找到与之相近的一点 Q ( x , f ( x ) ) Q(x, f(x)) Q(x,f(x))&#xff0c;然后求出割线 P Q PQ PQ的斜率&#xff1a; m P Q f ( x ) − f ( a ) x − a m_{PQ} \…

AES 高级加密加速器实验

1、AES介绍 Kendryte K210 内置 AES&#xff08;高级加密加速器&#xff09;&#xff0c;相对于软件可以极⼤的提高 AES 运算速度。 AES 加速器支持多种加密/解密模式&#xff08;ECB,CBC,GCM&#xff09;,多种⻓度的 KEY&#xff08;ECB,CBC,GCM&#xff09;的运算。 AES 加…

Linux常用环境变量

Linux常用环境变量 一、常用的默认的shell环境变量二、环境变量 PATH三、持久化修改环境变量四、常用的环境变量 一、常用的默认的shell环境变量 1、当我们在shell命令行属于一个命令&#xff0c;shell解释器去解释这个命令的时候&#xff0c;需要先找到这个命令. 找到命令有两…

鸿蒙 HarmonyOS NEXT星河版APP应用开发—上篇

一、鸿蒙开发环境搭建 DevEco Studio安装 下载 访问官网&#xff1a;https://developer.huawei.com/consumer/cn/deveco-studio/选择操作系统版本后并注册登录华为账号既可下载安装包 安装 建议&#xff1a;软件和依赖安装目录不要使用中文字符软件安装包下载完成后&#xff0…

【Linux 基础】文件与目录管理

1. 文件和目录的基本概念 文件&#xff1a;是数据的集合&#xff0c;可以是文本、图像、视频等。 目录&#xff08;也称为文件夹&#xff09;&#xff1a;是文件和子目录的集合&#xff0c;用于组织文件。 2. 目录和路径 绝对路径&#xff1a;从根目录&#xff08;/&#x…

2021-03-29:加密与解密

前段时间导师分配的任务主要是看《加密与解密》这本书&#xff0c;“书本写的很详细&#xff0c;认真看会看懂的&#xff01;” 是的啊&#xff0c;书本写的很详细&#xff0c;可是作为一个没基础的小白看起来还是挺吃力的&#xff0c;概念一个接一个的出现&#xff0c;虽然看…

Android应用--简、美音乐播放器添加电话监听

3. 控制音量 4. 获取专辑图片 5. 在线下载歌词 6. 在线搜索音乐 7. 在线下载音乐 8. 实现有趣功能–甩歌 9. 界面美化–实现专辑倒影 10.实现左右界面切换 11.实现在通知栏显示播放状态 12.实现音乐播放的桌面小控件 暂时想到这些功能&#xff0c;如果朋友们有什么建…

Day7 —— 大数据技术之Hive

Hive快速入门系列 Hive的概述什么是Hive&#xff1f;使用Hive的原因 Hive架构Hive安装Hive配置文件修改启动Hive以命令行方式启动&#xff08;在$HIVE_HOME/bin目录下&#xff09;以JDBC连接启动&#xff08;beeline方式连接&#xff09; Hive基本操作Hive数据库操作Hive表操作…

css 动画

transform的3D动画 3D形变函数会创建一个合成层来启用GPU硬件加速 translate transform: translateY(100px);transform: translateX(100px);transform: translateZ(100px);transform: translate3d(100px,100px,100px); // x,y,z的简写rotate deg弧度 transform: rotateX(-40…

C语言学习记录20240622

这次需要用 C 语言库 Allegro 写爆破彗星游戏。项目有一些描述如需要绘制飞船、彗星、子弹&#xff0c;需要响应按键实现飞船加速、减速、转向、开火&#xff0c;需要绘制弹道&#xff0c;需要实现彗星旋转、缩放&#xff0c;需要碰撞检测&#xff0c;需要显示计分。 这些用 w…

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中的元…

赵丽颖纯白茉莉绽放温柔之美

赵丽颖纯白茉莉&#xff0c;绽放温柔之美在这个繁忙喧嚣的娱乐圈&#xff0c;赵丽颖以其独特的魅力&#xff0c;成为了无数人心中的白月光。近日&#xff0c;赵丽颖工作室发布了一组live图&#xff0c;她身着一袭温柔白裙&#xff0c;宛如一朵盛开的纯白茉莉花&#xff0c;美得…