顺序队列:

概念:

队列是一种先进先出的线性表,只允许在一端插入,另一端删除。允许插入的一端称为队尾,允许删除的一端称为队头

顺序队列的实现:

 import org.junit.jupiter.api.Test;

 /**
* 顺序队列
* @author wydream
*
*/ public class QueueSequence { private String[] arr;//队列数组
private int end=0;//队尾标志 //向队列中添加元素
public void push(String[] arr,String value) {
if(end<arr.length) {
arr[end]=value;
end++;
return;
}else {
System.out.println("队列已经满了");
return;
} } //取出队列元素
public String pop(String[] arr) {
String rs;
if(arr[0]==null) {
System.out.println("队列为空,请先向队列中添加元素");
return null;
}else {
rs=arr[0];
arr[0]=null;
move(arr);
return rs;
}
} //队列元素向前移动
public void move(String[] arr) {
for(int i=0;i<arr.length-1;i++) {
if(arr[i+1]!=null) {
arr[i]=arr[i+1];
}else{
arr[i]=null;
break;
}
}
} @Test
public void test() {
String[] arr=new String[10];
push(arr,"北京");
push(arr,"上海");
push(arr,"广东");
push(arr,"杭州");
push(arr,"苏州");
push(arr,"扬州");
pop(arr);
pop(arr);
pop(arr);
pop(arr);
} }

循环队列:

概念:

  • 顺序队列的不足:顺序队列在进行插入操作时,直接在队尾插入就可以,此时时间复杂度为O(1),但是在出列是在队头,即下标为0的位置,也就意味着队列中所有的元素都得向前移动,此时时间复杂度为0(n),效率较低。
  • 队列出列时不需要所有的元素都移动,引入两个指针即可,一个头指针front指向队头元素,一个尾指针rear指向队尾元素,此时队列出列只需移动指针即可。但是此种情况下会出现一种溢出情况(如下图),此时队列中任然是有空间的可以存放元素的,但是尾指针已经溢出,于是就有了循环队列。
  • front指向队头,rear指向队尾的下一个位置;队为空的判断:front==rear;队为满的判断:(rear+1)%MAXSIZE==front

实现循环队列:

 /**
* java实现循环队列
* @author wydream
*
*/ import org.junit.jupiter.api.Test; public class QueueArray { Object[] arr=new Object[10];;//对象数组,队列最多存储a.length-1个对象
int front=0;//队首下标
int rear=0;//队尾下标 /**
* 将一个对象追加到队列尾部
*/
public boolean enqueue(Object obj) {
if((rear+1)%arr.length==front) {
return false;
}
arr[rear]=obj;
rear=(rear+1)%arr.length;
return true; } //出队列
public Object dequeue() {
if(rear==front) {
return null;
}
Object obj=arr[front];
front=(front+1)%arr.length;
return obj;
} @Test
public void test() {
QueueArray q=new QueueArray();
System.out.println(q.enqueue("北京"));
System.out.println(q.enqueue("上海"));
System.out.println(q.enqueue("广东"));
System.out.println(q.enqueue("深圳"));
for(int i=0;i<4;i++){
System.out.println(q.dequeue());
}
} }

