原文链接:http://blog.csdn.net/microtong

QueueNode类是用来表示一个链表节点的类,QueueLinked是链表实现的队列,

其中front是对首指针,rear是队尾指针,队首出队,队尾入队。

 
  1. /** 
  2.  * QueueLinked.java 
  3.  */  
  4. package cn.edu.uibe.oop;  
  5.   
  6. /** 
  7.  * 链表节点类 
  8.  * @author TongQiang 
  9.  */  
  10. class QueueNode {  
  11.     Object data; // 节点存储的数据  
  12.     QueueNode next; // 指向下个节点的指针  
  13.   
  14.     public QueueNode() {  
  15.         this(null, null);  
  16.     }  
  17.   
  18.     public QueueNode(Object data) {  
  19.         this(data, null);  
  20.     }  
  21.   
  22.     public QueueNode(Object data, QueueNode next) {  
  23.         this.data = data;  
  24.         this.next = next;  
  25.     }  
  26. }  
  27. /** 
  28.  * 单向链表实现的队列 
  29.  * @author TongQiang 
  30.  */  
  31. public class QueueLinked {  
  32.     QueueNode front; // 队首指针  
  33.     QueueNode rear;  // 队尾指针  
  34.   
  35.     public QueueLinked() {  
  36.         this.rear = null;  
  37.         this.front = null;  
  38.     }  
  39.     /** 
  40.      * 将一个对象追加到队列的尾部 
  41.      * @param obj 对象 
  42.      */  
  43.     public void enqueue(Object obj) {  
  44.         //如果队列是空的  
  45.         if (rear == null && front == null) {  
  46.             rear = new QueueNode(obj);  
  47.             front = rear;  
  48.         } else {  
  49.             QueueNode node = new QueueNode(obj);  
  50.             rear.next = node;  
  51.             rear = rear.next;  
  52.         }  
  53.     }  
  54.     /** 
  55.      * 队首对象出队 
  56.      * @return 出队的对象,队列空时返回null 
  57.      */  
  58.     public Object dequeue() {  
  59.         //如果队列空  
  60.         if (front == null) {  
  61.             return null;  
  62.         }  
  63.         //如果队列中只剩下一个对象  
  64.         if (front == rear && rear != null) {  
  65.             QueueNode node = front;  
  66.             rear = null;  
  67.             front = null;  
  68.             return node.data;  
  69.         }  
  70.         Object obj = front.data;  
  71.         front = front.next;  
  72.         return obj;  
  73.     }  
  74.   
  75.     public static void main(String[] args) {  
  76.         QueueLinked q = new QueueLinked();  
  77.         q.enqueue("张三");  
  78.         q.enqueue("李斯");  
  79.         q.enqueue("赵五");  
  80.         q.enqueue("王一");  
  81.         for (int i = 0; i < 4; i++) {  
  82.             System.out.println(q.dequeue());  
  83.         }  
  84.     }  
  85. }  

 

posted on 2017-10-10 10:38  blythe  阅读(183)  评论(0)    收藏  举报