java 實現的隊列

import java.util.Vector;

/**
 * 隊列是設計程序中常用的一種數據結構。 它類似日常生活中的排隊現象,採用一種被稱爲“先進先出”(LIFO)的存儲結構。
 * 數據元素只能從隊尾進入,從隊首取出。在隊列中,數據元素可以任意增減,但數據元素的次序不會改變。
 * 每當有數據元素從隊列中被取出,後面的數據元素依次向前移動一位。 所以,任何時候從隊列中讀到的都是隊首的數據。
 *
 *
 *
 * 根據這些特點,對隊列定義了以下六種操作:
 * enq(x) 向隊列插入一個值爲x的元素;
 * deq() 從隊列刪除一個元素;
 * front()從隊列中讀一個元素,但隊列保持不變;
 * empty() 判斷隊列是否爲空,空則返回真;
 *clear() 清空隊列;
 *search(x)查找距隊首最近的元素的位置,若不存在,返回-1
 *
 * @author XiaoChun
 *
 */

// Vector類是JAVA中專門負責處理對象元素有序存儲和任意增刪的類,因此,用Vector可以快速實現JAVA的隊列類。
public class Queue extends Vector {

 /**
  *
  */
 private static final long serialVersionUID = -3283948353801342278L;

 public Queue() {
  super();
 }

 /**
  * enq(x) 向隊列插入一個值爲x的元素;
  *
  * @param x
  */

 public synchronized void enq(Object x) {
  super.addElement(x);
 }

 /**
  * deq() 從隊列刪除一個元素;
  *
  * @return
  */

 public synchronized Object deq() {
  /* 隊列若爲空,引發EmptyQueueException異常 */
  if (this.empty())
   throw new EmptyQueueException();
  Object x = super.elementAt(0);
  super.removeElementAt(0);
  return x;
 }

 /**
  * front() 從隊列中讀一個元素,但隊列保持不變;
  *
  * @return
  */
 public synchronized Object front() {
  if (this.empty())
   throw new EmptyQueueException();
  return super.elementAt(0);
 }

 /**
  * empty() 判斷隊列是否爲空,空則返回真;
  *
  * @return
  */
 public boolean empty() {
  return super.isEmpty();
 }

 /**
  * clear() 清空隊列;
  */
 public synchronized void clear() {
  super.removeAllElements();
 }

 /**
  * search(x) 查找距隊首最近的元素的位置,若不存在,返回-1。
  *
  * @param x
  * @return
  */
 public int search(Object x) {
  return super.indexOf(x);
 }

}

class EmptyQueueException extends java.lang.RuntimeException {
 /**
  *
  */
 private static final long serialVersionUID = 6748372442800014387L;

 public EmptyQueueException() {
  super();
 }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章