1,邏輯結構:集合結構:資料元素之間沒有特別的關係,僅同屬形同集合;
線性結構:資料元素之間一對一的關係;樹形結構:資料元素之間存在一對多的關係;圖形結構:資料元素之間是多對多的關係。
3,資料結構就分:邏輯結構和物理結構;
4,資料結構指示靜態的描述了資料元素之間的關係,高效的程式需要在資料結構的基礎上設計和選擇演算法。
5,乙個好的程式是結構+演算法;
6,判斷乙個演算法的效率時,往往只需要關注運算元量的最高次項,其他次要的和常數項可以省略。
7.演算法的效率嚴重依賴於運算元量,在判斷時首先要關注運算元量的最高次項,運算元量的估算可以作為時間複雜度的估算。在沒有特殊的說明時,我們所分析的演算法的時間複雜度都是指最壞的複雜度。如有必要,就通過空間複雜度來降低時間複雜度;同樣,也可以通過時間複雜度來降低空間複雜度。
8,資料結構:就是計算機中表示儲存的,具有一定邏輯關係和行為特徵的一組資料。其中的每個資料元素稱為這個結構的乙個節點。,
9,抽象資料型別:可以定義為具有一定行為的抽象數學型別。它不關心型別中值的具體的表示方式,和資料型別中定義的各種操作的具體實現方法,是所有可能值的具體表示和各種操作的具體實現的抽象。實質是:抽象出資料型別的使用要求,而把它的具體的表示方式和運算的細節都隱藏起來,抽象資料型別僅僅規定了資料型別應該具有的行為操作。
線性表:
1,線性表的本質:是零個或者多少個資料元素的集合;線性表中的資料元素之間是有序的;線性表巨集元素個數是有限的;線性表中的元素的型別必須是相同的。
2,線性表的定義:線性表是具有相同型別的的n(n>0)個資料元素的有限序列。
3,總結:線性表是有限,有序,同種型別資料的集合。
4, 線性結構的有:串,棧,佇列,這些線性結構的特定:有且僅有乙個開始節點和終端節點。之間的區別主要是操作的不同。
5,順序表示:線性表可以採用順序儲存和鏈式儲存。
6,在順序表中,邏輯關係上相鄰的兩個節點,在物理位置上也是相鄰的,節省了用於儲存邏輯關係的空間,還可以達到按下標訪問任一元素的效果。
7,如果順序表溢位了,採取的補救措施:1)申請乙個較大的空間,用新的陣列代替原來的陣列(但是花費較多的時間代價,空間代價,同時還要保證這種複製不會影響原來元素的使用。)。
陣列表示線性表缺點:刪除和插入要移動大量的元素,效率低;順序表中的陣列要求占用連續的儲存空間,儲存分配要預先按最大的空間來分配,有時難以估計最大的空間,浪費空間;
鍊錶的表示:這種表示線性表,這種儲存結構不要求邏輯關係上相鄰的兩個元素在物理位置上也相鄰,而是通過指標來指示元素之間的邏輯關係和後繼元素的位置。
2)特點:用一組可以不連續的儲存單元,儲存線性表的各個元素。每乙個節點的指標域和元素要連續存放,但是不同的節點之間可以不進行連續存放。
3)有時為了處理方便,在單鏈表的第乙個節點之前另加乙個節點,稱之為頭節點。頭結點欄位中可以存放與整個鍊錶相關的資訊。也可以不存放任何資訊;頭結點的引入雖然需要另外的加乙個節點的空間,但是它使得所有的鍊錶的頭指標的值不為null,其作用不僅僅是給單鏈表增加了一層指標,還對單鏈表中的第乙個節點的處理與其他節點的處理一致起來。
4)使用鍊錶:每次查詢都要從第乙個開始找,浪費時間;但是插入和刪除處理就很好。
單鏈表和順序表比較:
1)單鏈表的儲存密度比順序表的低,但是空間分布比較靈活,順序表要按估計的最大需要分配的連續空間,
2)對於 順序表,可隨機訪問任何乙個元素,而在單鏈表中,需要順著鍊錶逐個進行查詢,適合成批順序地處理;
3)在單鏈表裡進行插入,刪除比較靈活,但是在順序表裡需要移動後面的元素。
儲存的密度 =資料本身所佔的儲存量/整個資料結構所佔的儲存量;
單鏈表的改進和擴充:
單鏈表改進和擴充的形式:迴圈鍊錶,雙鏈表和迴圈雙鏈表。
1,迴圈鍊錶:
1)不讓最後乙個節點的指標指向null,而讓它指向頭乙個節點;
2)在迴圈鍊錶中,必須從頭指標開始,訪問所有的節點,
3)判斷遍歷是否結束,要判最後乙個訪問的節點和第乙個節點是否相同。,
2,雙鏈表:
1)單鏈表可以找後繼節點,但是找前驅就比較不方便;
2)為了克服這種單向性的缺點,可以設計具有雙向性的鍊錶,簡稱為雙鏈表;
3)雙鏈表,在每個節點,有資料域,有兩個指標域,乙個指向其前驅節點,乙個指向後繼節點;
4)雙鏈表的好處是:可以很容易的找到節點的前驅和後繼。但是每個節點要增加乙個指標的儲存為代價。
資料結構和演算法 C語言
鍊錶的基本操作 作用 鍊錶的基本操作和將鍊錶逆置功能 include stdio.h include string.h include stdlib.h typedef struct linknodelinknode 從鍵盤中輸入資料,然後建立成煉表 linknode creat slist lin...
C語言資料結構1 資料結構和演算法
如果沒有接觸過資料結構這門課程,或者說只是單單聽過這個名詞。那麼在含義方面,資料結構對於我們來說是非常陌生的。在了解一門課程之前,我們總是要知道這門課程要學習什麼。在了解資料結構之前,我們需要知道什麼是資料。對於人類來說,一切可以讓我們獲取資訊的東西都是資料。我們可以通過乙個動物的叫聲判斷是什麼動物...
六 C語言資料結構和演算法
1 資料結構,顧名思義,資料的結構,而如何將資料組合成一種結構了,c語言裡用到了struct結構體型別 union聯合體型別 enum列舉型別這三種。struct結構體型別,顧名思義,是一種結構,一種由基本資料型別 int char double float等等 組合而成的乙個整體,至於如何組合,很...