这里采用的是双端链表来实现的先进先出对列。
package com.yanling.queue;
/**
* 队列(先进先出)
* @author yanling
* @date 2021-2-14
*/
public class MyFIFO {
public int size;
/**
* 尾指针
*/
private Node last;
/**
* 头指针
*/
private Node first;
/**
* 队列添加元素
* @param e
*/
public void add(int e) {
Node f = last;
Node newNode = new Node(f, e, null);
last = newNode;
if (f == null) {
first = newNode;
} else {
f.gNext = last;
}
size++;
}
/**
* 弹出第一个元素
* @return
*/
public Integer poll(){
if (first == null) {
return null;
}
Node team = first;
first = first.gNext;
if (first != null) {
// 断开连接
first.lNext = null;
}
size--;
return team.val;
}
/**
* 双向链表
*/
class Node {
int val;
Node lNext;
Node gNext;
public Node(Node lNext, int val, Node gNext) {
this.val = val;
this.lNext = lNext;
this.gNext = gNext;
}
}
}
完成了对列的实现,线面测试下
public static void main(String[] args) {
MyFIFO fifo = new MyFIFO();
fifo.add(1);
fifo.add(2);
fifo.add(3);
for (; 1 < fifo.size;) {
System.out.println(fifo.poll());
}
fifo.add(4);
fifo.add(5);
for (; 0 < fifo.size;) {
System.out.println(fifo.poll());
}
System.out.println(fifo.poll());
}
控制台打印结果