【學習筆記】數據結構之單鏈表(先進先出、先進後出)

        先看下數據結構中一種重要的數據存儲形式,鏈表,下面兩段是來自百度百科:
       鏈表是一種物理存儲單元上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。鏈表由一系列結點(鏈表中每一個元素稱爲結點)組成,結點可以在運行時動態生成。每個結點包括兩個部分:一個是存儲數據元素的數據域,另一個是存儲下一個結點地址的指針域。 相比於線性表順序結構,操作複雜。由於不必須按順序存儲,鏈表在插入的時候可以達到O(1)的複雜度,比另一種線性表順序錶快得多,但是查找一個節點或者訪問特定編號的節點則需要O(n)的時間,而線性表和順序表相應的時間複雜度分別是O(logn)和O(1)。

        使用鏈表結構可以克服數組鏈表需要預先知道數據大小的缺點,鏈表結構可以充分利用計算機內存空間,實現靈活的內存動態管理。但是鏈表失去了數組隨機讀取的優點,同時鏈表由於增加了結點的指針域,空間開銷比較大。鏈表最明顯的好處就是,常規數組排列關聯項目的方式可能不同於這些數據項目在記憶體或磁盤上順序,數據的存取往往要在不同的排列順序中轉換。鏈表允許插入和移除表上任意位置上的節點,但是不允許隨機存取。鏈表有很多種不同的類型:單向鏈表,雙向鏈表以及循環鏈表。鏈表可以在多種編程語言中實現。像Lisp和Scheme這樣的語言的內建數據類型中就包含了鏈表的存取和操作。程序語言或面嚮對象語言,如C,C++和Java依靠易變工具來生成鏈表。

        之前在學習單向鏈表時,對先進先出鏈表始終一知半解,昨天又看了關於數據結構單向鏈表的公開課,恍然大悟!可能是實踐後讓我更容易理解老師講的內容吧~

        要理解先進先出鏈表,先進後出鏈表,首先要明白,兩種鏈表數據插入方式的差異,先進先出鏈表是在尾部插入,先進後出鏈表是在頭部插入。這樣是不是還不能理解,爲啥這樣就是先進先出了呢?下面就分步演示一下插入過程,就可以很明瞭了。

比如我們希望鏈表中存儲1,2,3,4,5這樣的數據,順序固定,兩種鏈表應該如何實現?

先看先進先出鏈表,先進先出是在尾部插入新的數據,所以,1->2->3->4->5依次插入,到第5次就完成了

再看先進後出:先進後出是在頭部插入新的數據, 所以,5->4->3->2->1插入才能實現1->2->3->4->5的存儲,這也就是爲什麼叫先進後出,5是第一個插入的,但卻在隊尾,最後才能被查詢到。這樣是不是更能理解上面的先進先出了呢!

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