国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)結(jié)構(gòu)模擬實(shí)現(xiàn)LinkedList雙向不循環(huán)鏈表

這篇具有很好參考價(jià)值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu)模擬實(shí)現(xiàn)LinkedList雙向不循環(huán)鏈表。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

一、雙向不循環(huán)鏈表的概念

二、鏈表的接口

三、鏈表的方法實(shí)現(xiàn)

(1)display方法

(2)size方法

(3)contains方法

(4)addFirst方法

(5)addLast方法

(6)addIndex方法

(7)remove方法

(8)removeAllKey方法

(9)clear方法

四、最終代碼


一、雙向不循環(huán)鏈表的概念

雙向不循環(huán)鏈表中的節(jié)點(diǎn)有三個(gè)域,一個(gè)是存儲數(shù)據(jù)的val域,一個(gè)是前驅(qū)prev域,還有一個(gè)是下個(gè)節(jié)點(diǎn)next域,和單向不同的就是多了一個(gè)前驅(qū)域。如圖:

數(shù)據(jù)結(jié)構(gòu)模擬實(shí)現(xiàn)LinkedList雙向不循環(huán)鏈表,數(shù)據(jù)結(jié)構(gòu),鏈表

定義一個(gè)MyLinkedList類,這個(gè)類包含要模擬實(shí)現(xiàn)的方法,還有一個(gè)內(nèi)部類ListNode,這個(gè)內(nèi)部類就是鏈表的節(jié)點(diǎn),代碼如下:

public class MyLinkedList implements Ilist{
    public ListNode head;//頭結(jié)點(diǎn)
    public ListNode last;//尾結(jié)點(diǎn)

    static class ListNode {
        int val;
        ListNode next;
        ListNode prev;
        public ListNode(int val) {
            this.val = val;
        }
    }
}


二、鏈表的接口

代碼如下:

public interface Ilist {
    //頭插法
    void addFirst(int data);
    //尾插法
    void addLast(int data);
    //任意位置插入,第一個(gè)數(shù)據(jù)節(jié)點(diǎn)為0號下標(biāo)
    void addIndex(int index,int data);
    //查找是否包含關(guān)鍵字key是否在單鏈表當(dāng)中
    boolean contains(int key);
    //刪除第一次出現(xiàn)關(guān)鍵字為key的節(jié)點(diǎn)
    void remove(int key);
    //刪除所有值為key的節(jié)點(diǎn)
    void removeAllKey(int key);
    //得到單鏈表的長度
    int size();
    void clear();
    void display();
}

三、鏈表的方法實(shí)現(xiàn)

(1)display方法

此方法是打印所有鏈表節(jié)點(diǎn)的val值,因此要遍歷一遍鏈表的節(jié)點(diǎn)。代碼如下:

    public void display() {
        ListNode cur = this.head;
        while (cur != null) {
            System.out.print(cur.val + " ");
            cur = cur.next;
        }
        System.out.println();
    }

(2)size方法

此方法計(jì)算鏈表中有多少個(gè)節(jié)點(diǎn),所以也要遍歷一遍鏈表,代碼如下:

    public int size() {
        ListNode cur = this.head;
        int count = 0;
        while (cur != null) {
            count++;
            cur = cur.next;
        }
        return count;
    }

(3)contains方法

此方法查看是否有key值,有就返回true,沒有就返回false,所以也要遍歷一遍鏈表,代碼如下:

    public int size() {
        ListNode cur = this.head;
        int count = 0;
        while (cur != null) {
            count++;
            cur = cur.next;
        }
        return count;
    }

(4)addFirst方法

此方法是頭插方法,參數(shù)是鏈表的val域的值,所以調(diào)用此方法時(shí),要創(chuàng)建一個(gè)節(jié)點(diǎn),再把這個(gè)節(jié)點(diǎn)進(jìn)行頭插;頭插時(shí),要修改要插入節(jié)點(diǎn)的next域,指向原來的頭結(jié)點(diǎn),還有原來頭結(jié)點(diǎn)的prev域,指向要插入的節(jié)點(diǎn),最后再把頭結(jié)點(diǎn)改為要插入的這個(gè)節(jié)點(diǎn),如圖:綠色箭頭是修改指向

數(shù)據(jù)結(jié)構(gòu)模擬實(shí)現(xiàn)LinkedList雙向不循環(huán)鏈表,數(shù)據(jù)結(jié)構(gòu),鏈表因?yàn)槭切陆ǖ墓?jié)點(diǎn),所以這個(gè)節(jié)點(diǎn)的prev和next域都是null

