通過上節我們知道,資料結構是學習資料儲存方式的一門學科,那麼,資料儲存方式有哪幾種呢?本節將對資料結構的學習內容做乙個簡要的總結。
資料結構大致包含以下幾種儲存結構:
下面對各種資料結構做詳細講解。
線性表結構儲存的資料往往是可以依次排列的,就像小朋友手拉手,每位學生的前面和後面都僅有乙個小朋友和他拉手,具備這種「一對一」關係的資料就可以使用線性表來儲存。
例如,儲存類似 這樣的資料時,各元素依次排列,每個元素的前面和後邊有且僅有乙個元素與之相鄰(除首元素和尾元素),因此可以使用線性表儲存。
線性表並不是一種具體的儲存結構,它包含順序儲存結構和鏈式儲存結構,是順序表和煉表的統稱。
順序表順序表,簡單地理解,就是常用的陣列
,只是換了個名字而已,例如使用順序表儲存 ,如圖 1 所示:
圖 1 順序表結構
由於順序表結構的底層實現借助的就是陣列,因此對於初學者來說,可以把順序表完全等價為陣列,但實則不是這樣。資料結構是研究資料儲存方式的一門學科,它囊括的都是各種儲存結構,而陣列只是各種程式語言中的基本資料型別,並不屬於資料結構的範疇。
鍊錶我們知道,使用順序表(底層實現靠陣列)時,需要提前申請一定大小的儲存空間,這塊儲存空間的實體地址是連續的,如圖 1 所示。
鍊錶則完全不同,使用鍊錶儲存資料時,是隨用隨申請,因此資料的儲存位置是相互分離的,換句話說,資料的儲存位置是隨機的。
為了給各個資料塊建立「依次排列」的關係,鍊錶給各資料塊增設乙個指標,每個資料塊的指標都指向下乙個資料塊(最後乙個資料塊的指標指向 null),就如同乙個個小學生都伸手去拉住下乙個小學生的手,這樣,看似毫無關係的資料塊就建立了「依次排列」的關係,也就形成了鍊錶,如圖 2 所示:
圖 2 鍊錶結構
棧和佇列
棧和佇列隸屬於線性表,是特殊的線性表,因為它們對線性表中元素的進出做了明確的要求。
棧中的元素只能從線性表的一端進出(另一端封死),且要遵循「先入後出」的原則,即先進棧的元素後出棧。
圖 3 棧結構示意圖
棧結構如圖 3 所示,像乙個木桶,棧中含有 3 個元素,分別是 a、b 和 c,從在棧中的狀態可以看出 a 最先進的棧,然後 b 進棧,最後 c 進棧。根據「先進後出」的原則,3 個元素出棧的順序應該是:c 最先出棧,然後 b 出棧,最後才是 a 出棧。
佇列中的元素只能從線性表的一端進,從另一端出,且要遵循「先入先出」的特點,即先進佇列的元素也要先出佇列。
圖 4 佇列結構示意圖
佇列結構如圖 4 所示,佇列中有 3 個元素,分別是 a、b 和 c,從在佇列中的狀態可以看出是 a 先進佇列,然後 b 進,最後 c 進。根據「先進先出」的原則,3 個元素出佇列的順序應該是 a 最先出佇列,然後 b 出,最後 c 出。
樹儲存結構適合儲存具有「一對多」關係的資料。
圖 5 家庭族譜
如圖 5 所示,其中張平只有乙個父親,但他卻有兩(多)個孩子,這就是「一對多」的關係,滿足這種關係的資料可以使用樹儲存結構。
圖儲存結構適合儲存具有「多對多」關係的資料。
圖 6 圖儲存結構示意圖
如圖 6 所示,從 v1 可以到達 v2、v3、v4,同樣,從 v2、v3、v4 也可以到達 v1,這就是「多對多」的關係,滿足這種關係的資料可以使用圖儲存結構。
12 資料結構
1.資料結構 有特殊關係的資料的集合 它們之間的關係。2.陣列 array 相同型別元素的有序集合。適合查詢和檢索,不適合插入和刪除。二維陣列 two dimensional arry 的儲存方式 3.記錄 record 可能是不同型別元素的集合。記錄名 記錄 物件 的名字,網域名稱 記錄中各個域 ...
《資料結構》 實驗1 2
資料結構 實驗一 vc程式設計工具的靈活使用 一 實驗目的 複習鞏固vc程式設計環境的使用,以及c 模板設計。1.回顧並掌握vc單檔案結構程式設計過程。2.回顧並掌握vc多檔案工程設計過程 3.掌握vc程式除錯過程。4.回顧c 模板和模板的程式設計。二 實驗內容 2.設計乙個單檔案結構程式完成從鍵盤...
《資料結構》 實驗1 2
資料結構 實驗一 vc程式設計工具的靈活使用 一 實驗目的 複習鞏固vc程式設計環境的使用,以及c 模板設計。1.回顧並掌握vc單檔案結構程式設計過程。2.回顧並掌握vc多檔案工程設計過程 3.掌握vc程式除錯過程。4.回顧c 模板和模板的程式設計。二 實驗內容 2.設計乙個單檔案結構程式完成從鍵盤...