上篇部落格集中討論了學習資料結構所要經歷的三個過程,這三個過程不僅僅適用於資料結構,同樣也適用於其它課程門類的學習。相信經過三個過程後在資料結構上取得較好的分數是沒問題的。另外我們還討論了資料結構一些基本的知識點,使用紅色標記的文字是軟體考試中的重點部分。接下來進入資料結構的內容部分。
順序表,需要強調兩點:
a) 元素在記憶體中是以順序儲存的;
b) 記憶體劃分的區域是乙個連續的單元。
設線性表中所有結點的型別相同,則每個結點所占用儲存空間大小亦相同。假設表中每個結點占用c個儲存單元,其中第乙個單元的儲存位址則是該結點的儲存位址,並設表中開始結點a1的儲存位址(簡稱為基位址)是loc(a1),那麼結點ai的儲存位址loc(ai)可通過下式計算:
loc(ai)= loc(a1)+(i-1)*c 1≤i≤n
note:
在順序表中,每個結點ai的儲存位址是該結點在表中的位置i的線性函式。只要知道基位址和每個結點的大小,就可在相同時間內求出任一結點的儲存位址。是一種隨機訪問結構。
鍊錶在記憶體中是離散儲存的,乙個個單獨的表。乙個鏈相當於乙個結點,結點之間通過指標聯絡起來。儲存空間雖然是離散的,但是通過邏輯上的指標互相聯絡起來,使得成為乙個線性的整體的表。
note:鍊錶,物理上是離散的,邏輯上是連續的。
note:每個結點分為資料域和指標域。
由很多結點鏈起來的,單向的資料結構。
2.1.1 刪除
在刪除時,首先把p結點的指標域指向s結點的指標域所指向的內容,然後在某一時間釋放被刪除的節點即可。
void ddeletenode(dlistnode *p)
2.1.2 插入
在插入節點時,首先要把s寫入結點的資料域中,然後執行插入操作,將p結點的指標域替換為指向s,s的指標域指向p指標指向的結點。
類似於單鏈表,不同的是迴圈鍊錶最後乙個節點它的下乙個節點是頭結點,而單鏈表最後乙個節點是空。
雙(向)鍊錶中有兩條方向不同的鏈,即每個結點中除next域存放後繼結點位址外,還增加乙個指向其直接前趨的指標域prior。
note:將頭結點和尾結點鏈結起來,為雙迴圈鍊錶。
contrast:雙鏈表可以朝兩個方向移動,而單鏈表只能朝乙個方向移動,所以雙鏈表的靈活性優於單鏈表,但是它會更消耗記憶體。
2.3.1 刪除
note:與單鏈表上的插入和刪除操作不同的是,在雙鏈表中插入和刪除必須同時修改兩個方向上的指標。
2.3.2 插入
上述兩個演算法的時間複雜度均為o(1)。
上面介紹了線性結構中最基本的兩種線性表--順序表和煉表,最後我們從圖上來比較下兩種結構的優略性。
(1)從空間儲存效能上分析,因為順序表儲存的資料在記憶體空間上是連續分配的,而且它的儲存容量是事先確定的,所以它相較鍊錶來說,在儲存密度上會優於鍊錶。但也因為這種事先分配空間的原因,當儲存大小不一的資料時往往會造成空間的浪費,而鍊錶是動態的分配資料的空間,所以在容量分配上鍊表更有優勢。
(2)從時間效能上來說,鍊錶的節點是程離散分配的,它沒有固定的結構,這使得對資料的插入和刪除更加靈活,不會出現資料的上溢和下溢的情況,也不會出現其它資料的移動問題,所以它的操作會優於順序表。對於查詢來說兩種結構有著相同的時間複雜度,在查詢時都會遵循線性結構乙個個的查詢。但對於讀操作卻有著區別,因為順序表在讀取資料時煉表會按照儲存順序乙個個的進行讀操作,但是鍊錶有複雜的邏輯結構,它的時間的複雜度取決於邏輯結構的複雜的所以對於讀操作順序表會更加便利些。
下篇部落格--討論線性結構中的棧和佇列。
資料結構全攻略 學好資料結構的必經之路
zz 2013 09 16 09 23 380人閱讀收藏 舉報目錄 很多人在學習時一猛子紮進細節裡無法自拔,以至於顧此失彼,丟了西瓜撿了芝麻。這種學習方法特別浪費時間,效率也非常低下,以至於在學習的長河中慘遭淘汰。如果這種人繼續不思進取,那麼在激烈的社會競爭環境中也會慘遭淘汰。在學習時我們不妨先了解...
資料結構全攻略 學好資料結構的必經之路
很多人在學習時一猛子紮進細節裡無法自拔,以至於顧此失彼,丟了西瓜撿了芝麻。這種學習方法特別浪費時間,效率也非常低下,以至於在學習的長河中慘遭淘汰。如果這種人繼續不思進取,那麼在激烈的社會競爭環境中也會慘遭淘汰。在學習時我們不妨先了解下該門學科所要學習的框架知識,對知識點有初步的全域性把控,這也是一種...
資料庫優化全攻略
數 據庫是企業資訊的核心,其應用水平的高低直接影響到企業管理水平。選擇了乙個高效能的資料庫產品不等於就有乙個好的資料庫應用系統,如果資料庫系統設計不 合理,不僅會增加客戶端和伺服器端程式的程式設計和維護的難度,而且還會影響系統實際執行的效能。本專題主要講解資料庫各種效能優化技術,從而避免磁碟i o ...