当前位置: 首页 > news >正文

链式队列----数据结构

队列的基本概念

队列是一种操作受限的线性表(先进先出),只允许在队尾插入,队头删除。

例如去银行办理业务,肯定是先来的先出去,后来的人排在后方,只有第一个人业务办理完了,才会有一个人出队列。

队列的实现

结点和指针的定义

#define MAX_SIZE 50typedef int DateElem;         //队列中的元素类型
typedef struct _QueueNode
{DateElem date;struct _QueueNode* next;  //和单链表结点的定义一样
}QueueNode; typedef QueueNode*  QueuePtr;      //可以用QueuePtr创建一个指向结点的指针typedef struct LinkQueue           //定义的是队列头、尾指针
{int length;    //存储队列的长度,因为要频繁获取长度QueuePtr head; //指向第一个结点,队头指针QueuePtr tail; //指向最后一个结点,队尾指针
}Queue;

初始化

//初始化队列
bool InitQueue(Queue* sq)
{if (!sq) return false; sq->length = 0;sq->head = NULL;     //置为空,最开始为空队列sq->tail = NULL;return true;
}

判断是否为空

bool IsEmpty(Queue* sq)
{if (!sq) return false;//头指针没有指向任何一个结点if (sq->head == NULL) //不能用 sq->head == sq->tail 来判断,因为队列只有一个元素时,头尾指针指向同一个结点,但是可以用 sq->head == sq->tail = NULL,意思是三个都相等{return true;}return false;
}

判断是否满了

bool IsFull(Queue* sq)
{if (!sq) return false;if (sq->length >= MAX_SIZE) //长度最开始为0,插入一个,长度 +1{return true;}return false;
}

插入(入队)

bool EnterQueue(Queue* sq, DateElem *e)
{if (!sq) return false;   if (IsFull(sq)) return false; //队列满了,无法继续插入QueueNode *p = new QueueNode;p->date = *e;p->next = NULL;               //因为是最后一个结点,没有直接后继if (IsEmpty(sq)) //空队列{sq->head = p;sq->tail = p;}else{//此时head指向第一个结点,tail指向最后一个结点sq->tail->next = p;sq->tail = p;          //更新tail指针}sq->length++;              //别忘记了return true;
}

删除(出队)

bool PopQueue(Queue* sq,DateElem *date)
{if (!sq || IsEmpty(sq)) return false;if (!date) return false;//此时head指向第一个结点,tail指向最后一个结点QueueNode* p = sq->head;sq->head = p->next;         //head指向第二个结点*date = p->date;            //返回删除的值delete p;//如果队列只有一个结点,而恰好刚刚删除了,也就是空队列if (IsEmpty(sq)){sq->head = NULL; //head已经为空,写一下更整齐(可以不用写)sq->tail = NULL;}sq->length--;return true;
}

打印队列

bool Print(Queue* sq)  //和链表的打印一样
{if (!sq ) return false; if (IsEmpty(sq)){cout << "队列为空" << endl;}QueueNode* p = sq->head;cout << "队列中的元素:";while (p != NULL){printf("%d ", p->date);p = p->next;}cout << endl;return true;
}

清空队列

//清空队列
bool ClearQueue(Queue* sq)
{if (!sq || IsEmpty(sq)) return false; QueueNode* p = sq->head,*q = NULL;while (p != NULL) {q = p->next;    delete p;            p = q;}sq->length = 0;sq->head = NULL;sq->tail = NULL;return true;
}

获取队头元素

