您的位置:首页 > 编程语言 > Java开发

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)操作所需时间总是和集合大小无关
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: