資料結構綜述

2021-08-11 15:48:55 字數 3973 閱讀 1588

寫在最開始:

這是我自己學習的經驗和記錄,有的內容很容易理解,但又比較重要,我會直接摘抄書上的內容;有些比較複雜,我會寫明自己的思考;有些我自己也沒搞懂,我會用紅色文字標明,寫出自己的疑問,也許以後會解決。

資料結構的概念:

是一門研究非數值計算的程式設計問題中的操作物件,以及它們之間的關係和操作等相關問題的學科。

注:這句話應該意思是,資料結構不是研究數值和數值計算的,而是研究物件(物件不止是數值,也可能是類物件或者其他),研究這些物件之間的關係(比如有什麼共同點,比如順序如何),以及操作(比如排序,插入等)。

資料結構的基礎:資料

資料的概念:

概括的來說資料,就是一切有意義的符號(我覺得可以說是數值)。例如,整型是數值是他自己(但儲存形式是通過二進位制內容),影象(最簡單的是ntfs檔案系統中的bitmap表,用一位(0或1,8位是1位元組)來表示某乙個簇是否被使用(1表示已使用,0相反)),聲音(這個不太清楚)等。

由於一切資料都是以二進位制數值的形式儲存在硬碟或者記憶體的,因為可以認為這些二進位制數值就是資料,但我個人認為,如果二進位制數值沒有意義的話,那麼也不能稱為資料(因為他不表示任何內容)。

並且,計算機的資料,要能被輸入到計算機中(不止是pc),也要能被處理(沒意義是不能被處理的,損壞的也不行)。

資料元素:

是組成資料、有一定意義的基本單位,在計算機中通常作為整體處理,也被稱為記錄。

例如,乙個二進位制位,如果我們要強行理解的話,只能以bool型別來理解,但若我們需要的是int型別的資料(4位元組),那麼顯然是最小單位需要是4位元組(32位)了,因為只有這樣,這個int型別的數值也有意義。

因此,所謂的資料元素,就是指資料的乙個單元,具體這個單元有多大,要根據實際需求而定。

資料項:

假如要分析結構陣列,那麼資料元素是結構,而結構是由若干個型別的變數組成,而這些變數,就是資料項。

資料項是資料不可分割的最小單位。(這樣將其定義,再小的話不一定有意義)

資料物件:

是性質相同的資料元素的集合,是資料的子集,一般簡稱為資料。

例如資料有int型別,有結構,有類,毫無疑問,他們都是資料。

但假如我們只分析結構,那麼其他資料對我們來說就沒意義,也沒必要去處理。

而對我們有意義的結構,則是我們的研究物件——資料物件,對我們來說,他們就是資料(全部資料的一部分,,是我們研究內容的全部)。

資料結構:

資料結構,是相互之間存在一種或者多種特定關係的資料元素的集合。

也就是說,某些資料之間,是存在一定聯絡的。例如陣列,陣列元素之間的聯絡就是同屬於乙個陣列。

也許還有其他的關係,書上後面可能會講(我大概看了眼後面的)。反正肯定有關係。

邏輯結構:

指資料物件中,資料元素之間的關係。

(1)集合結構

資料物件中的所有資料元素,他們之間的關係是:同屬於乙個集合。

(2)線性結構

資料元素之間的關係,是一對一的關係。

例如鍊錶,前乙個節點有指標指向後乙個節點。

(3)樹形結構

資料元素之間的關係,存在一對多的層次關係。

注意,是分層的,從上往下是一對多。

如圖,a的第一層,bcd是第二層,其他是第三層。從上層往下層對應,上層的並不同時對應下層的某乙個節點,這樣才能理解為一對多。

(4)圖形結構

其中資料元素的關係是多對多。

如圖,1對應2和3,然後2和3又共同對應5,分別對應4、8、6。

個人覺得樹和圖形結構的最大區別,是樹是分層的,而圖並不分層。

但這個想法尚未驗證。

畫邏輯結構時:

①每個圓圈是乙個節點,可以用乙個空園表示空節點;(至少可以表示空樹)

②元素之間的邏輯關係,用節點之間的連線表示,如果這個關係是有方向的,用帶箭頭的連線(不能理解,什麼叫做元素之間的邏輯關係?什麼又叫做有方向的?)

邏輯結構的用處:

邏輯結構是針對具體問題的,是為了解決問題而定義的。