bool GetHead(Queue* sq, DateElem* date)
{if (!date || !sq || IsEmpty(sq) )return false; *date = sq->head->date;   //指针返回队首元素return true;}

主函数代码

可以在主函数中测试一下刚刚实现的功能,还有一些功能可以自己去实现,比如获取队列长度。

int main(void)
{Queue* sq = new Queue ;DateElem* s = new DateElem;//1.初始化队列InitQueue(sq);for (int i = 1; i <= 7; i++){if (EnterQueue(sq, &i)){cout << "入队成功" << endl;}else{cout << "入队失败," << i << "未插入" << endl;}}Print(sq);for (int i = 0; i < 8; i++){if (PopQueue(sq, s)){cout << "出队的元素是" << *s << endl;}else{cout << "出队失败" << endl;}Print(sq);}ClearQueue(sq);Print(sq);return 0;
}

相关文章:

链式队列----数据结构

队列的基本概念 队列是一种操作受限的线性表&#xff08;先进先出&#xff09;&#xff0c;只允许在队尾插入&#xff0c;队头删除。 例如去银行办理业务&#xff0c;肯定是先来的先出去&#xff0c;后来的人排在后方&#xff0c;只有第一个人业务办理完了&#xff0c;才会有…...

VM虚拟机VMware Fusion(13.5.0)

VMware Fusion提供了在Apple Mac上运行Windows、Linux等操作系统的最佳方式&#xff0c;无需重新启动。Fusion 13支持运行macOS 12及更高版本的Intel和Apple Silicon Mac&#xff0c;并包含面向开发人员、IT管理员和日常用户的功能。 Fusion 13 新增功能 支持新的客户机操作系…...

自动化测试08

Junit 为什么学了Selenium还需学习Junit Selenium自动化测试框架&#xff1b;Junit单元测试框架。 拿着一个技术写自动化测试用例&#xff08;Selenium3&#xff09; 拿着一个技术管理已经编写好的测试用例&#xff08;Junit5&#xff09; Junit相关的技术 Junit是针对Java的一…...

d3dx9_43.dll丢失有什么办法可以解决,解决d3dx9_43.dll丢失

通常d3dx9_43.dll丢失都是在运行游戏时汤出的d3dx9_43.dll找不到的错误窗口&#xff0c;因为d3dx9_43.dll文件更多是在使用游戏时会被调用的dll文件&#xff0c;d3dx9_43.dll是属于DirectX9的一个组件&#xff0c;DirectX9是游戏系统中的一个重要程序&#xff0c;所以当d3dx9_4…...

【C++】: auto关键字(C++11)+基于范围的for循环(C++11)+指针空值nullptr(C++11)

auto关键字&#xff08;C11&#xff09; 随着程序越来越复杂&#xff0c;程序中用到的类型也越来越复杂&#xff0c;经常体现在&#xff1a; 类型难于拼写含义不明确导致容易出错 #include <string> #include <map> int main() {std::map<std::string, std::…...

华为OD机试 - 玩牌高手 - 动态规划(Java 2023 B卷 100分)

目录 一、题目描述二、输入描述三、输出描述四、解题思路具体规则如下&#xff1a;具体步骤如下&#xff1a; 五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 一、题目描述 给定一个长度为n的整型数组&#xff0…...

【java】【重构二】分模块开发版本锁定以及耦合(打包)实战

目录 一、创建dependencyManagement标签 二、 将需要版本控制的依赖版本进行标签设置 三、将需要版本控制的依赖从各子模块迁移到此处 四、将父模块的依赖版本控制 五、删除子模块的全部版本 1、bocai-web-management模块 2、bocai-utils模块 六、打包 1、确定代码都…...

Excel提高工作效率常用功能

定位快捷键使用 CtrlG或者F5 根据不同类别插入空行 例&#xff1a;以下表&#xff0c;以部门为单位&#xff0c;每个部门后插入空白行 部门姓名出勤基本工资岗位津贴公体加班绩效基数工龄应发合计财务部姓名73115002101710财务部姓名11116006003401502363财务部姓名5271000…...

物联网_00_物理网介绍

1.物联网为什么会出现? 一句话-----追求更高品质的生活, 随着科技大爆炸, 人类当然会越来越追求衣来伸手饭来张口的懒惰高品质生活, 最早的物联网设备可以追溯到19世纪末的"在线可乐售卖机"和"特洛伊咖啡壶"(懒惰的技术人员为了能够实时看到物品的情况而设…...

华为智选SF5,AITO问界的车怎么样

#华为智选 #赛力斯SF5 #aito问界m5 #aito问界m7 #华为汽车 华为的车&#xff0c;后杠焊两点&#xff0c;拉车的时候&#xff0c;拖车钩断了&#xff0c;后杠拉出来了&#xff0c;这质量可以吗&#xff1f;是否应该全部召回&#xff1f;M5&#xff0c;M7是不是也这样&#xff1f…...

大数据测试用例分析

基于大数据分析&#xff0c;对业务系统产生的日志进行智能分析&#xff0c;能够识别日志中的接口、参数、业务流&#xff0c;并依据分析的结果生成测试用例。 问题与背景 业务复杂 业务系统的复杂性&#xff0c;对测试人员的业务能力提出严格要求&#xff0c;加重测试成本。 …...

Java中的泛型:高效编程的利器

泛型—— 一种可以接收数据类型的数据类型。泛型是Java中的一种参数化类型机制&#xff0c;通过类型参数&#xff0c;可以在类、接口和方法中实现通用的代码。 泛型的引入 泛型&#xff08;Generics&#xff09;是 Java 编程语言中引入的一个重要特性&#xff0c;它可以让程序…...

Mysql的關鍵字或者保留字

1.group 不能用group作爲字段名 ### SQL: insert INTO biz_customer_group ( id,customer,group ) VALUES (?,?,?) ON DUPLICATE key update customer VALUES(customer), group VALUES(group) ### Cause: java.sql.SQLSyntaxErrorException: You have an error in your S…...

24、Flink 的table api与sql之Catalogs(java api操作分区与函数、表)-4

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…...

React基础: 项目创建 JSX 基础语法 React基础的组件使用 useState状态 基础样式控制

01 React 文章目录 01 React一、React是什么1、React的优势 二、React开发环境搭建1、创建项目2、运行项目3、项目的目录结构 三、JSX基础1、什么是 JSX代码示例&#xff1a; 2、JSX使用场景2.1代码示例&#xff1a; 3、JSX中实现列表渲染4、JSX - 实现基本的条件渲染5、JSX - …...

力扣每日一题49:字母异位词分组

题目描述&#xff1a; 给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan", "ate&quo…...

TechSmith Camtasia Studio 23.3.2.49471 Crack

全新的Camtasia 2023.2 Camtasia Studio是专业的屏幕录像和视频编辑的软件套装。软件提供了强大的屏幕录像&#xff08;Camtasia Recorder&#xff09;、视频的剪辑和编辑&#xff08;Camtasia Studio&#xff09;、视频菜单制作&#xff08;Camtasia MenuMaker&#xff09;、视…...

进程【Linux系统编程】

一、先谈硬件——冯诺依曼体系结构 存储器&#xff1a;内存&#xff08;硬盘是外存&#xff09; 输入设备&#xff1a;鼠标、键盘、摄像头、话筒、磁盘、网卡…… 输出设备&#xff1a;显示器、播放器硬件、磁盘、网卡…… 输入输出设备是外部设备&#xff0c;简称外设。 中央…...

【Edabit 算法 ★☆☆☆☆☆】【分钟转秒数】Convert Minutes into Seconds

【Edabit 算法 ★☆☆☆☆☆】【分钟转秒数】Convert Minutes into Seconds math numbers Instructions Write a function that takes an integer minutes and converts it to seconds. Examples convert(5) // 300 convert(3) // 180 convert(2) // 120Notes Don’t forge…...

Django实现音乐网站 ⒇

使用Python Django框架做一个音乐网站&#xff0c; 本篇音乐播放器-添加播放音乐功能实现。 目录 创建播放器数据表 设置表结构 执行创建表 命令 执行 数据表结构 添加单个歌曲 创建路由 加入播放器视图 模板处理 基类方法 子页面调用 优化弹窗 加入layui文件 基…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...