1. class LinkedQueue<T> {
  2. /**
  3. * 队列大小,由构造函数初始化
  4. */
  5. private int maxSize;
  6.  
  7. /**
  8. * 队头
  9. */
  10. private Node front = null;
  11.  
  12. /**
  13. * 队尾
  14. */
  15. private Node rear = null;
  16.  
  17. /**
  18. * 队列实际元素个数
  19. */
  20. private int nItems;
  21.  
  22. /**
  23. * 初始化队列,并指定队列长度
  24. *
  25. * @param maxSize
  26. */
  27. public LinkedQueue(int maxSize) {
  28. this.maxSize = maxSize;
  29. front = null;
  30. rear = null;
  31. this.nItems = 0;
  32. }
  33.  
  34. /**
  35. * 讲一个数据放入队列
  36. *
  37. * @param data
  38. */
  39. public void enqueue(T data) {
  40. Node node = new Node(data);
  41. if (isEmpty()) {
  42. front = node;
  43. front.next = null;
  44. rear = node;
  45. rear.pre = null;
  46. nItems++;
  47. return;
  48. }
  49. if (size() == 1) {
  50. rear = node;
  51. front.next = rear;
  52. rear.pre = front;
  53. nItems++;
  54. return;
  55. }
  56. if (isFull()) {
  57. System.out.print("超过队列已满,无法入队");
  58. return;
  59. }
  60. node.pre = rear;
  61. rear.next = node;
  62. rear = node;
  63. nItems++;
  64. }
  65.  
  66. /**
  67. * 将数据出队
  68. *
  69. * @return
  70. */
  71. public T dequeue() {
  72. Node temp = null;
  73. if (isEmpty()) {
  74. System.out.println("队列已空,无法出队");
  75. return null;
  76. }
  77. if (size() == 1) {
  78. temp = front;
  79. front = null;
  80. rear = null;
  81. nItems--;
  82. return temp.data;
  83. }
  84. if (size() == 2) {
  85. temp = front;
  86. front = rear;
  87. front.next = null;
  88. rear.pre = null;
  89. nItems--;
  90. return temp.data;
  91. }
  92. temp = front;
  93. front = front.next;
  94. nItems--;
  95. return temp.data;
  96. }
  97.  
  98. /**
  99. * 判断队列是否为空
  100. *
  101. * @return
  102. */
  103. public boolean isEmpty() {
  104. return nItems == 0;
  105. }
  106.  
  107. /**
  108. * 判断队列是否已满
  109. *
  110. * @return
  111. */
  112. public boolean isFull() {
  113. return nItems == maxSize;
  114. }
  115.  
  116. /**
  117. * 获取队列的实际数据个数
  118. *
  119. * @return
  120. */
  121. public int size() {
  122. return nItems;
  123. }
  124.  
  125. /**
  126. * 将数据封装成节点
  127. *
  128. * @author John
  129. *
  130. */
  131. private class Node {
  132. T data;
  133. Node next;
  134. Node pre;
  135.  
  136. public Node(T data) {
  137. this.data = data;
  138. }
  139. }
  140. }

