好家伙,屬于是半自學了
1.關于資料結構
這波又有新的理解了:
來看看程式對資料的處理:

在平時處理問題的時候我們都把注意力集中在演算法上了
常常忽略對數值的處理,
現在讓我們把精力集中到對資料的處理上,
然后去嘗試處理幾類問題;
(1).數值問題:

分析一波:

(2).非數值問題:

分析一波:



讓我們回歸一個最根本的問題
什么是程式?
程式 =資料結構+演算法
(這是另一種層面上的理解)
所以說資料結構是干什么的?
資料結構研究非數值資料之間的結構關系,
及如何表示,如何存盤,如何處理
那么演算法呢:當然就是處理資料的方法咯
2.資料結構的內容
2.1.資料
什么是資料?
資料(Data):凡能被計算機存盤、加工處理的物件,是計算機程式加工處理的物件和原料,是一切能夠輸入到計算機中能被處理的符號集合,
數值型、非數值型,含有某種資訊,資訊的載體,
(哦,資訊的載體)
資訊:加工處理后的資料,資料的內涵,資訊通過資料表示,
資料元素(Data Element):是組成資料的基本單位,在程式中作為一個整體加以考慮和處理,常具有完整確定的實際意義,
有時稱元素、結點、頂點、記錄,
資料項(Data Item):資料不可分割的最小標識單位,有獨立含義,但常不具完整確定的實際意義,或不被當作一整體看待
有時稱欄位、域,
2.2.資料型別
資料型別(Data Type)是具有相同性質的計算機資料的集合及在這個資料集合上的一組操作的總稱,
它顯式或隱式地規定了資料的取值范圍和操作特性,
原子型別:值不可分解,一般由程式語言直接提供,int、char…
結構型別:值可分解為若干成分(分量),一般用戶定義(借助語言有關資料組織功能,陣列、結構…
抽象資料型別(Abstract Data Type或ADT)是指一個數學模型以及定義在該模型上的一組操作的總稱,
“抽象”的含義是指其邏輯特征與具體的軟硬體實作(即計算機內部的表示和實作)無關 ,
資料結構的內容主要分為三塊:邏輯結構,儲存結構,運算集合
2.3.邏輯結構
資料元素對應客觀世界中的物體,其間必然存在各種各樣的關系
資料元素之間的關系稱為結構,其中,資料元素之間的關聯方式(或稱鄰接關系)稱作資料的邏輯關系,
資料元素之間邏輯關系的整體稱為邏輯結構(Logical Structure)
四類基本的結構
集合結構、線性結構、樹形結構、圖狀結構,
2.3.1集合:任兩點之間不考慮鄰接關系或沒有鄰接關系,或稱沒有關系的關系,資料組織形式松散,元素之間“平等”,除了“同屬于一個集合”的關系外,別無其它關系,
2.3.2.線性結構:有且僅有一個開始結點和一個終端結點,任何結點最多一個直接前趨和一個直接后繼,開始結點沒有前趨,終端結點沒有后繼,元素之間存在1:1的關系,
2.3.3.樹形結構:除一個特殊元素(根)外,每個元素只有一個直接前趨,但可有多個直接后繼,結點之間具有分支、層次特性,元素之間存在1:n的關系,
2.3.4.圖狀結構:任何兩點之間都可能鄰接,結點之間形成網狀結構,任一元素可有多個直接前趨和多個直接后繼,元素之間存在m:n的關系,
(他們大概長這個樣子)

邏輯結構注意事項:
(1)邏輯結構與資料本身的形式、內容無關,
(2)邏輯結構與資料元素的相對位置無關,
(3)邏輯結構與所含結點的個數無關,
一些表面上很不相同的資料可以有相同的邏輯結構,邏輯結構是資料組織的某種“本質性”的東西,
邏輯結構是資料組織的主要方面,
2.4.存盤結構(物理結構)
存盤結構、物理結構:資料的機內表示(存盤實作),
資料元素的機內表示+邏輯結構的機內表示
(1)順序存盤:所有結點相繼存放到一片連續的存盤區中,元素之間的邏輯關系通過物理位置關系間接表示,
(2)鏈接存盤:結點之間的物理位置不一定連續,它們之間的邏輯關系通過附加的指標來表示,
(3)索引存盤:在存盤結點資訊的同時,還建立附加的索引表,
(4)散列存盤:以結點的關鍵字值為自變數,通過某個函式計算出該結點的存盤位置(或位置區間端點),
順序存盤方式和鏈接存盤方式是最基本的,
四種存盤方法,既可單獨使用,也可組合使用,
有時同一種邏輯結構可采用不同的存盤結構,
邏輯結構和儲存結構之間的關系
資料的邏輯結構屬于用戶視圖,是面向問題的,反映了資料內部的構成方式;資料的存盤結構屬于具體實作的視圖,是面向計算機的,
一種資料的邏輯結構可以用多種存盤結構來存盤,而采用不同的存盤結構,其資料處理的效率往往是不同的,
2.5.運算
(這肯定是增,刪,查,改)
運算:在邏輯結構上施加的操作,即對邏輯結構的加工 ,如:查找、插入、洗掉等,
運算與邏輯結構緊密相連,每種邏輯結構都有一個運算的集合,運算的種類很多,隨不同的應用而不同,
加工型:改變原邏輯結構的“值”,如結點數、結點內容等,
參考型:不改變原邏輯結構,只從中提取某些資訊,
基本運算:其實作不能利用其它運算,而其它運算可以或需要利用該運算,如更新不是基本運算,可先用查找,找到該該點后再修改有關內容;
而查找是基本運算,它不能利用其它運算,
每種邏輯結構都有自己的基本運算集,邏輯結構不同,基本運算集一般也不同,
一般地,先將較復雜的運算分解為若干較簡單的運算,有利于降低程式設計的難度,同時也有利于提高程式設計的效率,
在簡單運算中,再分解出一些基本運算,當基本運算實作后,其它運算就可通過呼叫基本運算來實作,進而完成整個程式,
(舉個例子分析一下)


(大概就這么多了)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/508812.html
標籤:其他
上一篇:實體決議Java反射
下一篇:HTTP基礎認證