修改完后,如圖:

數(shù)據(jù)結(jié)構(gòu)模擬實(shí)現(xiàn)LinkedList雙向不循環(huán)鏈表,數(shù)據(jù)結(jié)構(gòu),鏈表

代碼如下:

    public void addFirst(int data) {
        ListNode cur = new ListNode(data);
        if(this.head == null) {
            this.head = cur;
            this.last = cur;
        } else {
            cur.next = this.head;
            this.head.prev = cur;
            this.head = cur;
        }
    }

執(zhí)行效果如下:

數(shù)據(jù)結(jié)構(gòu)模擬實(shí)現(xiàn)LinkedList雙向不循環(huán)鏈表,數(shù)據(jù)結(jié)構(gòu),鏈表

(5)addLast方法

此方法是尾插法,這里的尾插法時(shí)間復(fù)雜度是O(1),因?yàn)殡p向鏈表有一個(gè)記錄尾結(jié)點(diǎn)的last,所以尾插的時(shí)候直接在尾結(jié)點(diǎn)插入要插入的節(jié)點(diǎn),修改原來的尾結(jié)點(diǎn)的next域,要插入的節(jié)點(diǎn)prev修改成原來的尾結(jié)點(diǎn),最后再把尾結(jié)點(diǎn)last修改成插入的節(jié)點(diǎn),代碼如下:

    public void addLast(int data) {
        ListNode cur = new ListNode(data);
        if(last == null) {
            head = cur;
            last = cur;
        } else {
            last.next = cur;
            cur.prev = last;
            last = cur;
        }
    }

執(zhí)行效果如下:

數(shù)據(jù)結(jié)構(gòu)模擬實(shí)現(xiàn)LinkedList雙向不循環(huán)鏈表,數(shù)據(jù)結(jié)構(gòu),鏈表

(6)addIndex方法

此方法是在指定位置插入節(jié)點(diǎn),第一要檢查要插入位置的index下標(biāo)是否合法,不合法就拋異常,這里定義第一個(gè)節(jié)點(diǎn)下標(biāo)為0,第二個(gè)節(jié)點(diǎn)下標(biāo)為1,依次類推,如果要插入位置的下標(biāo)是0,就是頭插,如果要插入位置的下標(biāo)是鏈表長度(size方法),就是尾插;

要插入的位置在鏈表中間,我們要找出指定位置的前一個(gè)節(jié)點(diǎn),修改前一個(gè)節(jié)點(diǎn)的next域,修改成要插入的節(jié)點(diǎn),還有指定位置原來的節(jié)點(diǎn)的prev域也要修改,修改成要插入的節(jié)點(diǎn)。代碼如下:

    public void addIndex(int index, int data) {
        //檢查下標(biāo)是否合法
        if(index < 0 || index > size()) {
            throw new IndexException("下標(biāo)不合法");
        }
        if(index == 0) {
            addFirst(data);
            return;
        }
        if (index == size()) {
            addLast(data);
            return;
        }
        ListNode cur = new ListNode(data);
        ListNode prev = this.head;
        int count = 0;
        while (count < index - 1) {
            prev = prev.next;
            count++;
        }
        ListNode prevNext = prev.next;
        prev.next = cur;
        cur.prev = prev;
        cur.next = prevNext;
        prevNext.prev = cur;
    }
//自定義異常類
public class IndexException extends RuntimeException{
    public IndexException(String e) {
        super(e);
    }
}

執(zhí)行效果如下:

數(shù)據(jù)結(jié)構(gòu)模擬實(shí)現(xiàn)LinkedList雙向不循環(huán)鏈表,數(shù)據(jù)結(jié)構(gòu),鏈表

(7)remove方法

此方法是移除第一個(gè)值為key的鏈表節(jié)點(diǎn)的方法,參數(shù)是就是key;要移除某一個(gè)節(jié)點(diǎn),就要從頭遍歷一遍鏈表,如果沒找到key值,就直接返回,不做任何操作;

這里要提前處理一些特殊情況,如果頭結(jié)點(diǎn)的val值就是key,就要把head放在head的next域,然后判斷這時(shí)候head是不是空,如果head不是空,head的prev就要修改成空,如果head是空,就要把last設(shè)為空,直接返回。

