iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 14
0
自我挑戰組

資料結構大便當系列 第 14

[Day 14] linked-list II

  • 分享至 

  • xImage
  •  

第 12 天簡單介紹過 linked-list
今天再更多基本知識


linked-list Introdution

Array 是一個很好用的東西,可是會造成

  • 資料需要先 pre-allocating => 空間浪費
  • 讀取速度緩慢

而 linked-list 有著 **Dynamically allocate memory space ** ,並使用指標將資料一一串起

在 linked-list 結構中,資料可能長這樣:
https://ithelp.ithome.com.tw/upload/images/20190926/20120250fnQAE3izMk.png

根據圖片,我們可以這樣宣告

class Student { 
    public:
    int id;
    char* name;
    Student* next;
};

並且可以這樣使用:
https://ithelp.ithome.com.tw/upload/images/20190926/20120250xgYkMFfjcB.png

Student* sp = new Student;
sp -> id = 106001001;
sp -> name = "John Doe";
sp -> next = NULL;

其中的 NULL 表示接地,在 C 語言中

#define NULL (void *)0

C++11 之後

#define NULL nullptr

而在我寫 leetcode 的經驗,nullptr 略快一些。

linked-list 中還有一個重要角色:next 表示下一個 data

https://ithelp.ithome.com.tw/upload/images/20190926/20120250hAeLvdID1B.png


Types of Linked Lists

  • Singly linked lists are space-efficient.
  • Doubly linked lists support two-way traversal.
  • Circular Linked List with pre and next

Singly linked-list:
https://ithelp.ithome.com.tw/upload/images/20190926/20120250rrgFeyjk0y.png

Double linked-list:
https://ithelp.ithome.com.tw/upload/images/20190926/201202500eOXsPailH.png

Cicular linked-list:
https://ithelp.ithome.com.tw/upload/images/20190926/20120250tOGv9YpM8T.png


Conclusion

Arrays:

  • 空間不自由,而且可能造成浪費
    Linked lists
  • Traversal 慢 (∵ involves many memory address translation)
  • Search 也慢

上一篇
[Day 13] linked-list + queue
下一篇
[Day 15] Heaps
系列文
資料結構大便當30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言