數據結構專題(一)——數組與鏈表

爲了鍛鍊自己的思維,鞏固計算機基礎,特地做一個數據結構的專題。說到數據結構其實就是探討數據存儲的方式問題,以及一些對數據的增刪改查操作問題。如果能用故事的形式把數據結構講出來,那麼數據結構將不會那麼枯燥了。

故事一:數組與鏈表的前世今生

計算機先生有許多員工,其中有一位名字叫做memory manager(可以稱呼他爲內存先生),內存先生的日常工作就是管理着一堆儲物櫃子(內存),每次計算機先生收到一些需要保存的數據時就會告訴內存先生把這些數據放到儲物櫃子裏面,等後面需要使用的時候再從櫃子中取出來。櫃子數量衆多,爲了管理方便,每個櫃子都有自己的編號,有一次王老闆買了五雙不同的AJ球靴,但想要把他們存放起來,於是找到了計算機先生。

王老闆:“計算機先生,我這五雙鞋子不好帶在身邊,要不就先存到你的公司裏吧?”

計算機先生:“OK,我這就通知內存先生給你開五個小的儲物櫃子,每個櫃子放一雙鞋吧。”

於是計算機先生打了電話給內存先生:“給我開五個儲物櫃用來放客戶的鞋子。”

內存先生查看了儲物櫃的情況發現有五個連續的櫃子6,7,8,9,10號櫃子正好是空的,於是就把王老闆的鞋子一雙雙放到了這五個櫃子裏。內存先生比較懶,最討厭在記錄本上寫下非常完整的信息,覺得這樣浪費自己的時間,於是他自己形成了一套記錄方法,那就是隻記錄五個儲物櫃中第一個儲物櫃編號,以及用戶用的總的儲物櫃數目,那麼記錄本上就有了一條新記錄“#6 5 王先生”,意思就是從6號櫃子開始的五個連續櫃子裏的東西都是王先生的,計算機先生交代的任務就這麼完成了。

以上的連續儲物櫃其實就是計算機科學中數組的原型。數組的定義爲計算機內存空間中一段連續的存儲空間,現在看這段定義是不是非常的清晰明瞭?

隨着存放物品的客戶數量增加,內存先生髮現連續的存儲櫃子越來越少了,這可能會影響後來的客戶存放東西呢。果然,沒過多久問題來了,一個大客戶說要存100瓶酒,但是內存先生看了記錄本發現沒有連續的100個櫃子,但是有很多零零散散的櫃子,這可怎麼辦呢?能不能把這些零散的櫃子利用起來,並且不改變我記錄本的書寫方式呢?

內存先生雖然懶但是他是個聰明人,要不玩個“找寶藏”的遊戲吧。他在第一個櫃子裏放入了一瓶酒和一張紙條,紙條上寫了第二瓶酒存的櫃子編號。。。以此類推,第99瓶酒存放的那個櫃子裏還有一張寫了第100瓶酒存放的儲物櫃編號。而記錄本上依舊只寫了第一瓶酒存放的儲物櫃號碼。這樣的存儲方式就不用再考慮連續的櫃子了,可以非常完美的把所有的櫃子利用起來呢。

這種離散的存儲方式就是傳說中的鏈表了,鏈表的每個節點都包含兩個部分,一部分是存放的數據,另一部分就是下一個節點的地址。

數組與鏈表是計算機內存存儲方式的基石,理解了他們對後續的數據結構以及算法學習大有好處,比如把鏈表的增刪方式做一些限制就能形成所謂的隊列和棧結構,並且鏈表在圖與樹結構的存儲中也大有用處。

下一步就是代碼實現各種數據結構了,此專題將使用Java進行實現。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章