欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第十五章 泛型

程序员文章站 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);
	}
}