算法与数据结构(四)--队列

news2024/11/26 18:33:11

一.队列的基本概念

队列是另一种特殊的表,这种表只在表首(也称为队首)进行删除操作,只在表尾进行插入操作。队列的修改是按先进先出的规则进行的,所以队列又称为先进先出表,First In First Out,简称FIFO表。

如示意图所示,a(1)就是队首元素,a(n)就是队尾元素。队列中的元素是按顺序进入的,退出队列也只能按照这个次序一次退出。

二.队列的基本运算

1.QueueEmpty(Q):测试队列Q是否为空
2.QueueFull(Q):测试队列Q是否已满
3.QueueFirst(Q):返回队列Q的队首元素
4.QueueLast(Q):返回队列Q的队尾元素
5.EnterQueue(x,Q):在队列的Q的队尾插入元素x
6.DeleteQueue(Q):闪出并返回队列Q的队首元素

三.队列的实现

1.用指针实现队列

 因为队列也是一种特殊的表,所以实现与表类似,只不过要实现的基本运算不一样。

2.用循环数组实现队列

四.队列的应用

例一:电路布线问题【广度搜索算法】

印制电路板将布线区域划分成n*m个方格,如图所示。

 精确的电路布线问题要求确定连接方格a的中点到方格b的中点的最短布线方案。在布线时,电路只能沿之心啊或直角布线,如图b所示。为了避免线路相交,已布了线的方格做了封锁标记,其他线路不允许穿过被封锁的方格。
 

下面讨论队列在电路布线问题中的应用。解电路布线问题,首先从起始位置a开始,将它作为第1个考察方格。与该考察方格相邻并且可达的方格成为待考察方格,加入到带考察方格队列中,并标记为1,即从其实方格a到这些方格的距离为1。然后,算法从带考察方格队列中取出队首结点,作为下一个考查方格,并将与当前考查方格相邻且为标记过的方格标记为2,存入代考察方格队列。这个过程一直继续到算法搜索到目标方格b或代考察方格队列为空时止。

在实现上述算法之前,首先定义一个表示电路板上下方格位置的结构Pos,它的两个成员row和col分别表示方格所在的行和列。

typedef struct pnode *Pos;//位置结点指针类型
struct pnode{//位置结点
    int row,//行
       col;//列
}Pnode;

此时队列元素的类型是Pos,因此队列元素QItem定义如下。

typedef Pos QItem;//队列元素类型
typedef QItem* Qaddr;//队列元素指针类型

Pos NewPos(){
    return (Pos)malloc(sizeof(Pnode));
}

void QItemShow(QItem x){
    printf("%d %d\n",x->row,x->col);
}


 在实现上述算法是,用一个二维数组g表示所给的方格列阵。初始是,g[i][j]=0,表示该方格允许布线;而g[i][j]=1表示该方格被封锁,不允许布线。为便于处理方格边界的情况,算法在所给方格阵列四周设置一道“围墙”,即增设标记为“1”的附加方格。算法爱是是测试初始方格与目标方格是否相同。若这两个翻个相同则不必计算,直接返回最短距离0,否则算法设置方格阵列的围墙,初始化位移矩阵off。算法将起始位置的距离标记为2。由于数字0和1用于表示方格的开放或封锁状态,所以在表示距离时不用这两个数字,而将距离的值都加2。实际距离应为标记距离减2。算法从起始位置a开始,标记所有标记距离为3的方格并存入考察队列,然后一次标记所有标记距离为4,5...的方格,直至到达目标方格b或待考察方格队列为空。

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

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

相关文章

高温介电参数测试

高温介电参数测试 在新材料科研领域,高温介电参数的测量是众多高校和研究所经常会面临的问题。精科声学所事业部电子和专业的高温介电系统集成商合作,使用 JKZC-YDZK03A型高温压电阻抗综合分析仪进行配套系统集成,满足客户高温介电测量和曲线…

什么是 web3?

在百度搜索引擎输入 “Web3”、“大厂”。跳出来基本都是这样的标题. 以及如今的互联网行业 “哀鸿遍野”,不仅内卷,还裁员。然后掀起一阵风,猛吹 Web3 的好,数据回归用户……最后再 “威逼利诱” 一下,Web3 就是 20 年…

【业务功能篇50】ObjectMapper-将java对象转为json字符串

ObjectMapper可以实现Java对象和json字符串间互相转换,我们经常用到的是它的Java对象转json字符串功能。 这里目的是 Java对象 json字符串相互转换 api 【json字符串转为Java对象:readValue(json字符串,类.class)】【Java对象转为json字符串&#xff1a…

读kafka生产端源码,窥kafka设计之道(下)

背景 在上一篇文章《读kafka生产端源码,窥kafka设计之道(上)》 留下了kafka设计上比较优秀的一个点;内存的循环使用。本篇文章准备盘盘它。 好奇 为什么 kafka减少发送消息时向JVM频繁申请内存,就可以降低JVM GC的执…

idea 设置了 vm options后无法启动

