1. 程式人生 > >學習《資料結構與演算法》筆記02 連結串列

學習《資料結構與演算法》筆記02 連結串列

連結串列

陣列結構的缺點:

1.陣列的大小是固定的;

2.無序陣列中,查詢效率很低;查詢O(N),插入O(1)

3.有序陣列中,插入效率又很低;查詢O(logN)使用二分法,提高查詢效率,減少查詢次數logN=log2(N)*3.322;插入O(N)

4.不管是哪種陣列,刪除操作效率都很低。O(N)

本章將學習單鏈表、雙端連結串列、有序連結串列、雙向連結串列和有迭代器的連結串列

鏈結點(Link)

在連結串列上,每一個數據項,都被包含在一個“鏈結點”中。一個鏈結點是某個類的物件,這個類可以叫做Link,Link類是連結串列類是分開的。每個鏈結點物件,都包含一個對下一個鏈結點引用的欄位(通常叫next)。但是連結串列本身的物件中有一個欄位指向對第一個鏈結點的引用。

我們通過java程式碼來建立Link類:

public class Link {
    private int iData; // int型別資料
    private double dData; // double型別資料
    private Link next; // 下一個link物件的應用,記憶體地址
}

單鏈表

package linkedlist;

/**
 * @author yangjian
 * @date created in 11:34 2019/07/19
 */
public class LinkList {
    private Link first;

    public void LinkList(){
        first = null;
    }

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

    public void insertFirst(int id, double dd){
        Link newLink = new Link(id, dd);
        newLink.next = first;
        first = newLink;
    }

    public Link deleteFirst(){
        Link temp = first;
        first = first.next;
        return temp;
    }

    public void displayLinkList(){
        System.out.println("= displayLinkList begin :");
        Link current = first;
        while(current != null){
            current.displayLink();
            current = current.next;
        }
        System.out.println("= displayLinkList end");
    }
}

class LinkListApp{
    public static void main(String [] args){
        LinkList linkList = new LinkList();
        linkList.insertFirst(1,10.0);
        linkList.insertFirst(2,20.0);
        linkList.insertFirst(3,30.0);
        linkList.insertFirst(4,40.0);
        linkList.insertFirst(5,50.0);
        linkList.displayLinkList();
    }
}