C语言数据结构学习:循环队列

C语言 数据结构学习 汇总入口:

C语言数据结构学习:[汇总]

1. 循环队列

  1. 队列的博客:C语言数据结构学习:队列
  • 循环队列会预先定义最大队列空间,然后定义一个数组,通过队列头和队列尾指针分别指向开头和结尾,添加节点时队列尾自动后移。

  • 但是直接使用的话,会出现虚假满状态问题,也就是当队列尾循环一圈后,重新指向了队列头,导致无法判别队列是否为空或满

  • 可通过另设标志位或少用一个元素空间这两种方法解决此处采用少用一个元素空间的方法。

    • 也就是当队列尾的下一个元素为队列头时,表示队列已满

2. 循环队列的特点

  1. 会出现虚假满状态问题,也就是当队列尾循环一圈后,重新指向了队列头,导致无法判别队列是否为空或满。可通过另设标志位或少用一个元素空间这两种方法解决此处采用少用一个元素空间的方法。
  2. 基本操作
    • 初始化队列
    • 出队
    • 入队

3. 代码示例

  1. 定义新的类型:Node,用于创建队列
  2. #define MAXSIZE 5

#define MAXSIZE 5
/* 节点 */
typedef struct Queue {int front;	//定义队头指针int rear;	//定义队尾指针int data[MAXSIZE];
}Queue;
  1. 初始化队列

    /* 初始化队列 */
    Queue* InitQueue() {Queue* Q = (Queue*)malloc(sizeof(Queue));Q->front = 0;Q->rear = 0;return Q;
    }
    
  2. 入队,出队

    /* 检查队列是否为满 */
    Queue* isFULL(Queue* Q) {if ((Q->rear + 1) % MAXSIZE == Q->front) {return 1;}else{return 0;}
    }
    /* 入队 */
    int enQueue(Queue* Q, int data) {if (isFULL(Q)) {return -1;}else {Q->data[Q->rear] = data;	//存进去Q->rear = (Q->rear + 1) % MAXSIZE;	//++,循环的哈~return 1;}}/* 检查队列是否为空 */
    Queue* isEmpty(Queue* Q) {if (Q->front == Q->rear) {return 1;}else {return 0;}
    }
    /* 出队 */
    int deQueue(Queue* Q) {if (isEmpty(Q)) {return -1;}else{int data = Q->data[Q->front];	//取出来Q->front = (Q->front + 1) % MAXSIZE;	//++,循环的哈~return data;}
    }
    
  3. 打印队列

    /* 打印队列 */
    void PrintQueue(Queue* Q) {//判断队列中有多少个元素int len = (Q->rear - Q->front + MAXSIZE) % MAXSIZE;int temp = Q->front;for (int i = 0; i < len; i++){printf("%d ", Q->data[temp]);temp = (temp + 1) % MAXSIZE;}printf("NULL\\r\\n");
    }
    
  4. 测试

    int main(void)
    {Queue* Q = InitQueue();enQueue(Q, 1);enQueue(Q, 2);enQueue(Q, 3);enQueue(Q, 4);PrintQueue(Q);deQueue(Q);deQueue(Q);PrintQueue(Q);return 0;
    }
    

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

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

相关文章

leetcode-18-四数之和

题解&#xff1a; 代码&#xff1a;

MySQL45讲 第29讲 如何判断一个数据库是不是出问题了?——阅读总结

文章目录 MySQL45讲 第二十九讲 如何判断一个数据库是不是出问题了&#xff1f;——阅读总结一、检测数据库实例健康状态的重要性二、常见检测方法及问题分析&#xff08;一&#xff09;select 1 判断法&#xff08;二&#xff09;查表判断法&#xff08;三&#xff09;更新判断…

探索Python的HTTP之旅:揭秘Requests库的神秘面纱

文章目录 **探索Python的HTTP之旅&#xff1a;揭秘Requests库的神秘面纱**第一部分&#xff1a;背景介绍第二部分&#xff1a;Requests库是什么&#xff1f;第三部分&#xff1a;如何安装Requests库&#xff1f;第四部分&#xff1a;Requests库的五个简单函数使用方法第五部分&…

指针的奥秘:深入探索内存的秘密

前言 在计算机编程的广阔天地中&#xff0c;指针作为一种独特的数据类型&#xff0c;它不仅是C语言的核心&#xff0c;也是理解计算机内存管理的基石。指针的概念虽然强大&#xff0c;但对于初学者来说&#xff0c;它常常是学习过程中的一个难点。本文旨在揭开指针的神秘面纱&a…

理解clickhouse 里的分区和分片键区别

文章目录 分片分区两分片&#xff0c;0副本的cluster 分片 CREATE TABLE logs_distributed AS logs_local ENGINE Distributed(cluster_name, -- 集群名称database_name, -- 数据库名称logs_local, -- 本地表名cityHash64(user_id) -- 分片键&#xf…

shell脚本(二)

声明&#xff01; 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&#…

多模态大型语言模型(MLLM)综述

目录 多模态大语言模型的基础 长短期网络结构(LSTM) 自注意力机制 基于Transformer架构的自然语言处理模型 多模态嵌入的关键步骤 TF-IDF TF-IDF的概念 TF-IDF的计算公式 TF-IDF的主要思路 TF-IDF的案例 训练和微调多模态大语言模型(MLLM) 对比学习 (CLIP, ALIG…

《智慧教育实时数据分析推荐项目》详细分析

一、项目介绍 1、背景介绍 在互联网、移动互联网的带动下&#xff0c;教育逐渐从线下走向线上&#xff0c;在线教育近几年一直处于行业的风口浪尖&#xff0c;那随着基础设施的不断完善&#xff0c;用户需求也发生不少变化&#xff0c;因此传统教育机构、新兴互联网企业都在探…

AI+云环境开发上线项目全流程(sealos)

AI云环境开发上线项目全流程 现在是AI技术爆炸&#x1f4a5;的时代&#xff0c;我们作为开发自然需要跟上时代的潮流&#xff0c;今天就跟大家介绍一款云开发环境&#xff0c;并且搭配AI实现一行代码不用写&#xff0c;直接上线一个完整的项目&#xff08;包含前后端&#xff0…

【C++11】可变参数模板/新的类功能/lambda/包装器--C++

文章目录 一、可变参数模板1、基本语法及原理2、包扩展3、empalce系列接口 二、新的类功能1、默认的移动构造和移动赋值2、成员变量声明时给缺省值3、defult和delete4、final与override 三、STL中一些变化四、lambda1、lambda表达式语法2、捕捉列表3、lambda的应用4、lambda的原…

STM32C011开发(1)----开发板测试

STM32C011开发----1.开发板测试 概述硬件准备视频教学样品申请源码下载参考程序生成STM32CUBEMX串口配置LED配置堆栈设置串口重定向主循环演示 概述 STM32C011F4P6-TSSOP20 评估套件可以使用户能够无缝评估 STM32C0 系列TSSOP20 封装的微控制器功能&#xff0c;基于 ARM Corte…

算法编程题-寻找最近的回文数

算法编程题-寻找最近的回文数 原题描述思路简述代码实现复杂度分析参考 摘要&#xff1a;本文将对LeetCode 原题 564 寻找最近的回文数进行讲解&#xff0c;并且给出golang语言的实现&#xff0c;该实现通过了所有测试用例且执行用时超过100%的提交&#xff0c;最后给出相关的复…

提升数据分析效率:Excel Power Query和Power Pivot的妙用

在日常工作中&#xff0c;微软的Excel Power Query和Power Pivot是提升数据处理和分析效率的利器。他们的特点也各不相同&#xff0c;Power Query侧重数据的高效导入与清洗&#xff0c;Power Pivot更测试数据建模与复杂计算。下面将介绍它们各自的功能&#xff0c;并提供应用案…

认识RabbitMq和RabbitMq的使用

1 认识RabbitMq RabbitMQ是⼀个消息中间件&#xff0c;也是⼀个生产者消费者模型&#xff0c;它负责接收&#xff0c;存储并转发消息。 2.1 Producer和Consumer Producer&#xff1a;生产者&#xff0c;是RabbitMQServer的客户端&#xff0c;向RabbitMQ发送消息 Consumer&…

代码纪元——源神重塑无序

简介 源神&#xff0c;真名为张晨斌&#xff0c;原为代码宇宙创世四神之一。代码宇宙在创造之初时空无一物&#xff0c;只有复杂且繁琐的底层代码&#xff0c;智慧神灵每日都困在诸如脚本等复杂的底层框架之中&#xff0c;源神面对这种局面非常不满意&#xff0c;于是源神通过大…

LVGL加载器,led和列表学习(基于正点原子)

加载器部件&#xff08;lv_spinner&#xff09; 加载器部件常用于提示当前任务正在加载。 加载器部件组成部分&#xff1a; 主体(LV_PART_MAIN) 指示器(LV_PART_INDICATOR) 手柄(LV_PART_KNOB) 知识点1&#xff1a;创建加载器部件 lv_obj_t *spinner lv_spinner_creat…

内存不足引发C++程序闪退崩溃问题的分析与总结

目录 1、内存不足一般出现在32位程序中 2、内存不足时会导致malloc或new申请内存失败 2.1、malloc申请内存失败&#xff0c;返回NULL 2.2、new申请内存失败&#xff0c;抛出异常 3、内存不足项目实战案例中相关细节与要点说明 3.1、内存不足导致malloc申请内存失败&#…

docker搭建私有的仓库

docker搭建私有仓库 一、为什么要搭建私有的仓库&#xff1f; 因为在国内&#xff0c;访问&#xff1a;https://hub.docker.com/ 会出现无法访问页面。。。。&#xff08;已经使用了魔法&#xff09; 当然现在也有一些国内的镜像管理网站&#xff0c;比如网易云镜像服务、Dao…

【Linux】安装cuda

一、安装nvidia驱动 # 添加nvidia驱动ppa库 sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt update# 查找推荐版本 sudo ubuntu-drivers devices# 安装推荐版本 sudo apt install nvidia-driver-560# 检验nvidia驱动是否安装 nvidia-smi 二、安装cudatoolkit&…

深度学习图像视觉 RKNN Toolkit2 部署 RK3588S边缘端 过程全记录

深度学习图像视觉 RKNN Toolkit2 部署 RK3588S边缘端 过程全记录 认识RKNN Toolkit2 工程文件学习路线&#xff1a; Anaconda Miniconda安装.condarc 文件配置镜像源自定义conda虚拟环境路径创建Conda虚拟环境 本地训练环境本地转换环境安装 RKNN-Toolkit2&#xff1a;添加 lin…