今天想扩展ideaj的JVM 设置了 vm options后无法启动 找了很久,重新卸载后安装也没有用 后面直接打开idea的bat文件 找到自己idea使用的.vmoptions文件,我是因为之前idea有缓存,一直用的我修改的文件,后面删了就可以启动了

看了我项目中的商品功能设计,同事也开始悄悄模仿了...

商品功能作为电商系统的核心功能,它的设计可谓是非常重要的。就算不是电商系统中,只要是涉及到需要交易物品的项目,商品功能都具有很好的参考价值。今天就以mall项目中的商品功能为例,来聊聊商品功能的设计与实现。 mall项目简介 …

前端实习第一周周记

第一天 第一天来的时候,十点左右就开始跑代码了,公司发了电脑,但由于自己的电脑环境比较齐全,所以就先用自己的电脑跑的代码。 一共是两个项目,一个pc类似于管理系统,还有一个是微信小程序。 拉代码的过…

3DVR全景旅游,最新数字化智慧文旅

导语: 随着科技的飞速发展,3DVR全景旅游正以其独特的特点和无限的优势,成为当今智慧文旅的领航者。穿戴上VR设备,只需一个轻轻的点击,你将被带入一个全新的数字世界,领略美景、探索奇迹。让我们一起深入了…

el-Cascader 中div上绑定keyDown事件

keydown,keyup,keypress 事件默认是给页面上可以聚焦的元素绑定键盘事件,例如input输入框,点击输入框即代表聚焦在该元素上。那么想要给div或者其他不能聚焦的元素上使用键盘事件怎么处理呢?这里用到tabindex属性。 …

Idea maven窗口 展示不分级 maven层级混乱

1. 正在写分布式im 开源项目:nami-im: 分布式im, 集群 zookeeper netty kafka nacos rpc主要为gate(长连接服务) logic (业务) lsb (负载均衡)store(存储) - Gitee.com …

redis - 学习笔记

一、NOSQL 1、概述 泛指非关系型数据库 关系型数据库:表格、行、列 2、特点 方便拓展大数据量,高性能(1s写8w次,读取11w,NOSQL的缓存记录级,是一种细粒度的缓存,性能比较高)数据…

网安第二天笔记

ssh 22端口 账号密码登陆、证书登录 smtp 25端口 邮件协议 DNS 53 DHCP 67 68端口 四个包 1.DHCP服务器:服务器管理IP地址池和配置参数 2.客户端请求:发送DHCP广播请求,discover消息 3.DHCP服务器回应:收到discover会回复offer…

Vue2.x和Vue3.x面试常问知识点-面试题

SPA单页面的理解,它的优缺点分别是什么? 是什么 SPA( single page application )仅在 Web 页面初始化时加载相应的 HTML、JavaScript 和 CSS。 一旦页面加载完成,SPA 不会因为用户的操作而进行页面的重新加载或跳转 而…

数据结构与算法——链栈及基本操作(包含入栈和出栈)详解

链栈,即用链表实现栈存储结构。 链栈的实现思路同顺序栈类似,顺序栈是将数顺序表(数组)的一端作为栈底,另一端为栈顶;链栈也如此,通常我们将链表的头部作为栈顶,尾部作为栈底&#…

C语言程序设计——文件操作

一、文件的打开和关闭 1. 文件指针 每个被使用的文件,都会在内存中开辟一个相应的文件信息区,用来存储文件的相关信息(文件名、文件状态、文件位置……)。 这些信息是保存在一个结构体变量中,该结构体类似是由系统声明…

选择优秀的敏捷项目管理工具:指南与考虑因素!

如何选择优秀的敏捷项目管理工具?敏捷项目管理工具是用于管理和执行敏捷项目的任何工具。在最基本的形式中,白板和便签可以被认为是敏捷管理工具。敏捷工具和其他项目管理工具之间的主要区别在于它们处理敏捷框架的能力,例如看板和Scrum。 换句话说&…

OpenAI推动人工智能治理向前发展

OpenAI和其他领先的人工智能实验室正在做出一系列自愿承诺,以加强人工智能技术和我们的服务的安全性、安全性和可信度。这个过程由白宫协调,是在美国和世界各地推进有意义和有效的人工智能治理的重要一步。 作为我们建立安全和有益的AGI的使命的一部分&a…

符合国内企业国产化需求的进销存系统

编者按:随着国内企业的数字化转型以及国产信创的要求,企业在选择软件系统的时候更加关注国产化这方面的是否能够被满足,信创需求的被满足,意味着可适用的范围更加宽泛,对企业来说,是一个花小成本有大收益的…

【简单图论】CF1833 E

Problem - E - Codeforces 题意&#xff1a; 思路&#xff1a; 显然&#xff0c;最大值就是什么边都不连的连通块个数&#xff0c;最小值就是能连的都连上 那就是&#xff0c;如果一个连通块存在度为1的点&#xff0c;就把它当作接口连接 Code&#xff1a; #include <b…

23.动态加载

动态加载 html部分 <div class"loading"> </div>css部分 *{margin: 0;padding: 0; } body{background-color: #2c3e50;display: flex;align-items: center;justify-content: center;height: 100vh;overflow: hidden; } .loading{position: relative;w…