原文链接:http://blog.csdn.net/microtong
QueueNode类是用来表示一个链表节点的类,QueueLinked是链表实现的队列,
其中front是对首指针,rear是队尾指针,队首出队,队尾入队。
- /**
- * QueueLinked.java
- */
- package cn.edu.uibe.oop;
- /**
- * 链表节点类
- * @author TongQiang
- */
- class QueueNode {
- Object data; // 节点存储的数据
- QueueNode next; // 指向下个节点的指针
- public QueueNode() {
- this(null, null);
- }
- public QueueNode(Object data) {
- this(data, null);
- }
- public QueueNode(Object data, QueueNode next) {
- this.data = data;
- this.next = next;
- }
- }
- /**
- * 单向链表实现的队列
- * @author TongQiang
- */
- public class QueueLinked {
- QueueNode front; // 队首指针
- QueueNode rear; // 队尾指针
- public QueueLinked() {
- this.rear = null;
- this.front = null;
- }
- /**
- * 将一个对象追加到队列的尾部
- * @param obj 对象
- */
- public void enqueue(Object obj) {
- //如果队列是空的
- if (rear == null && front == null) {
- rear = new QueueNode(obj);
- front = rear;
- } else {
- QueueNode node = new QueueNode(obj);
- rear.next = node;
- rear = rear.next;
- }
- }
- /**
- * 队首对象出队
- * @return 出队的对象,队列空时返回null
- */
- public Object dequeue() {
- //如果队列空
- if (front == null) {
- return null;
- }
- //如果队列中只剩下一个对象
- if (front == rear && rear != null) {
- QueueNode node = front;
- rear = null;
- front = null;
- return node.data;
- }
- Object obj = front.data;
- front = front.next;
- return obj;
- }
- public static void main(String[] args) {
- QueueLinked q = new QueueLinked();
- q.enqueue("张三");
- q.enqueue("李斯");
- q.enqueue("赵五");
- q.enqueue("王一");
- for (int i = 0; i < 4; i++) {
- System.out.println(q.dequeue());
- }
- }
- }
浙公网安备 33010602011771号