2016年6月17日 星期五

Data Structure_1 -linked list

         哈囉大家好,在這邊我會陸續新增關於資料結構、程式的筆記以及自己的一些理解。

         在開始資料結構的時候,大家首先接觸的一定是所謂的array(陣列)跟linked list(連結串列)。

         在這邊,我想介紹的是    linked list.
         首先,第一個問題,甚麼是linked list呢? 在這邊一張圖能清楚說明






        在這邊,你的整個linked list會包含你要放資料的部份以及要"連結"到下一個人的部分。

        用程式碼來說,就像下面這邊一樣
   
   class node{
            int data;
            class node *next;
   };
   node Node;

        在這邊,data代表著你要放資料的部分,而next代表著下一個的地址。
    
        我們可以用一個比喻來想linked list 跟array的差異

        今天,有兩個郵差,一個郵差A每天只要送1號到10號的郵件,而另外一個郵差B則是取決於它送信的那個人要不要他繼續送信給別人。

          在這邊,如果說你要叫郵差A送信,想當然耳,郵差A一定超方便的把信送完,因為他們是"連續的",然而,如果今天你叫郵差A送信到11號,他會回答你"抱歉,這已經脫離我的工作範圍了!",這就是所謂的"被劃分好的"。當然,如果今天2號跟4號沒有信,他可以直接送3號,接下來就可以直接跳到五號了,另外一個郵差卻無法。

        那,如果我們是叫郵差B送信呢?,郵差B會先跑的他手上有的第一封信的位置,送完之後,該戶人家可能會說"郵差先生,能幫我送信去這個地方嗎?"緊接著郵差B就會跑到下一個人,但是你也知道,除非有人懶惰,不然通常要送信,地址不可能是連續的,郵差唯一有的資訊就是下一個人的地址,他也不會知道下下一個人的地址。

       這,就是array跟linked list的差異,array的記憶體通常是連續的,區塊的,很多時候他會占用很大一塊記憶體,但她處理起來也會相對快速。linked list的記憶體通常是零碎的,我們會透過指標來連接他們,他的記憶體會比較省,但相對的他的處理時間跟程式就會需要比較長。

今天就到這邊啦,下一篇會是 tree.

沒有留言:

張貼留言