數據結構掃盲篇:數組,單向鍊表,雙向鍊表介紹(用圖片告訴你)

數組

數組有上界和下界,數組的元素在上下界內是連續的。

存儲10,20,30,40,50的數組的示意圖如下:

數據結構掃盲篇:數組,單向鏈表,雙向鏈表介紹(用圖片告訴你)

數組的特點是:數據是連續的;隨機訪問速度快。

數組中稍微複雜一點的是多維數組和動態數組。對於C語言而言,多維數組本質上也是通過一維數組實現的。至於動態數組,是指數組的容量能動態增長的數組;對於C語言而言,若要提供動態數組,需要手動實現;而對於C++而言,STL提供了Vector;對於Java而言,Collection集合中提供了ArrayList和Vector。

單向鏈表

單向鏈表(單鏈表)是鏈表的一種,它由節點組成,每個節點都包含下一個節點的指針。

單鏈表的示意圖如下:

數據結構掃盲篇:數組,單向鏈表,雙向鏈表介紹(用圖片告訴你)

表頭為空,表頭的後繼節點是"節點10"(數據為10的節點),"節點10"的後繼節點是"節點20"(數據為10的節點),...

單鏈表刪除節點

數據結構掃盲篇:數組,單向鏈表,雙向鏈表介紹(用圖片告訴你)

刪除"節點30"

刪除之前:"節點20" 的後繼節點為"節點30",而"節點30" 的後繼節點為"節點40"。

刪除之後:"節點20" 的後繼節點為"節點40"。

單鏈表添加節點

數據結構掃盲篇:數組,單向鏈表,雙向鏈表介紹(用圖片告訴你)

在"節點10"與"節點20"之間添加"節點15"

添加之前:"節點10" 的後繼節點為"節點20"。

添加之後:"節點10" 的後繼節點為"節點15",而"節點15" 的後繼節點為"節點20"。

單鏈表的特點是:節點的鏈接方向是單向的;相對於數組來說,單鏈表的的隨機訪問速度較慢,但是單鏈表刪除/添加數據的效率很高。

雙向鏈表

雙向鏈表(雙鏈表)是鏈表的一種。和單鏈表一樣,雙鏈表也是由節點組成,它的每個數據結點中都有兩個指針,分別指向直接後繼和直接前驅。所以,從雙向鏈表中的任意一個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。一般我們都構造雙向循環鏈表。

雙鏈表的示意圖如下:

數據結構掃盲篇:數組,單向鏈表,雙向鏈表介紹(用圖片告訴你)

表頭為空,表頭的後繼節點為"節點10"(數據為10的節點);"節點10"的後繼節點是"節點20"(數據為10的節點),"節點20"的前繼節點是"節點10";"節點20"的後繼節點是"節點30","節點30"的前繼節點是"節點20";...;末尾節點的後繼節點是表頭。

雙鏈表刪除節點

數據結構掃盲篇:數組,單向鏈表,雙向鏈表介紹(用圖片告訴你)

刪除"節點30"

刪除之前:"節點20"的後繼節點為"節點30","節點30" 的前繼節點為"節點20"。"節點30"的後繼節點為"節點40","節點40" 的前繼節點為"節點30"。

刪除之後:"節點20"的後繼節點為"節點40","節點40" 的前繼節點為"節點20"。

雙鏈表添加節點

數據結構掃盲篇:數組,單向鏈表,雙向鏈表介紹(用圖片告訴你)

在"節點10"與"節點20"之間添加"節點15"

添加之前:"節點10"的後繼節點為"節點20","節點20" 的前繼節點為"節點10"。

添加之後:"節點10"的後繼節點為"節點15","節點15" 的前繼節點為"節點10"。"節點15"的後繼節點為"節點20","節點20" 的前繼節點為"節點15"。

文章修改參考http://www.cnblogs.com/skywang12345/p/3561803.html

喜歡我的文章的話,就關注我吧!在本頭條號的置頂文章中有【文章分類】包含:

[C++進階篇系列]

[高級網絡編程篇系列]

[Linux系統篇系列]

[C++基礎知識篇]

[協議篇系列]

[數據結構和算法系列]

[設計模式系列]

不要只收藏和轉發哦,寫文章其實很累的。


分享到:


相關文章: