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 ...
随机推荐
- How to enable your website to public(set up your web server at home)
As a so exciting dream, I would like set up my owned web site which can be accessed anywhere nomatte ...
- JavaScript模块化 --- Commonjs、AMD、CMD、es6 modules
随着前端js代码复杂度的提高,JavaScript模块化这个概念便被提出来,前端社区也不断地实现前端模块化,直到es6对其进行了规范,下面就介绍JavaScript模块化. 这篇文章还是希望能给大家一 ...
- vue调试工具vue-devtools安装及使用
本文主要介绍 vue的调试工具 vue-devtools 的安装和使用 工欲善其事, 必先利其器, 快快一起来用vue-devtools来调试开发你的vue项目吧 安装: 1.到github下载: ...
- vue-cli脚手架npm相关文件解读(7)dev-server.js
系列文章传送门: 1.build/webpack.base.conf.js 2.build/webpack.prod.conf.js 3.build/webpack.dev.conf.js 4.bui ...
- 早期MyBatis开发与接口式Mybatis开发的简介
早期MyBatis开发与接口式Mybatis开发的简介 一.早期版本的myBatis使用 导jar包 1.配置mybatis.xml的配置文件 1) ...
- 大手册(书籍)排版利器-XML自动排版生成工具
--支持全球化/多语言/符合W3C标准的XML自动排版工具 Boxth XML/XSL Formatter是专为XML数据或其他结构化数据源自动输出排版文件(如: PDF等)而设计的集数据格式化.版式 ...
- C# FTP上传与下载文件
public class UploadFile { string ftpServerIP; string ftpRemotePath; string ftpUserID; string ftpPass ...
- Python Counter class
Counter class https://docs.python.org/2/library/collections.html#collections.Counter # class collect ...
- JavaScript中事件
JS中的事件 一.事件分类: 鼠标事件:鼠标单击.鼠标双击.鼠标指上等... HTML事件:文档加载.焦点.表单提交等... 键盘事件:键盘按下(keydown).键盘按下并松开瞬间(keypress ...
- chrome开发工具指南(十二)
使用 Device Mode 模拟移动设备 使用 Chrome DevTools 的 Device Mode 打造移动设备优先的完全自适应式网站.了解如何使用 Device Mode 模拟多种设备及其 ...