データ構造とアルゴリズム-オブジェクト向けのキュー(学習ノートの大きなパッケージと間もなく発売される初級問題の進級問題javaの説明を含む)


最近もいくつかのデータ構造とアルゴリズムの知識を徐々に復習して、学習過程のコードはすべてとても堅苦しいことを発見して、ただ単純にデータ構造とアルゴリズムの原理を解釈して、コードの再利用性、規範性、インタフェース向けのプログラミングは少しも体現していません.そのため、私はわざわざ追加のブログを書いて、データ構造とアルゴリズムのオブジェクト向けの書き方を解析しました.ついでに皆さんに私が勉強しているノートをプレゼントします.
文書構造(完全なDemoは文末のリンクで与えられる):インタフェース向けにプログラミングされたキューの例(シーケンスキュー、チェーンキュー、およびループキュー)
キューの例(シーケンスキュー、チェーンキュー、およびループキュー):
プリセットインタフェース:
//         
public interface Queue {
    //  
    public void append(Object obj);
    //  
    public Object delete();
    //      
    public Object getHead();
    //        
    public boolean isEmpty();
}

シーケンスキュー:
//   
class DATA4 {
    String name;
    int age;
}

class SQType implements Queue{
    static final int QUEUELEN = 15;             //     
    DATA4[] data = new DATA4[QUEUELEN];             //     
    int head;                       //   
    int tail;                       //   

    //     
    SQType SQTypeInit() {
        SQType q;

        if ((q = new SQType()) != null) {               //     ,    ,          
            q.head = 0;             //     
            q.tail = 0;             //     
            return q;
        } else {
            return null;                //    
        }
    }
    //    
    void SQTypeFree(SQType q){
        if(q!=null){
            q=null;                     // java      ,      null,              ,                
        }
    }
    //      
    @Override
    public boolean isEmpty() {

        return (head == tail);//                 
    }

    //      
    int SQTypeIsFull(SQType q) {
        int temp = 0;
        if (q.tail == QUEUELEN) {                       //                   ,          
            temp = 1;
        }
        return temp;
    }

    //    
    @Override
    public void append(Object data4) {
        if (tail == QUEUELEN) {
            System.out.print("    !    !
"
); // } else { data[tail++] = (DATA4) data4; // , ( tail )。 } } // public Object delete(){ if(head==tail){ System.out.print("
! !
"
); // , System.exit(0); }else{ // , 。 , return data[head++]; } return null; } // , public Object getHead(){ if(isEmpty()==true){ System.out.print("
!
"
); return null; }else{ return data[head]; } } // int SQType(SQType q){ int temp; temp=q.tail-q.head; return (temp); } }

チェーンキュー:
class LinkQueue implements Queue{
    Node head;
    Node tail;
    int count;//      

    public LinkQueue() {
        init();
    }
    //     
    public void init() {
        head = tail = null;
        count = 0;
    }

    //     
    @Override
    public void append(Object obj) {
        Node node = new Node(obj, null);
        //          。
        if (tail != null) {
            tail.next = node;//          
        }
        tail = node;//           
        if (head == null) {
            head = node;
        }
        count++;
    }

    //       :
    @Override
    public Object delete() {
        if (isEmpty() == true) {
            System.out.println("    !!");
            return null;
        }
        Node node = head;
        head = head.next;//           ,      
        count--;
        return node;
    }
    //     :
    @Override
    public Object getHead() {
        if (isEmpty() == true) {
            System.out.println("    !!");
            return null;
        } else {
            return head.getElement();//          
        }

    }

    //   
    @Override
    public boolean isEmpty() {
        return count == 0;
    }
}
//   :
class Node {
    Object element; //    
    Node next; //    

    //         
    public Node(Node nextval) {
        this.next = nextval;
    }

    //          
    public Node(Object obj, Node nextval) {
        this.element = obj;
        this.next = nextval;
    }

    //            
    public Node getNext() {
        return this.next;
    }

    //           
    public Object getElement() {
        return this.element;
    }

    //           
    public void setNext(Node nextval) {
        this.next = nextval;
    }

    //           
    public void setElement(Object obj) {
        this.element = obj;
    }

    public String toString() {
        return this.element.toString();
    }
}

循環キュー:
// tail   head ,    head ,             !!         !
class CircleQueue implements Queue{
    static final int defaultSize = 10; //        
    int head;
    int tail;
    int count;//           
    int maxSize; //       
    Object[] queue; //   

    public CircleQueue() {
        init(defaultSize);
    }

    public void init(int size) {
        maxSize = size;
        head = tail = 0;
        count = 0;
        queue = new Object[size];
    }

    //     
    @Override
    public void append(Object obj) {
        //        ,          !!!           !!
        if (count > 0 && head == tail) {
            System.out.println("    !!");
        }

        queue[tail] = obj;
        //        :  (tail+1)%maxSize head         ,       。
        //   ,               ,          。
        tail = (tail + 1) % maxSize;
        count++;

    }

    //       :
    @Override
    public Object delete() {
        if (isEmpty()) {
            System.out.println("    !!");
        }
        Object obj = queue[head];
        head = (head + 1) % maxSize;//  head          ,              。
        count--;
        return obj;
    }

    //       
    @Override
    public Object getHead() {
        if (isEmpty() == true) {
            System.out.println("    !!");
            return null;
        } else {
            return queue[head];
        }

    }

    //   
    @Override
    public boolean isEmpty() {
        return count == 0;
        //            :(tail-head+maxSize)%maxSize
    }
}

ソースコードのダウンロード:学習ノートの大きい贈り物と間もなく発売する初級問題の進級問題
本ブログで述べた例のdemoも中に入っています.
さあ、データ構造とアルゴリズム-オブジェクト向けのキュー(学習ノートの大きなパッケージと間もなく発売される初級問題の進級問題を含む)は終わりました.このブログはまた新しいシリーズですが、これは私の以前のノートを主とし、データ構造とよく見られるアルゴリズムを網羅しています.また、間もなく初級問題と進級問題を次々と発売し、私は次第にみんなに出して、経験を分かち合います.以下で間違いを指摘することを歓迎して、共に勉強します!!あなたのいいねは私にとって最高の支持です!!
その他、JackFrostのブログにアクセスできます