Java算法系列3--基于链表自定义队列
2017-12-26 12:45
281 查看
1 概述
队列是一种先进先出的数据结构,本文将基于链表实现一种简单的队列,主要功能包括入队,出队。2 代码实现
package com.niuniu.studyalgorithm; import java.util.Iterator; import java.util.Spliterator; import java.util.function.Consumer; /** * @author 002991 * 基于链表的自定义队列 */ public class ChainQueue<Item> implements Iterable<Item> { /** * 指向最早添加的节点的链接 */ private Node first; /** * 指向最近添加的节点的链接 */ private Node last; /** * 节点的数量 */ private int size; /** * 判断队列是否为空 * @return */ public boolean isEmpty(){ return first == null; } /** * 获取队列的长度 * @return */ public int size(){ return size; } /** * 向队列中添加元素 * @param item */ public void enqueue(Item item){ Node oldLast = last; last = new Node(); last.item = item; last.next = null; if(isEmpty()){ first = last; }else{ oldLast.next = last; } size++; } /** * 从队列中获取元素 * @return */ public Item dequeue(){ Item item = first.item; first = first.next; if(isEmpty()){ last = null; } size--; return item; } /** * 自定义节点 */ private class Node{ Item item; Node next; } //下面是省略Iterator的实现 @Override public Iterator<Item> iterator() { return new ListIterator(); } @Override public void forEach(Consumer<? super Item> action) { } @Override public Spliterator<Item> spliterator() { return null; } private class ListIterator implements Iterator<Item>{ private Node current = first; @Override public boolean hasNext() { return current != null; } @Override public Item next() { Item item = current.item; current = current.next; return item; } @Override public void remove() { } @Override public void forEachRemaining(Consumer<? super Item> action) { } } }
3 总结
此种队列有以下好处:(1)所需空间总是和集合大小成正比
(2)操作所需时间总是和集合大小无关
相关文章推荐
- Java算法系列1--基于数组自定义栈
- 基于链表实现Java 自定义Queue队列
- 自己动手构建无锁的并发容器(续篇)——基于单向链表实现的无锁队列
- 简单队列的实现(基于链表)
- 自旋锁学习系列(4):基于数组的队列锁
- 令仔学多线程系列(二)----自定义Queue队列
- 链表自定义队列
- 生产者与消费者模型(基于单链表、环形队列、多线程、多消费多生产)
- 算法与数据结构(二) 基于链表的队列
- 基于链表、数组实现队列、循环队列
- Java 实现双向链表,基于双向链表实现双端队列
- 自己写的基于链表的并发安全队列模板类concurrent_queue
- 【数据结构练习】基于链表结构实现的队列
- java中(基于链表)队列的实现
- java:队列模拟(自定义链表结构 +LinkedList )
- 基于链表的队列实现
- 基于数组的循环队列和基于链表的队列
- Enterprise Library Step By Step系列(十四):创建基于消息队列(MSMQ)的异步日志
- C语言基于链表的队列
- 典型数据结构--基于链表的队列实现