Java通过链表实现队列
- class LinkedQueue<T> {
- /**
- * 队列大小,由构造函数初始化
- */
- private int maxSize;
- /**
- * 队头
- */
- private Node front = null;
- /**
- * 队尾
- */
- private Node rear = null;
- /**
- * 队列实际元素个数
- */
- private int nItems;
- /**
- * 初始化队列,并指定队列长度
- *
- * @param maxSize
- */
- public LinkedQueue(int maxSize) {
- this.maxSize = maxSize;
- front = null;
- rear = null;
- this.nItems = 0;
- }
- /**
- * 讲一个数据放入队列
- *
- * @param data
- */
- public void enqueue(T data) {
- Node node = new Node(data);
- if (isEmpty()) {
- front = node;
- front.next = null;
- rear = node;
- rear.pre = null;
- nItems++;
- return;
- }
- if (size() == 1) {
- rear = node;
- front.next = rear;
- rear.pre = front;
- nItems++;
- return;
- }
- if (isFull()) {
- System.out.print("超过队列已满,无法入队");
- return;
- }
- node.pre = rear;
- rear.next = node;
- rear = node;
- nItems++;
- }
- /**
- * 将数据出队
- *
- * @return
- */
- public T dequeue() {
- Node temp = null;
- if (isEmpty()) {
- System.out.println("队列已空,无法出队");
- return null;
- }
- if (size() == 1) {
- temp = front;
- front = null;
- rear = null;
- nItems--;
- return temp.data;
- }
- if (size() == 2) {
- temp = front;
- front = rear;
- front.next = null;
- rear.pre = null;
- nItems--;
- return temp.data;
- }
- temp = front;
- front = front.next;
- nItems--;
- return temp.data;
- }
- /**
- * 判断队列是否为空
- *
- * @return
- */
- public boolean isEmpty() {
- return nItems == 0;
- }
- /**
- * 判断队列是否已满
- *
- * @return
- */
- public boolean isFull() {
- return nItems == maxSize;
- }
- /**
- * 获取队列的实际数据个数
- *
- * @return
- */
- public int size() {
- return nItems;
- }
- /**
- * 将数据封装成节点
- *
- * @author John
- *
- */
- private class Node {
- T data;
- Node next;
- Node pre;
- public Node(T data) {
- this.data = data;
- }
- }
- }
Java通过链表实现队列的更多相关文章
- 教你如何使用Java手写一个基于链表的队列
在上一篇博客[教你如何使用Java手写一个基于数组的队列]中已经介绍了队列,以及Java语言中对队列的实现,对队列不是很了解的可以我上一篇文章.那么,现在就直接进入主题吧. 这篇博客主要讲解的是如何使 ...
- Java数据结构——用双端链表实现队列
//================================================= // File Name : LinkQueue_demo //---------------- ...
- Java用链表实现栈和队列
1.用链表实现栈 package stack; /** * * @author denghb * */ class Link { public long dData; public Link next ...
- Java 用链表实现栈和队列
栈 是一种基于后进先出(LIFO)策略的集合类型.当邮件在桌上放成一叠时,就能用栈来表示.新邮件会放在最上面,当你要看邮件时,会一封一封从上到下阅读.栈的顶部称为栈顶,所有操作都在栈顶完成. 前面提到 ...
- Java中的阻塞队列
1. 什么是阻塞队列? 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列.这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空.当队列满时,存储元素的线程会等待队列可用 ...
- java并发:阻塞队列
第一节 阻塞队列 1.1 初识阻塞队列 队列以一种先进先出的方式管理数据,阻塞队列(BlockingQueue)是一个支持两个附加操作的队列,这两个附加的操作是:在队列为空时,获取元素的线程会等待队列 ...
- 聊聊并发(七)——Java中的阻塞队列
3. 阻塞队列的实现原理 聊聊并发(七)--Java中的阻塞队列 作者 方腾飞 发布于 2013年12月18日 | ArchSummit全球架构师峰会(北京站)2016年12月02-03日举办,了解更 ...
- Java中的阻塞队列(BlockingQueue)
1. 什么是阻塞队列 阻塞队列(BlockingQueue)是 Java 5 并发新特性中的内容,阻塞队列的接口是 java.util.concurrent.BlockingQueue,它提供了两个附 ...
- Java中的阻塞队列-ArrayBlockingQueue(一)
最近在看一些java基础的东西,看到了队列这章,打算对复习的一些知识点做一个笔记,也算是对自己思路的一个整理,本章先聊聊java中的阻塞队列 参考文章: http://ifeve.com/java-b ...
随机推荐
- centos下安装jenkins
To use this repository, run the following command: sudo wget -O /etc/yum.repos.d/jenkins.repo https: ...
- JavaScript基础-流程控制-if
流程控制基本概念 默认情况下,程序的运行流程是这样的:运行程序后,系统会按书写从上至下顺序执行程序中的每一行代码,但是这并不能满足我们所有的开发需求 1.png 实际开发中, 我们需要根据不同的条件执 ...
- Office办公软件(Excel PPT Word)使用整理
Office办公软件(Excel PPT Word)使用整理.. -------------- Excel默认打印预览于当前连接的打印机的纸张大小保持一致. Excel sheet不见了怎么办 --- ...
- Kickstart Round D 2017 problem A sightseeing 一道DP
这是现场完整做出来的唯一一道题Orz..而且还调了很久的bug.还是太弱了. Problem When you travel, you like to spend time sightseeing i ...
- js实现每次程序发送一个数据 ,多次发送不一样,5秒后继续执行多次程序,判断如果五秒后发送过来的数据和上次不一样,少的删除多的增加
/*存储设备ID*/var IDSNew = new Array();//判断是否已经启用服务var isopen = true;//需要放到接收设备数据处IDSNew[client.deviceId ...
- python的multiprocessing模块进程创建、资源回收-Process,Pool
python的multiprocessing有两种创建进程的方式,每种创建方式和进程资源的回收都不太相同,下面分别针对Process,Pool及系统自带的fork三种进程分析. 1.方式一:fork( ...
- Json作为配置文件注意事项
错误描述 在一次开发中,使用了JSON数据作为配置文件,但反序列化时总是出错,开始还以为是转义字符的问题,因为存了一个绝对路径(D:\xx\xx.json),后来测试发现竟然发现是类嵌套的问题. 解决 ...
- Visual Studio2017 远程调试 Remote Debugger
前言 大家在使用vs打包后的文件部署到服务器后,有时候我们需要对线网的后台进行调试.但是它不像在VS中.这个时候我们该怎么调试呢? 微软想到了这一点,他们在 VS 中给我们提供了一个功能: Remot ...
- LVS-DR实现web调度模式
author:JevonWei 版权声明:原创作品 实现LVS-DR调度web模式 拓扑环境 网络环境 RS1 RIP 192.168.198.138/24 VIP 192.168.198.100/3 ...
- JS中 事件冒泡与事件捕获
[JS中的事件流] 1.事件冒泡:当某DOm元素触发一种事件时,会从当前节点开始,逐级往上触发其祖先节点的同类型事件,直到DOM根节点: >>>什么情况下会产生事件冒泡 ① D ...