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

2024-06-23 08:44

本文主要是介绍基于顺序存储的环形队列算法库构建,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

相关文章

基于Python构建一个高效词汇表

《基于Python构建一个高效词汇表》在自然语言处理(NLP)领域,构建高效的词汇表是文本预处理的关键步骤,本文将解析一个使用Python实现的n-gram词频统计工具,感兴趣的可以了解下... 目录一、项目背景与目标1.1 技术需求1.2 核心技术栈二、核心代码解析2.1 数据处理函数2.2 数据处理流程

Java中常见队列举例详解(非线程安全)

《Java中常见队列举例详解(非线程安全)》队列用于模拟队列这种数据结构,队列通常是指先进先出的容器,:本文主要介绍Java中常见队列(非线程安全)的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一.队列定义 二.常见接口 三.常见实现类3.1 ArrayDeque3.1.1 实现原理3.1.2

Python FastMCP构建MCP服务端与客户端的详细步骤

《PythonFastMCP构建MCP服务端与客户端的详细步骤》MCP(Multi-ClientProtocol)是一种用于构建可扩展服务的通信协议框架,本文将使用FastMCP搭建一个支持St... 目录简介环境准备服务端实现(server.py)客户端实现(client.py)运行效果扩展方向常见问题结

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

C++ RabbitMq消息队列组件详解

《C++RabbitMq消息队列组件详解》:本文主要介绍C++RabbitMq消息队列组件的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. RabbitMq介绍2. 安装RabbitMQ3. 安装 RabbitMQ 的 C++客户端库4. A

golang实现延迟队列(delay queue)的两种实现

《golang实现延迟队列(delayqueue)的两种实现》本文主要介绍了golang实现延迟队列(delayqueue)的两种实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录1 延迟队列:邮件提醒、订单自动取消2 实现2.1 simplChina编程e简单版:go自带的time

一文教你Java如何快速构建项目骨架

《一文教你Java如何快速构建项目骨架》在Java项目开发过程中,构建项目骨架是一项繁琐但又基础重要的工作,Java领域有许多代码生成工具可以帮助我们快速完成这一任务,下面就跟随小编一起来了解下... 目录一、代码生成工具概述常用 Java 代码生成工具简介代码生成工具的优势二、使用 MyBATis Gen

Python使用Reflex构建现代Web应用的完全指南

《Python使用Reflex构建现代Web应用的完全指南》这篇文章为大家深入介绍了Reflex框架的设计理念,技术特性,项目结构,核心API,实际开发流程以及与其他框架的对比和部署建议,感兴趣的小伙... 目录什么是 ReFlex?为什么选择 Reflex?安装与环境配置构建你的第一个应用核心概念解析组件

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.