Java通过链表实现队列的更多相关文章

  1. 教你如何使用Java手写一个基于链表的队列

    在上一篇博客[教你如何使用Java手写一个基于数组的队列]中已经介绍了队列,以及Java语言中对队列的实现,对队列不是很了解的可以我上一篇文章.那么,现在就直接进入主题吧. 这篇博客主要讲解的是如何使 ...

  2. Java数据结构——用双端链表实现队列

    //================================================= // File Name : LinkQueue_demo //---------------- ...

  3. Java用链表实现栈和队列

    1.用链表实现栈 package stack; /** * * @author denghb * */ class Link { public long dData; public Link next ...

  4. Java 用链表实现栈和队列

    栈 是一种基于后进先出(LIFO)策略的集合类型.当邮件在桌上放成一叠时,就能用栈来表示.新邮件会放在最上面,当你要看邮件时,会一封一封从上到下阅读.栈的顶部称为栈顶,所有操作都在栈顶完成. 前面提到 ...

  5. Java中的阻塞队列

    1. 什么是阻塞队列? 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列.这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空.当队列满时,存储元素的线程会等待队列可用 ...

  6. java并发:阻塞队列

    第一节 阻塞队列 1.1 初识阻塞队列 队列以一种先进先出的方式管理数据,阻塞队列(BlockingQueue)是一个支持两个附加操作的队列,这两个附加的操作是:在队列为空时,获取元素的线程会等待队列 ...

  7. 聊聊并发(七)——Java中的阻塞队列

    3. 阻塞队列的实现原理 聊聊并发(七)--Java中的阻塞队列 作者 方腾飞 发布于 2013年12月18日 | ArchSummit全球架构师峰会(北京站)2016年12月02-03日举办,了解更 ...

  8. Java中的阻塞队列(BlockingQueue)

    1. 什么是阻塞队列 阻塞队列(BlockingQueue)是 Java 5 并发新特性中的内容,阻塞队列的接口是 java.util.concurrent.BlockingQueue,它提供了两个附 ...

  9. Java中的阻塞队列-ArrayBlockingQueue(一)

    最近在看一些java基础的东西,看到了队列这章,打算对复习的一些知识点做一个笔记,也算是对自己思路的一个整理,本章先聊聊java中的阻塞队列 参考文章: http://ifeve.com/java-b ...

随机推荐

  1. centos下安装jenkins

    To use this repository, run the following command: sudo wget -O /etc/yum.repos.d/jenkins.repo https: ...

  2. JavaScript基础-流程控制-if

    流程控制基本概念 默认情况下,程序的运行流程是这样的:运行程序后,系统会按书写从上至下顺序执行程序中的每一行代码,但是这并不能满足我们所有的开发需求 1.png 实际开发中, 我们需要根据不同的条件执 ...

  3. Office办公软件(Excel PPT Word)使用整理

    Office办公软件(Excel PPT Word)使用整理.. -------------- Excel默认打印预览于当前连接的打印机的纸张大小保持一致. Excel sheet不见了怎么办 --- ...

  4. Kickstart Round D 2017 problem A sightseeing 一道DP

    这是现场完整做出来的唯一一道题Orz..而且还调了很久的bug.还是太弱了. Problem When you travel, you like to spend time sightseeing i ...

  5. js实现每次程序发送一个数据 ,多次发送不一样,5秒后继续执行多次程序,判断如果五秒后发送过来的数据和上次不一样,少的删除多的增加

    /*存储设备ID*/var IDSNew = new Array();//判断是否已经启用服务var isopen = true;//需要放到接收设备数据处IDSNew[client.deviceId ...

  6. python的multiprocessing模块进程创建、资源回收-Process,Pool

    python的multiprocessing有两种创建进程的方式,每种创建方式和进程资源的回收都不太相同,下面分别针对Process,Pool及系统自带的fork三种进程分析. 1.方式一:fork( ...

  7. Json作为配置文件注意事项

    错误描述 在一次开发中,使用了JSON数据作为配置文件,但反序列化时总是出错,开始还以为是转义字符的问题,因为存了一个绝对路径(D:\xx\xx.json),后来测试发现竟然发现是类嵌套的问题. 解决 ...

  8. Visual Studio2017 远程调试 Remote Debugger

    前言 大家在使用vs打包后的文件部署到服务器后,有时候我们需要对线网的后台进行调试.但是它不像在VS中.这个时候我们该怎么调试呢? 微软想到了这一点,他们在 VS 中给我们提供了一个功能: Remot ...

  9. LVS-DR实现web调度模式

    author:JevonWei 版权声明:原创作品 实现LVS-DR调度web模式 拓扑环境 网络环境 RS1 RIP 192.168.198.138/24 VIP 192.168.198.100/3 ...

  10. JS中 事件冒泡与事件捕获

    [JS中的事件流]  1.事件冒泡:当某DOm元素触发一种事件时,会从当前节点开始,逐级往上触发其祖先节点的同类型事件,直到DOM根节点:   >>>什么情况下会产生事件冒泡 ① D ...