顺序队列:

概念:

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

顺序队列的实现:

  1. import org.junit.jupiter.api.Test;
  2.  
  3. /**
  4. * 顺序队列
  5. * @author wydream
  6. *
  7. */
  8.  
  9. public class QueueSequence {
  10.  
  11. private String[] arr;//队列数组
  12. private int end=0;//队尾标志
  13.  
  14. //向队列中添加元素
  15. public void push(String[] arr,String value) {
  16. if(end<arr.length) {
  17. arr[end]=value;
  18. end++;
  19. return;
  20. }else {
  21. System.out.println("队列已经满了");
  22. return;
  23. }
  24.  
  25. }
  26.  
  27. //取出队列元素
  28. public String pop(String[] arr) {
  29. String rs;
  30. if(arr[0]==null) {
  31. System.out.println("队列为空,请先向队列中添加元素");
  32. return null;
  33. }else {
  34. rs=arr[0];
  35. arr[0]=null;
  36. move(arr);
  37. return rs;
  38. }
  39. }
  40.  
  41. //队列元素向前移动
  42. public void move(String[] arr) {
  43. for(int i=0;i<arr.length-1;i++) {
  44. if(arr[i+1]!=null) {
  45. arr[i]=arr[i+1];
  46. }else{
  47. arr[i]=null;
  48. break;
  49. }
  50. }
  51. }
  52.  
  53. @Test
  54. public void test() {
  55. String[] arr=new String[10];
  56. push(arr,"北京");
  57. push(arr,"上海");
  58. push(arr,"广东");
  59. push(arr,"杭州");
  60. push(arr,"苏州");
  61. push(arr,"扬州");
  62. pop(arr);
  63. pop(arr);
  64. pop(arr);
  65. pop(arr);
  66. }
  67.  
  68. }

循环队列:

概念:

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

实现循环队列:

  1. /**
  2. * java实现循环队列
  3. * @author wydream
  4. *
  5. */
  6.  
  7. import org.junit.jupiter.api.Test;
  8.  
  9. public class QueueArray {
  10.  
  11. Object[] arr=new Object[10];;//对象数组,队列最多存储a.length-1个对象
  12. int front=0;//队首下标
  13. int rear=0;//队尾下标
  14.  
  15. /**
  16. * 将一个对象追加到队列尾部
  17. */
  18. public boolean enqueue(Object obj) {
  19. if((rear+1)%arr.length==front) {
  20. return false;
  21. }
  22. arr[rear]=obj;
  23. rear=(rear+1)%arr.length;
  24. return true;
  25.  
  26. }
  27.  
  28. //出队列
  29. public Object dequeue() {
  30. if(rear==front) {
  31. return null;
  32. }
  33. Object obj=arr[front];
  34. front=(front+1)%arr.length;
  35. return obj;
  36. }
  37.  
  38. @Test
  39. public void test() {
  40. QueueArray q=new QueueArray();
  41. System.out.println(q.enqueue("北京"));
  42. System.out.println(q.enqueue("上海"));
  43. System.out.println(q.enqueue("广东"));
  44. System.out.println(q.enqueue("深圳"));
  45. for(int i=0;i<4;i++){
  46. System.out.println(q.dequeue());
  47. }
  48. }
  49.  
  50. }

算法——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. Java入门系列之线程池ThreadPoolExecutor原理分析思考(十五)

    前言 关于线程池原理分析请参看<http://objcoding.com/2019/04/25/threadpool-running/>,建议对原理不太了解的童鞋先看下此文然后再来看本文, ...

  2. Kafka 2.5.0发布——弃用对Scala2.11的支持

    近日Kafka发布了最新版本 2.5.0,增加了很多新功能: 下载地址:https://kafka.apache.org/downloads#2.5.0 对TLS 1.3的支持(默认为1.2) 引入用 ...

  3. Web三维编程入门总结之一:WebGL与Threejs入门知识

    /*在这里对这段时间学习的3D编程知识做个总结,以备再次出发.计划分成“webgl与three.js基础介绍”.“面向对象的基础3D场景框架编写”.“模型导入与简单3D游戏编写”三个部分,其他零散知识 ...

  4. Application.Exit

    Application.Exit:通知winform消息循环退出.Environment.Exit:终止当前进程,返回exitcode给操作系统 Application.Exit会在所有前台线程退出后 ...

  5. Leetcode1353-最多可以参加的会议数目

    题目描述: 给你一个数组 events,其中 events[i] = [startDayi, endDayi] ,表示会议 i 开始于startDayi ,结束于endDayi . 你可以在满足 st ...

  6. PrestoSPI安全扩展

    由于Presto官方文档和谷歌搜索都没有相关的内容,git项目中也没有支持sentry的安全插件扩展,因此只能从源码中寻找答案,在梳理完SPI包的安全相关源码结构后,已实现了一个自定义的安全插件,经验 ...

  7. vue组件之间值传递四种方法汇总

    1.父组件获取子组件的数据和方法 $refs 子组件: <template> <div class="header"> <h3>{{ zz }} ...

  8. golang方法详解

    Go 语言 类型方法是一种对类型行为的封装 .Go 语言的方法非常纯粹, 可以看作特殊类型的函数,其显式地将对象实例或指针作为函数的第一个参数,并且参数可以自己指定,而不强制要求一定是 this或se ...

  9. Spring5:IOC注解

    使用注解须知: 1:导入约束:导入context的命名空间 2:配置注解的支持:<context:annotation-config/> <?xml version="1. ...

  10. mongoDB(一)——mongoDB安装部署和常用shell命令

    1.mongoDB简介 mongoDB 是由C++语言编写的,是一种分布式的面向文档存储的开源nosql数据库.nosql是Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统 ...