如果找到了,就要找要刪除節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn),這里會分兩種情況,一種是要刪除的節(jié)點(diǎn)后面沒有節(jié)點(diǎn)了(尾結(jié)點(diǎn)),這時(shí)我們把要刪除節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)的next域改成null,last改成前一個(gè)節(jié)點(diǎn);如果要刪除的節(jié)點(diǎn)后面有節(jié)點(diǎn),就要把前一個(gè)節(jié)點(diǎn)的next域改成要刪除的節(jié)點(diǎn)的next,后一個(gè)的prev域改成前一個(gè)節(jié)點(diǎn),代碼如下:

    public void remove(int key) {
        if(head == null) {
            return;
        }
        if(head.val == key) {
            head = head.next;
            if(head != null) {
                head.prev = null;
            } else {
                last = null;
                return;
            }
        }
        ListNode prev = findPrev(key);
        if(prev == null) {
            //沒有要刪的元素
            return;
        }
        ListNode cur = prev.next;
        if(cur.next != null) {
            prev.next = cur.next;
            cur.next.prev = cur.prev;
        } else {
            //最后一個(gè)元素
            prev.next = cur.next;//null
            last = prev;
        }
    }
    //找到要刪除節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)
    private ListNode findPrev(int key) {
        ListNode cur = this.head;
        ListNode curNext = cur.next;
        while (curNext != null) {
            if(curNext.val != key) {
                cur = cur.next;
                curNext = curNext.next;
            } else {
                return cur;
            }
        }
        return null;
    }

執(zhí)行效果如下:

數(shù)據(jù)結(jié)構(gòu)模擬實(shí)現(xiàn)LinkedList雙向不循環(huán)鏈表,數(shù)據(jù)結(jié)構(gòu),鏈表

(8)removeAllKey方法

此方法是刪除所有節(jié)點(diǎn)的val值為key的方法,所以,我們要遍歷一遍鏈表,如果head為空的話,就直接返回,不做任何操作;

我們定義prev是頭結(jié)點(diǎn),cur是頭結(jié)點(diǎn)的next節(jié)點(diǎn)(要刪除的節(jié)點(diǎn)),從頭到尾遍歷的是cur,如果cur的val值不等于key,prev和cur都要往后走一步;如果cur的val值等于key,會分成兩種情況,就是cur后面是有沒有節(jié)點(diǎn),如果后面有節(jié)點(diǎn),prev節(jié)點(diǎn)的next域就要改成cur的next,cur的下一個(gè)節(jié)點(diǎn)的prev域要改成prev,然后cur往后走一步;如果cur后面的節(jié)點(diǎn)為空,就直接把prev節(jié)點(diǎn)的next域改成空,把last改成prev,cur還要往后走一步結(jié)束循環(huán)。

最后不要忘了頭結(jié)點(diǎn)還沒有判斷,要判斷頭結(jié)點(diǎn)的val值是否和key相等,如果不相等就不做任何操作,相等就把頭結(jié)點(diǎn)head改成頭結(jié)點(diǎn)的next,此時(shí)的頭結(jié)點(diǎn)的prev改成null,注意,這里修改頭結(jié)點(diǎn)的prev,要頭結(jié)點(diǎn)head不為空,才能執(zhí)行上面的操作,不然會空指針異常。

    public void removeAllKey(int key) {
        if(head == null) {
            return;
        }
        ListNode prev = this.head;
        ListNode cur = this.head.next;
        while (cur != null) {
            if(cur.val == key) {
                if(cur.next != null) {
                    prev.next = cur.next;
                    cur.next.prev = prev;
                } else {
                    prev.next = cur.next;//null
                    last = prev;
                }
                cur = cur.next;
            } else {
                prev = prev.next;
                cur = cur.next;
            }
        }
        if(head.val == key) {
            head = head.next;
            if(head != null) {
                head.prev = null;
            }
        }
    }

執(zhí)行效果如下:

數(shù)據(jù)結(jié)構(gòu)模擬實(shí)現(xiàn)LinkedList雙向不循環(huán)鏈表,數(shù)據(jù)結(jié)構(gòu),鏈表

(9)clear方法

此方法是把鏈表中的所有節(jié)點(diǎn)中所有域都置為空,所以要遍歷一遍鏈表,把節(jié)點(diǎn)prev和next域改為null,因?yàn)檫@里的val域類型是int,所以不用修改val域,代碼如下:

    public void clear() {
        ListNode cur = this.head;
        while (cur != null) {
            ListNode curNext = cur.next;
            cur.next = null;
            cur.prev = null;
            cur = curNext;
        }
        head = null;
        last = null;
    }

