第十五章 泛型
程序员文章站
2022-05-07 10:49:49
...
仿造《Java编程思想》中链式堆栈类,实现一个链式队列
1. 首先需要一个通用的结点类
public class Node<T> {
private T item;// 存储的数据
private Node<T> next;// 下一个节点的引用
public Node(T item) {
super();
this.item = item;
}
public T getItem() {
return item;
}
public void setItem(T item) {
this.item = item;
}
public Node<T> getNext() {
return next;
}
public void setNext(Node<T> next) {
this.next = next;
}
}
2. 实现链式队列
/**
* 链式队列
* <p>
* 入队列->tail......head->出队列
*
* @author fengbin
*
* @param <T>
*/
public class LinkedQueue<T> {
private Node<T> head;// 头结点
private Node<T> tail;// 尾结点
private int size = 0;// 队列大小
/**
* <ul>
* <li>入队列,如果size=0,头尾相同;
* <li>如果size>1,则头不变,尾变;
* <li>如果size=1,因为头尾指向同一对象,只需要将尾的next改变,同时尾变
* </ul>
*
* @param item
*/
public void push(T item) {
Node<T> node = new Node<>(item);
if (size == 0) {
head = tail = node;
} else {
tail.setNext(node);
tail = node;
}
size++;
}
/**
* <ul>
* <li>出队列,如果size=0,则返回null;
* <li>否则,返回head的item信息,同时将head指向next
* <ul>
*
* @return
*/
public T pop() {
if (size == 0)
return null;
T data = head.getItem();
head = head.getNext();
size--;
return data;
}
public static void main(String[] args) {
LinkedQueue<String> queue = new LinkedQueue<>();
for (String s : "Hello world !!!".split(" "))
queue.push(s);
String s;
while ((s = queue.pop()) != null)
System.out.println(s);
}
}