例如,乙個樹形結構的資料物件,也可以將其理解為集合(因為也可以屬於同乙個集合),至於同時存在圖和樹或者其他的關係,暫時不能理解。

也許是乙個結構同時具有樹形的指標,也具有線性的指標就可以做到同時具備兩種資料結構?

物理結構:

指資料的邏輯結構,在計算機中的儲存形式。

補充:指在記憶體。若是在硬碟或者之類的地方,稱為檔案結構。

例如,乙個1gb的檔案,你要在裡面找到student物件a和student物件b。

設定為你先找到了物件a(比如a在檔案中的位址是第乙個位元組)。

(1)假如b儲存在a之後的位置,那麼如果使用逐字節方式的話,你會立刻找到b。

(2)假如b儲存在a之後很遠的位置,如果逐字節去找,那麼會需要很久時間。

(3)假如有乙個指標,他和a在一起,你找到a後,可以同時獲得指標a的值,而假如指標a指向b,那麼就知道了物件b的位址。因此,便立刻找到了物件b(即使b實際位址和a的距離很遠)。

這種思想,在學c++的單向鍊錶的時候是使用過的。

對於(1)的情況,這種儲存形式叫做順序儲存

對於(3)的情況,這種儲存形式叫做鏈式儲存

鏈式儲存的優點:

當需要插入新元素時,可以方便的插入,只需要更改前乙個元素的指標即可(如果是雙向鍊錶,也需要更改後乙個元素的指標),刪除也同理。

鏈式儲存的缺點:

需要占用更多的記憶體(因為要有乙個或多個指標,用於指向下乙個物件);

假如中間有乙個節點損壞,那麼無法找到下乙個節點(沒有下乙個節點的位址)。

順序儲存的優點:

正好和鏈式儲存相反,節約記憶體。假如物件是char字元(1位元組),乙個指標也佔一位元組,因此鏈式儲存乙個節點需要的記憶體比順序儲存多了一倍。

不會丟失資料,即使中間有節點出問題,也可以通過讀取下乙個位址來知道下乙個元素的值。

順序儲存的缺點:

插入、刪除都很不方便,很容易導致效率低下。

抽象資料型別:

資料型別:書上的定義很拗口,反正像int、char、結構、自定義類這樣的就是資料型別。

抽象資料型別:就是指我們把某些資訊抽象為什麼樣型別,例如「人名+學號+成績+班級=學生」。這個「學生類」就是乙個抽象資料型別,他包含人名(可能是string類),學號(可能是int類),成績(可能是short類),班級(可能是char類)。

抽象包括了兩個特點:①乙個數學模型;②定義在模型的一組操作。

而在上面「學生類」的基礎上,單純只有資料是沒有意義的。

例如,我們需要知道學生的成績,因此,應該有乙個顯示學生成績的方法(類方法);

例如,我們可能需要更改其分數(或者建立該物件時新增乙個分數),因此,需要乙個初始化學生成績的方法;

又例如,我們可能需要對其成績進行排序,儲存在乙個學生類物件陣列之中,因此,要有乙個能比較成績的方法;

資料結構 資料結構探索(一) 樹的綜述

最近研究了mysql的索引結果,mysql的索引結果是使用了b tree的資料結構,了解了結構以後,對索引的功能和使用的一些規則就有了更加深入的了解,原來只是死記硬背規則和策略,現在感覺能知道背後到底是因為什麼。之後因為看到了set物件的元素存入方式,treeset使用的是紅黑樹儲存,來保證元素不會...

《資料結構(C語言版)》綜述

第一章 緒論 將於4月20日學習完畢,含課後題以及資料練習題 1.1什麼是資料結構 1.2基本概念和術語 1.3抽象資料結構型別的表示與實現 1.4演算法和演算法分析 1.4.1演算法 1.4.2演算法設計的要求 1.4.3演算法效率的度量 第二章 線性表 2.1線性表的型別定義 2.2線性表的順序...

java資料結構學習筆記(一)綜述

一 資料結構的概述。陣列優點 插入塊,如果知道下標可以非常快地訪問。缺點 查詢慢,刪除慢,大小固定。有序陣列優點 比無序陣列查詢快。缺點 刪除和插入慢,大小固定。棧 優點 提供後進先出的訪問。缺點 訪問其他項很慢。佇列優點 提供先進先出方式的訪問。缺點 訪問其他項很慢。鍊錶優點 插入塊,刪除快。缺點...