2011-02-03 37 views
1

我想弄清楚如何開始使用Java編寫一個限制輸出的雙端隊列,所以我可以從兩端輸入元素,但只能從一箇中移除它們。 我已經完成了單個隊列,這是我第一次做出列隊隊列,而我正在閱讀的書並沒有多大幫助。如何在Java中啓動輸出受限制的雙端隊列?

我只是有點失落,雙重似乎比單一複雜。

編輯

單個隊列代碼:

public class ListQueue<AnyType> implements Queue<AnyType> 
{ 
    private ListNode<AnyType> front; 
    private ListNode<AnyType> back; 
    private int counter; 

    public ListQueue() 
    { 
     front = back = null; 
    } 

    public boolean isEmpty() 
    { 
     return front == null; 
    } 

    public void enqueue(AnyType x) 
    { 
     if(isEmpty()) // Make queue of one element 
      back = front = new ListNode<AnyType>(x); 
     else    // Regular case 
      back = back.next = new ListNode<AnyType>(x); 
     counter++; 
    } 

    public AnyType dequeue() 
    { 
     if(isEmpty()) 
      throw new UnderflowException("ListQueue dequeue"); 

     AnyType returnValue = front.element; 
     front = front.next; 
     counter--; 
     return returnValue; 
    } 

    public AnyType getFront() 
    { 
     if(isEmpty()) 
      throw new UnderflowException("ListQueue getFront"); 
     return front.element; 
    } 

    public void makeEmpty() 
    { 
     front = null; 
     back = null; 
     counter = 0; 
    } 
} 

在那裏,它被

編輯

這裏是ListNode

class ListNode<AnyType> 
{ 

    public ListNode(AnyType theElement) 
    { 
     this(theElement, null); 
    } 

    public ListNode(AnyType theElement, ListNode<AnyType> n) 
    { 
     element = theElement; 
     next = n; 
    } 

    public AnyType element; 
    public ListNode<AnyType> next; 
} 
+0

這功課嗎?你可以使用現有的Java類型,比如`Deque`嗎?來自OP的 – 2011-02-03 00:36:01

+0

聽起來像目標是寫一個自定義數據結構 - 「我已經完成了單個隊列」 – 2011-02-03 00:40:05

回答

1

對於雙端隊列,您保留兩個引用,一個引用下一個元素,一個引用上一個元素。

從單端隊列開始並添加向後引用。