データ構造の「双端列」


二重の列は何ですか?
デュアルエンド・キューとは、両端が入隊と出隊操作が可能なキューのことで、dequeは「double ended queue」の略称です.要素はチームの先頭から出てもいいし、入隊もできます.
ツーエンドの列はどうやって実現しますか?
ダブルキューの記憶構造
public class LinkedBlockingDeque {
    //  
    Node first;
    //  
    Node last;
    //    
    int count;
    static final class Node {
        //    
        E item;
        //     
        Node prev;
        //     
        Node next;
    }
}
隊の先頭から入隊する
public boolean offerFirst(Node node) {
    //       
    Node f = first;
    //              
    node.next = f;
    //          
    first = node;
    //       ,            
    if (last == null)
        last = node;
    //              
    else
        f.prev = node;
    //    
    ++count;
    return true;
}
隊の先頭を切る
public E pollFirst() {
     Node f = first;
    //         
    Node n = f.next;
    //       
    E item = f.item;
    //  
    f.item = null;
    //     ,       
    f.next = f; // help GC
    //     
    first = n;
    //         
    if (n == null)
        last = null;
    //              
    else
        n.prev = null;
    //    
    --count;
    return item;
}
隊の後尾から入隊する
public boolean offerLast(Node node) {
    //       
    Node l = last;
    if (l == null)
        return null;
    //              
    node.prev = l;
    //          
    last = node;
    //       ,           
    if (first == null)
        first = node;
    //                     
    else
        l.next = node;
    //    
    ++count;
    return true;
}
隊の後尾から出る
public E pollLast() {
    Node l = last;
    if (l == null)
        return null;
    //          
    Node p = l.prev;
    //    
    E item = l.item;
    //  
    l.item = null;
    //     
    l.prev = l; // help GC
    //     
    last = p;
    //         ,     
    if (p == null)
        first = null;
    //           
    else
        p.next = null;
    //    
    --count;
    return item;
}
締め括りをつける
双端の列は列と同じです.もっと柔軟になっただけで、頭と列の最後は入隊と出隊の操作ができます.ここではチェーンテーブルの二重端列に基づいて実現されています.具体的な詳細はJDKのLinked Blocking Dequeの実現を確認できます.スレッドの安全に関することも考慮しています.ここでは単なる実現で、二重端行列の構造と動作方式を理解しています.
PS:清山緑水は塵から始まります.博学で多くの知識があります.お酒がありますが、話がありますか?微信公衆号:「清塵雑談」.一緒におしゃべりして、コードを話しましょう.