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 ...
随机推荐
- SQL语句查询某字段不同数据的个数(DISTINCT 的使用)
今天做了一个题,学到了一个知识点: 有一个高速收费表VF,如下: 统计收费涉及的车辆有多少: SQL语句: SELECT COUNT(DISTINCT VchReg) from VF ; 其中 ...
- python编码错误
初学python,遇到的最难忘的坑没有之一.这个问题起码困扰了我一周.在我写了一段代码之后经常遇见这样的报错. 本质原因是我用的python2,在编码流派中python2是比较奇葩的一派,不随大流.所 ...
- 图片浏览 h5
@{ Layout = null; } <html> <head> <script type="text/javascript" src=" ...
- tensorflow笔记(四)之MNIST手写识别系列一
tensorflow笔记(四)之MNIST手写识别系列一 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7436310.html ...
- 【Git】 自动化Maven项目构建脚本(二)
这次脚本增加了构建选择,可以按需构建了. #!/bin/bash #----------------------------------------------- # FileName: auto-b ...
- 实操代码研究各种Java技术-java.toutiao.im
whatsmars https://github.com/javahongxi/whatsmars whatsmars-earth-web springmvc+velocitywhatsmars-ea ...
- JavaScript 学习笔记 - Web Workers
前言 本文仅是 Web Workers 的入门科普文章,不涉及太琐碎的知识点. 我们知道,在 Web Workers 出来之前,JavaScript 是单线程的.即使是 setTimeout 之类的看 ...
- 更符合面向对象的数据库操作方式-OrmLite
1. jar包下载 下载地址:http://ormlite.com/releases/,一般用core和android包即可. 如果使用的是android studio,也可以直接通过module s ...
- Python金融行业必备工具
有些国外的平台.社区.博客如果连接无法打开,那说明可能需要"科学"上网 量化交易平台 国内在线量化平台: BigQuant - 你的人工智能量化平台 - 可以无门槛地使用机器学习. ...
- 两个input在同一行连着不留缝隙
方法1:让两个input 连在一起写 不换行 <div class="inputDiv"> <input type="text" placeh ...