執(zhí)行效果如下:

數(shù)據(jù)結(jié)構(gòu)模擬實(shí)現(xiàn)LinkedList雙向不循環(huán)鏈表,數(shù)據(jù)結(jié)構(gòu),鏈表文章來源地址http://www.zghlxwxcb.cn/news/detail-770983.html


四、最終代碼

public class MyLinkedList implements Ilist{
    public ListNode head;//頭結(jié)點(diǎn)
    public ListNode last;//尾結(jié)點(diǎn)

    static class ListNode {
        int val;
        ListNode next;
        ListNode prev;
        public ListNode(int val) {
            this.val = val;
        }
    }

    @Override
    public void addFirst(int data) {
        ListNode cur = new ListNode(data);
        if(this.head == null) {
            this.head = cur;
            this.last = cur;
        } else {
            cur.next = this.head;
            this.head.prev = cur;
            this.head = cur;
        }
    }

    @Override
    public void addLast(int data) {
        ListNode cur = new ListNode(data);
        if(last == null) {
            head = cur;
            last = cur;
        } else {
            last.next = cur;
            cur.prev = last;
            last = cur;
        }
    }

    @Override
    public void addIndex(int index, int data) {
        //檢查下標(biāo)是否合法
        if(index < 0 || index > size()) {
            throw new IndexException("下標(biāo)不合法");
        }
        if(index == 0) {
            addFirst(data);
            return;
        }
        if (index == size()) {
            addLast(data);
            return;
        }
        ListNode cur = new ListNode(data);
        ListNode prev = this.head;
        int count = 0;
        while (count < index - 1) {
            prev = prev.next;
            count++;
        }
        ListNode prevNext = prev.next;
        prev.next = cur;
        cur.prev = prev;
        cur.next = prevNext;
        prevNext.prev = cur;
    }

    @Override
    public boolean contains(int key) {
        ListNode cur = this.head;
        while (cur != null) {
            if(cur.val == key) {
                return true;
            }
            cur = cur.next;
        }
        return false;
    }

    @Override
    public void remove(int key) {
        if(head == null) {
            return;
        }
        if(head.val == key) {
            head = head.next;
            if(head != null) {
                head.prev = null;
            } else {
                last = null;
                return;
            }
        }
        ListNode prev = findPrev(key);
        if(prev == null) {
            //沒有要刪的元素
            return;
        }
        ListNode cur = prev.next;
        if(cur.next != null) {
            prev.next = cur.next;
            cur.next.prev = cur.prev;
        } else {
            //最后一個(gè)元素
            prev.next = cur.next;//null
            last = prev;
        }
    }

    private ListNode findPrev(int key) {
        ListNode cur = this.head;
        ListNode curNext = cur.next;
        while (curNext != null) {
            if(curNext.val != key) {
                cur = cur.next;
                curNext = curNext.next;
            } else {
                return cur;
            }
        }
        return null;
    }

    @Override
    public void removeAllKey(int key) {
        if(head == null) {
            return;
        }
        ListNode prev = this.head;
        ListNode cur = this.head.next;
        while (cur != null) {
            if(cur.val == key) {
                if(cur.next != null) {
                    prev.next = cur.next;
                    cur.next.prev = prev;
                } else {
                    prev.next = cur.next;//null
                    last = prev;
                }
                cur = cur.next;
            } else {
                prev = prev.next;
                cur = cur.next;
            }
        }
        if(head.val == key) {
            head = head.next;
            if(head != null) {
                head.prev = null;
            }
        }
    }

    @Override
    public int size() {
        ListNode cur = this.head;
        int count = 0;
        while (cur != null) {
            count++;
            cur = cur.next;
        }
        return count;
    }

    @Override
    public void clear() {
        ListNode cur = this.head;
        while (cur != null) {
            ListNode curNext = cur.next;
            cur.next = null;
            cur.prev = null;
            cur = curNext;
        }
        head = null;
        last = null;
    }

    @Override
    public void display() {
        ListNode cur = this.head;
        while (cur != null) {
            System.out.print(cur.val + " ");
            cur = cur.next;
        }
        System.out.println();
    }
}

//自定義異常類
public class IndexException extends RuntimeException{
    public IndexException(String e) {
        super(e);
    }
}