算法——Java实现队列的更多相关文章

  1. 数据结构与算法Java描述 队列

    package com.cjm.queue; /** * 数据结构与算法Java实现 队列 * * @author 小明 * */ public class Myqueue { private Nod ...

  2. Java数据结构和算法 - 栈和队列

    Q: 栈.队列与数组的区别? A: 本篇主要涉及三种数据存储类型:栈.队列和优先级队列,它与数组主要有如下三个区别: A: (一)程序员工具 数组和其他的结构(栈.队列.链表.树等等)都适用于数据库应 ...

  3. 无向图的最短路径算法JAVA实现

    一,问题描述 给出一个无向图,指定无向图中某个顶点作为源点.求出图中所有顶点到源点的最短路径. 无向图的最短路径其实是源点到该顶点的最少边的数目. 本文假设图的信息保存在文件中,通过读取文件来构造图. ...

  4. 无向图的最短路径算法JAVA实现(转)

    一,问题描述 给出一个无向图,指定无向图中某个顶点作为源点.求出图中所有顶点到源点的最短路径. 无向图的最短路径其实是源点到该顶点的最少边的数目. 本文假设图的信息保存在文件中,通过读取文件来构造图. ...

  5. Java并发指南11:解读 Java 阻塞队列 BlockingQueue

    解读 Java 并发队列 BlockingQueue 转自:https://javadoop.com/post/java-concurrent-queue 最近得空,想写篇文章好好说说 java 线程 ...

  6. 解读 java 并发队列 BlockingQueue

    点击添加图片描述(最多60个字)编辑 今天呢!灯塔君跟大家讲: 解读 java 并发队列 BlockingQueue 最近得空,想写篇文章好好说说 java 线程池问题,我相信很多人都一知半解的,包括 ...

  7. 10分钟搞定 Java 并发队列好吗?好的

    | 好看请赞,养成习惯 你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it ...

  8. 归并排序算法 java 实现

    归并排序算法 java 实现 可视化对比十多种排序算法(C#版) [直观学习排序算法] 视觉直观感受若干常用排序算法 算法概念 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Di ...

  9. 快速排序算法 java 实现

    快速排序算法 java 实现 快速排序算法Java实现 白话经典算法系列之六 快速排序 快速搞定 各种排序算法的分析及java实现 算法概念 快速排序是C.R.A.Hoare于1962年提出的一种划分 ...

随机推荐

  1. Mac配置hosts文件

    说明:工作里面有时候会遇到内网办公的环境,需要对使用的IP和地址进行配置到hosts文件内,所以记录一下: 1,Windows配置hosts Windows里面直接打开文件夹,可进行找到system/ ...

  2. Linux忘记密码解决方案

    Linux 忘记密码解决方法 很多朋友经常会忘记Linux系统的root密码,linux系统忘记root密码的情况该怎么办呢?重新安装系统吗?当然不用!进入单用户模式更改一下root密码即可. 步骤如 ...

  3. 知识点二:HTTP超文本文件传输协议

    HTTP超文本传输协议概念: http1.1之前采用非持续链接服务器在建立连接上开销较大,http1.1之后默认采用持续连接,并有超时设置 http协议:超文本文件传输协议,用于传输文本文件,请求的方 ...

  4. 负载均衡服务之HAProxy基础入门

    首先我们来了解下haproxy是干嘛的?haproxy是一个法国人名叫Willy Tarreau开发的一个开源软件:这款软件主要用于解决客户端10000以上的同时连接的高性能的TCP和HTTP负载均衡 ...

  5. Personal Photo Management Application

    Customer Problems & Needs People may take a large number of photos and their phone don't have en ...

  6. Python 3.9 性能优化:更快的 list()、dict() 和 range() 等内置类型

    Python 的 3.9.0 版本正在开发中,计划在 2020-10-05 发布 final 版本. 官方在 changelog 中披露了很多细节,其中有一项"vectorcall" ...

  7. cwyth(自动核销代码)

    财务一体化系统,自动核销大数据代码: import pymysql import random import time #指定数据库地址.用户.密码.端口,使用connect()方法声明一个Mysql ...

  8. SQL SERVER 那点事

    温故而知新 一.创建数据库 USE MASTER; GO IF EXISTS(SELECT * FROM sys.databases WHERE [name] = 'student') BEGIN A ...

  9. 下载mp4文件

    实现mp4文件的下载,而不是在线播放 <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  10. CDNbest-访问限制

    写在开始之前 有时候我们需要对网站某个目录或整站限制只对特点的ip访问 不是在ip范围之内的统统拒绝 步骤 首先我们登录,找到我们的目标站点,点击去如下图所示 找到高级设置 添加新规则,如下 这里用到 ...