顺序队列,循环队列,链队列

队列

  • 先看队列接口和结点类
  • 1. 顺序队列
  • 2. 循环队列
  • 3. 链队列

先看队列接口和结点类

package com.lovely.queue;/** * 2020年4月26日下午2:42:44* * @author echo lovely**/
public interface IQueue {public void clear(); // 将队列置空public boolean isEmpty(); // 判断队列是否为空public int length(); // 返回队列的数据元素个数public Object peek(); // 返回队首元素 public void offer(Object x) throws Exception; // x插入队列,队尾入队public Object poll(); // 返回队首元素,并删除 队首出队public void display(); // 输出队列中所有数据元素}package com.lovely.linearList;/** * 2020年4月1日下午8:25:10* * @author echo lovely** @category 节点类 用于存数据 和 后继节点*/public class Node {public Object data; // 存放节点数据值public Node next; // 存放后继节点public Node() {this(null, null);}// 只有节点值的构造函数public Node(Object data) {this(data, null);}// 带有节点值和后继节点的构造函数public Node(Object data, Node next) {this.data = data;this.next = next;}
}

1. 顺序队列

package com.lovely.queue;/*** @author echo lovely** 2020年4月26日下午3:03:05* * 队列的顺序储存结构* 队首出队(删除),队尾入队(插入)。*/
public class SeqQueue implements IQueue {private Object[] queueElem; // 队列的储存空间private int maxSize; // 队列的最大储存单元个数private int front; // 指向队首元素private int rear; // 指向队尾元素的下一个元素	// 构造最大储存单元为maxSize的空队列public SeqQueue(int maxSize) {this.maxSize = maxSize;front = rear = 0;queueElem = new Object[maxSize];}@Overridepublic void clear() {// 队列置空front = rear = 0;	}@Overridepublic boolean isEmpty() {// 队列是否为空		return front == rear;}@Overridepublic int length() {// 队列长度return rear - front;}@Overridepublic Object peek() {// 返回队首元素if (isEmpty())return null;return queueElem[front];}@Overridepublic void offer(Object x) throws Exception {// 队尾入队if (rear == maxSize)throw new Exception("队列已满");queueElem[rear] = x;rear ++; // 指向队尾的下一个元素}@Overridepublic Object poll() {// 出队 只不过是不显示罢了if (isEmpty())return null;front ++; // 指向原来队首元素的下一个元素return queueElem[front];}@Overridepublic void display() {if (!isEmpty()) {for (int i = front; i < rear; i++) {System.out.print(queueElem[i] + "\t");}} elseSystem.out.println("队列为空!");}}
  • 测试
package com.lovely.queue;public class TestSeqQueue {public static void main(String[] args) {// 顺序队列SeqQueue sq = new SeqQueue(6);try {// 入队sq.offer(1);sq.offer(2);sq.offer(3);sq.offer(4);} catch (Exception e) {e.printStackTrace();}System.out.println("队列长度 " + sq.length());Object obj = sq.poll();System.out.println(obj + "出队后,长度 " + sq.length());System.out.println("队首元素:" + sq.peek());sq.display();/*		这里有问题,多次入队出队操作,造成有存储空间却不能进行入队操作的"假溢出"现象try {sq.offer(88);sq.offer(88);sq.poll();sq.poll();sq.offer(88);sq.poll();} catch (Exception e) {e.printStackTrace();}System.out.println("\n长度 " + sq.length());sq.display();*//*
队列长度 4
2出队后,长度 3
队首元素:2
2	3	4
*/}}

2. 循环队列

package com.lovely.queue;/*** * @author echo lovely** 2020年5月19日下午8:53:03* * 循环顺序队列* 顺序队列的多次入队和出队 会造成有储存空间 却不能进行入队操作的假溢出现象。*/
public class CircleSeqQueue {private Object[] queueElem; // 队列的储存空间private int front; // 指向队首元素private int rear; // 指向队尾元素的下一个储存元素private int maxSize; // 队列的最大储存单元个数// 构造最大储存单位个数为maxSize的空队列public CircleSeqQueue(int maxSize) {front = rear = 0;queueElem = new Object[maxSize];this.maxSize = maxSize;}// 将队列置空public void clear() {front = rear = 0;}// 判断队列是否为空public boolean isEmpty() {return front == rear;}// 队列的长度public int length() {return (rear - front + maxSize) % maxSize; }// 读取队首元素public Object peek() {if (isEmpty())return null;return queueElem[front];}// 入队public void offer(Object x) throws Exception {if ((rear + 1) % maxSize == front) throw new Exception("队列已满");queueElem[rear] = x;rear = (rear + 1) % maxSize;}// 出队public Object poll() {if (rear == front)return null;Object p = queueElem[front];front = (front + 1) % maxSize;return p;}// 遍历队列public void display() {if (!isEmpty()) {for (int i = 0; i < rear; i = (i + 1) % maxSize) {System.out.print(queueElem[i] + " ");}} elseSystem.out.println("此队列为空!");}
}
  • 测试
package com.lovely.queue;public class TestCircleSeqQueue {public static void main(String[] args) {// 构造长度为10的队列CircleSeqQueue csq = new CircleSeqQueue(10);try {csq.offer(1);csq.offer(2);csq.offer(3);csq.offer(4);csq.offer(5);csq.offer(6);} catch (Exception e) {e.printStackTrace();}System.out.println("队首元素:" + csq.peek());System.out.println("出队:" + csq.poll());csq.display();}}/**
队首元素:1
出队:1
2 3 4 5 6 
*/

3. 链队列

package com.lovely.queue;import com.lovely.linearList.Node;/*** * @author echo lovely* 2020年6月7日下午7:20:02* * 链队列 * 使用单链表实现* 实现入队队尾 出队队首, 没有中间的插入或者删除* * 无需头节点 , front指向头节点 rear指向队尾结点便可*/
public class LinkQueue implements IQueue {private Node front; // 队首指针private Node rear; // 队尾指针// 构造空队列public LinkQueue() {front = rear = null;}public void clear() {front = rear = null;}public boolean isEmpty() {// 队首是否为空return front == null;}@Overridepublic int length() {Node p = front;int length = 0;while (p != null) {p = p.next;length ++;}return length;}// 返回队首元素值public Object peek() {if (isEmpty()) return null;return front.data;}@Overridepublic void offer(Object x) throws Exception {// 入队Node s = new Node(x);if (!isEmpty()) { // 队列非空rear.next = s;rear = s;} else front = rear = s;}// 出队public Object poll() {if (front == null)return null;Node p = front;front = front.next;if (p == rear) {rear = null; // 删除结点为队尾结点时需要修改rear}return p.data;}public void display() {if (!isEmpty()) {for(Node p = front;p != null;p = p.next) {System.out.print(p.data + "\t");}System.out.println();} else {System.out.println("此队列为空");}}}
  • 测试
package com.lovely.queue;public class TestLinkQueue {public static void main(String[] args) {// 链队列的增删改查LinkQueue lq = new LinkQueue();try {lq.offer(2);lq.offer(3);lq.offer(5);lq.offer(7);lq.offer(11);} catch (Exception e) {e.printStackTrace();}System.out.println("入队的队列:");lq.display();System.out.println("队首元素:" + lq.peek());System.out.println("队首出队:" + lq.poll());lq.display();System.out.println("队列的长度为:" + lq.length());}}/**
入队的队列:
2	3	5	7	11	
队首元素:2
队首出队:2
3	5	7	11	
队列的长度为:4*/

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

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

相关文章

Fashion-MNIST数据集离线加载办法

从MXNet上下载了数据集&#xff0c;从其它地方下载的数据集会出现校验不通过而重复下载&#xff0c;使用书中代码就是在Mxnet上下载数据集&#xff1b;数据完全下载后&#xff0c;找到数据后&#xff0c;新建一个目录&#xff0c;譬如叫做./data/fashion-mnist&#xff0c;把数…

优先级队列

优先级队列优先级结点类优先级队列接口优先级队列具体实现测试优先级结点类 package com.lovely.queue;public class PriorityNode {/*** author echo lovely* 2020年6月7日下午8:52:08* 优先级结点类*/public Object data; // 结点数据域public int priority; // 结点的优先级…

残差网络(ResNet)

普通块 残差块 现在一个大概的理解是&#xff0c;增加x这条“短路”后&#xff0c;肯定优于&#xff08;恒等映射&#xff09;&#xff0c;可以考虑两种情况&#xff1a;可以拟合出远远高于&#xff08;恒等映射&#xff09;&#xff0c;或者根本拟合不出高于&#xff08;恒等…

AI绘画训练一个扩散模型-上集

介绍 AI绘画&#xff0c;其中最常见方案基于扩散模型&#xff0c;Stable Diffusion 在此基础上&#xff0c;增加了 VAE 模块和 CLIP 模块&#xff0c;本文搞了一个测试Demo&#xff0c;分为上下两集&#xff0c;第一集是denoising_diffusion_pytorch &#xff0c;第二集是diff…

顺序串的实现

顺序串接口查找增加...测试接口 package com.lovely.string;/*** * author echo lovely* 2020年6月9日下午6:44:31** 串的接口描述*/ public interface IString {public void clear();public boolean isEmpty(); public int length(); public char charAt(int i) throws Excep…

WPF多线程UI更新——两种方法

WPF多线程UI更新——两种方法 前言 在WPF中&#xff0c;在使用多线程在后台进行计算限制的异步操作的时候&#xff0c;如果在后台线程中对UI进行了修改&#xff0c;则会出现一个错误&#xff1a;&#xff08;调用线程无法访问此对象&#xff0c;因为另一个线程拥有该对象。&…

jdbc万能dao

jdbc万能dao一&#xff0c;为何封装万能dao二&#xff0c;代码实现一&#xff0c;为何封装万能dao 不用框架&#xff0c;纯jdbc连接数据库&#xff0c;会用到dao包&#xff0c;如果每个表都要写增删改查&#xff0c;一个dao至少四个方法&#xff0c;dao会有大量代码重复&#…

5月27日

其实前天我想说我有点理解我爸了 当年到福建的时候跟现在差不多吧 气候 方言 吃的 住的 跟自己原来习惯的完全是不同 恐怕人人都会问这到底是为了什么 能为了什么呢&#xff1f; 路走到这儿了 有的是自己选的 有的不是 但已经走到这里了 当时晚上到福建家里的 第二天醒来看 屋子…

二叉树的递归遍历

二叉树遍历一&#xff0c;什么是二叉树二&#xff0c;递归实现2.1 结点类描述2.2 三种递归2.2 测试一&#xff0c;什么是二叉树 在计算机科学中&#xff0c;二叉树是每个结点最多有两个子树的树结构。通常子树被称作"左子树"&#xff08;left subtree&#xff09;和&…

概率论的公理结构

样本点 一个随机事件出现的可能的结果叫做样本点。 类比平面几何&#xff0c;线、面、体也是由点组成的集合&#xff0c;研究的是点线面关系及性质&#xff0c;同样样本点也是组成事件&#xff08;集合&#xff09;的材料&#xff0c;是集合的基本元素&#xff0c;把这些样本…

python词云的简单使用

词云的生成所需库代码实现wordclod参数说明具体实现效果展示所需库 wordcloud, jieba, imageiowordcloud 词云库&#xff0c;用来统计文本文档里面出现的高频词汇&#xff0c;或者句子&#xff0c;以图片可视化的方式显示出来jieba库&#xff0c;分割中文的库&#xff0c;把较…

(一)Neo4j在Centos7虚拟机上的安装

1、什么是图数据库&#xff1f; 图数据库是基于数学里图论的思想和算法而实现的高效处理复杂关系网络的新型数据库系统。图形数据库善于高效处理大量的、复杂的、互连的、多变的数据。其计算效率远远高于传统的关系型数据库。图形数据库在社交网络、实时推荐、征信系统、人工智…

代码演示 .NET 4.5 自带的 ReadonlyCollection 的使用

代码如下&#xff1a; 1. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConfigurationLibrary {public class ConfigElement{public int Id { get; set; }public string Value { get; set…

(二)Cypher语言常用方法举例

1、概述 “Cypher”是一个描述性的类Sql的图操作语言。相当于关系数据库的Sql&#xff0c;可见其重要性&#xff01;其语法针对图的特点而设计&#xff0c;非常方便和灵活。没有Join&#xff0c;是一大特点&#xff01;学好Cypher是学好Neo4j的关键&#xff0c;也是核心所在&a…

Java高新技术 枚举

&#xfeff;&#xfeff;Java高新技术 枚举 知识概要&#xff1a; (1)为什么要有枚举 (2)枚举的示例 (3)枚举的应用 (4)枚举的高级应用 (1)为什么需要枚举 问题&#xff1a;要定义星期几或性别的变量&#xff0c;该怎么定义&#xff1f; 假设用1-7分别表示星期一到星期日&am…

github 人像卡通化探索项目

把项目下载到本地 下载地址 https://github.com/minivision-ai/photo2cartoon安装依赖库 python 3.7 # 3.x版本都可 pytorch 1.4 tensorflow-gpu 1.14 # tesorflow 得是1.0版本&#xff0c;2.0版本语法部分改变&#xff0c;不然项目运行会出错 face-alignment dlibpytorch …

浅谈城市规划在移动GIS方面的应用发展

1、概述 城市建设进程加快&#xff0c;城市规划管理工作日趋繁重&#xff0c;各种来源的数据产生各种层出不穷的问题&#xff0c;严重影响城市规划时的准确性&#xff0c;为此全面合理的掌握好各方面的城市规划资料才能做出更加科学的决策。移动端的兴起为规划动态方面提供了极…

(四)Neo4j删除数据需要注意的问题

1、先删关系&#xff0c;再删节点 # 删除所有记录 MATCH (n) OPTIONAL MATCH (n)-[r]-() DELETE n,r 2、彻底删除节点标签名&#xff0c;需要删除前期对该标签名建立的索引 # 查看全部索引 :schema# 删除索引 drop index on :Person(id)# 当索引删除不掉时&#xff0c;可能是…

jsp阶段总结

目录web开发jsp是运行在服务器端还是客户端? 服务端 js是运行在服务器端还是客户端? 客户端 jsp的本质是什么? jsp原理 jsp的本质就是servlet jsp在服务器中,当浏览器请求该jsp时,jsp文件在服务器中会经历什么过程? 转译:将jsp文件转译成java文件 编译:将转译后的java文…