都看到這了,點(diǎn)個(gè)贊再走吧,謝謝謝謝謝?。?!

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)模擬實(shí)現(xiàn)LinkedList雙向不循環(huán)鏈表的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu)(Java實(shí)現(xiàn))LinkedList與鏈表(上)

    數(shù)據(jù)結(jié)構(gòu)(Java實(shí)現(xiàn))LinkedList與鏈表(上)

    鏈表 邏輯結(jié)構(gòu) 無頭單向非循環(huán)鏈表:結(jié)構(gòu)簡單,一般不會單獨(dú)用來存數(shù)據(jù)。實(shí)際中更多是作為其他數(shù)據(jù)結(jié)構(gòu)的子結(jié)構(gòu),如哈希桶、圖的鄰接表等等。 無頭雙向鏈表:在Java的集合框架庫中LinkedList底層實(shí)現(xiàn)就是無頭雙向循環(huán)鏈表。 鏈表的實(shí)現(xiàn) 創(chuàng)建一個(gè)鏈表 遍歷單鏈表 、 得到

    2024年02月11日
    瀏覽(30)
  • 數(shù)據(jù)結(jié)構(gòu)(Java實(shí)現(xiàn))LinkedList與鏈表(下)

    數(shù)據(jù)結(jié)構(gòu)(Java實(shí)現(xiàn))LinkedList與鏈表(下)

    ** ** 結(jié)論 讓一個(gè)指針從鏈表起始位置開始遍歷鏈表,同時(shí)讓一個(gè)指針從判環(huán)時(shí)相遇點(diǎn)的位置開始繞環(huán)運(yùn)行,兩個(gè)指針都是每次均走一步,最終肯定會在入口點(diǎn)的位置相遇。 LinkedList的模擬實(shí)現(xiàn) 單個(gè)節(jié)點(diǎn)的實(shí)現(xiàn) 尾插 運(yùn)行結(jié)果如下: 也可以暴力使用 全部代碼 MyLinkedList IndexOut

    2024年02月11日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)】_4.List接口實(shí)現(xiàn)類LinkedList與鏈表

    【數(shù)據(jù)結(jié)構(gòu)】_4.List接口實(shí)現(xiàn)類LinkedList與鏈表

    目錄 1.鏈表的結(jié)構(gòu)與特點(diǎn) 1.1 鏈表的結(jié)構(gòu): 1.2 鏈表的特點(diǎn): 2. 不帶頭單鏈表的模擬實(shí)現(xiàn) 3. 單鏈表OJ 3.1 題目1:移除鏈表元素:? 3.2 題目2:反轉(zhuǎn)一個(gè)單鏈表 3.3 題目3:返回鏈表的中間結(jié)點(diǎn) 3.4 題目4:鏈表的倒數(shù)第k個(gè)結(jié)點(diǎn) 3.5 題目5:合并兩個(gè)有序鏈表 3.6 題目6:鏈表的回文結(jié)構(gòu)

    2024年02月15日
    瀏覽(18)
  • 數(shù)據(jù)結(jié)構(gòu)——實(shí)現(xiàn)雙向鏈表

    數(shù)據(jù)結(jié)構(gòu)——實(shí)現(xiàn)雙向鏈表

    怎么說呢?光乍一聽名字好像很難的樣子是吧,那如果你這樣認(rèn)為的話,可就要讓你大跌眼鏡了哦,其實(shí)雙向帶頭循環(huán)鏈表從操作和理解上來說都是要易于單項(xiàng)不帶頭不循環(huán)鏈表(俗稱單鏈表)的。 咱們就來見識見識吧!希望真的能讓你們“大跌眼鏡”哈! 雙向帶頭循環(huán)鏈

    2024年02月07日
    瀏覽(22)
  • 【(數(shù)據(jù)結(jié)構(gòu))— 雙向鏈表的實(shí)現(xiàn)】

    【(數(shù)據(jù)結(jié)構(gòu))— 雙向鏈表的實(shí)現(xiàn)】

    注意: 這里的 “帶頭” 跟前面我們說的 “頭節(jié)點(diǎn)” 是兩個(gè)概念,實(shí)際前面的在單鏈表階段稱呼不嚴(yán) 謹(jǐn),但是為了同學(xué)們更好的理解就直接稱為單鏈表的頭節(jié)點(diǎn)。 帶頭鏈表里的頭節(jié)點(diǎn),實(shí)際為 “哨兵位” ,哨兵位節(jié)點(diǎn)不存儲任何有效元素,只是站在這里“放哨 的” “哨

    2024年02月06日
    瀏覽(28)
  • 數(shù)據(jù)結(jié)構(gòu)——雙向鏈表的實(shí)現(xiàn)

    數(shù)據(jù)結(jié)構(gòu)——雙向鏈表的實(shí)現(xiàn)

    注意: 雙向鏈表又稱帶頭雙向循環(huán)鏈表 這?的“帶頭”跟前?我們說的“頭節(jié)點(diǎn)”是兩個(gè)概念,實(shí)際前?的在單鏈表階段稱呼不嚴(yán) 謹(jǐn),但是為了同學(xué)們更好的理解就直接稱為單鏈表的頭節(jié)點(diǎn)。 帶頭鏈表?的頭節(jié)點(diǎn),實(shí)際為“ 哨兵位 ”,哨兵位節(jié)點(diǎn)不存儲任何有效元素,只

    2024年02月06日
    瀏覽(26)
  • 【數(shù)據(jù)結(jié)構(gòu)】實(shí)現(xiàn)帶頭雙向循環(huán)鏈表

    【數(shù)據(jù)結(jié)構(gòu)】實(shí)現(xiàn)帶頭雙向循環(huán)鏈表

    之前我們已經(jīng)學(xué)習(xí)了單鏈表,有了單鏈表的基礎(chǔ),現(xiàn)在開始學(xué)習(xí)帶頭雙向循環(huán)鏈表~ 結(jié)構(gòu)最復(fù)雜 ,一般用在單獨(dú)存儲數(shù)據(jù)。 實(shí)際中使用的鏈表數(shù)據(jù)結(jié)構(gòu),都是帶頭雙向循環(huán)鏈表 。另外這個(gè)結(jié)構(gòu)雖然結(jié)構(gòu)復(fù)雜,但是使用代碼實(shí)現(xiàn)以后會發(fā)現(xiàn) 結(jié)構(gòu)會帶來很多優(yōu)勢 ,實(shí)現(xiàn)反而簡單

    2024年02月10日
    瀏覽(20)
  • 【數(shù)據(jù)結(jié)構(gòu)】雙向鏈表的實(shí)現(xiàn)

    【數(shù)據(jù)結(jié)構(gòu)】雙向鏈表的實(shí)現(xiàn)

    我要扼住命運(yùn)的咽喉,他卻不能使我完全屈服。? ? ? ? ? ? ? ? ? ? ? --貝多芬 目錄 一.帶頭循環(huán)的雙向鏈表的特點(diǎn) 二.不帶頭不循環(huán)單向鏈表和帶頭循環(huán)的雙向鏈表的對比 三.初始化鏈表,創(chuàng)建哨兵結(jié)點(diǎn) 四.雙向鏈表的各種功能的實(shí)現(xiàn) 1.雙向鏈表的尾插 2.雙向鏈表的打印?

    2023年04月10日
    瀏覽(17)
  • [Collection與數(shù)據(jù)結(jié)構(gòu)] 鏈表與LinkedList (一):鏈表概述與單向無頭非循環(huán)鏈表實(shí)現(xiàn)

    [Collection與數(shù)據(jù)結(jié)構(gòu)] 鏈表與LinkedList (一):鏈表概述與單向無頭非循環(huán)鏈表實(shí)現(xiàn)

    上篇文章我們已經(jīng)對順序表進(jìn)行了實(shí)現(xiàn),并且對ArrayList進(jìn)行了使用,我們知道ArrayList底層是使用數(shù)組實(shí)現(xiàn)的. 由于其底層是一段連續(xù)空間,當(dāng)在ArrayList任意位置插入或者刪除元素時(shí), 就需要將后序元素整體往前或者往后搬移,時(shí)間復(fù)雜度為O(n),效率比較低 ,因此ArrayList不適合做

    2024年04月26日
    瀏覽(97)
  • 雙向鏈表--C語言實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)

    雙向鏈表--C語言實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)

    本期帶大家一起用C語言實(shí)現(xiàn)雙向鏈表?????? 鏈表是一種物理存儲單元上非連續(xù)、非順序的存儲結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的;簡單來說,線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)生成的表,稱作“鏈表”。 每個(gè)元素本身由兩部分組成: 1、本身的信息,稱

    2024年02月04日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包