資料結構(一 資料結構基礎

2021-09-05 12:06:52 字數 2880 閱讀 3753

程式=資料結構+演算法

越工作越發現業務**是很容易的,框架也是舊瓶裝新水,大體差不多。

那麼好的**的區分在於演算法,效能這些的差距。而資料結構是演算法實現的基礎,演算法總是要依賴某種資料結構來實現的。

好久沒有仔細看資料結構了,最近被頻繁的演算法,奈何我資料結構基礎不好。決定好好複習一遍,並輸出乙份文件。

1.什麼是資料結構?

資料結構是計算機中對資料的一種儲存和組織方式,同時也泛指相互之間存在一種或多種關係的資料的集合。

通俗說就是資料和資料之間的關係。

2.資料結構中的基本概念

3.資料的儲存結構

資料的儲存結構主要是順序儲存和鏈式儲存兩種。

順序儲存結構是把資料元素存放在位址連續的儲存單元裡,其資料間的邏輯關係和物理關係是一致的。

順序儲存結構適用於頻繁查詢時使用。

陣列是順序儲存結構的典型代表。

鏈式儲存結構中,相鄰資料元素可隨意存放,但所佔儲存空間分兩部分,一部分存放結點值,另一部分存放表示結點間關係的指標。

鏈式儲存結構適用於在較頻繁地插入、刪除、更新元素時使用。

鍊錶是鏈式儲存結構的典型代表。

索引儲存方式i可以細分為兩類:

雜湊儲存方式是根據結點的關鍵字直接計算出該結點的儲存位址的一種儲存方式。

4.資料的邏輯結構

資料和資料本身之間的關係。

集合結構中的資料元素同屬於乙個集合,他們之間是並列的關係,除此之外沒有其他的關係。

線性結構中的元素存在一對一的相互關係。

如一維陣列,佇列,棧。

樹形結構中的元素存在一對多的相互關係。

圖形結構中的元素是一種多對多的關係。

5.常用的資料結構

常用的資料結構有以下八種:

(1)陣列(array):陣列是一種聚合資料型別,是將具有相同型別的若干變數有序地組織在一起的集合。陣列可以說是最基本的資料結構。按照陣列的型別,可以分為整形陣列、字元型陣列、浮點型陣列、物件陣列等。陣列還可以有一維、二維及多維等表現形式。

(2)鍊錶(linked list):鍊錶是一種資料元素按照鏈式儲存結構進行儲存的資料結構,這種儲存結構在物理上具有非連續的特點。鍊錶由一系列資料結點構成,每個資料結點包括資料域和引用域兩部分。其中,引用域儲存了資料結構中下乙個元素存放的位址。

(3)棧(stack):棧是一種特殊的線性表,其只能在乙個表的乙個固定端進行資料結點的插入和刪除操作。棧按照後進先出的原則來儲存資料。棧中沒有資料時,稱為空棧。

(4)佇列(queue):佇列和棧類似,也是一種特殊的線性表。和棧不同的是,佇列只允許在表的一端進行插入,而在另一端進行刪除操作。進行插入操作的一端稱為隊尾,進行刪除操作的一端稱為隊頭。佇列中沒有元素時,稱為空佇列。

(5)樹(tree):樹是典型的非線性結構,其是包含n個結點的有窮集合k。在樹結構中,有且僅有乙個根結點,該結點沒有前驅結點。在樹結構中的其他結點都有且僅有乙個前驅結點,而且可以有m個後繼結點,m>=0.

(6)圖(graph):圖是另外一種非線性資料結構。在圖結構中,資料結點一般稱為頂點,而邊是頂點的有序偶對。如果兩個頂點之間存在一條邊,那麼就表示這兩個頂點具有相鄰關係。

(7)堆(heap):堆是一種特殊的樹型資料結構,一般討論的堆都是二叉堆。堆的特點是其根結點的值是多有結點中最小的或者最大的,並且根結點的兩個子樹也是乙個堆結構。

(8)雜湊表(hash):雜湊表源自於雜湊函式(hash function),其思想是如果在結構中存在關鍵字和t相等的記錄,那麼必定在f(t)的儲存位置可以找到該記錄,這樣就不用進行比較而直接去的所查記錄。

1.定義

演算法是指解題方****而完整的描述,是一系列解決問題的清晰指令,演算法代表這用系統的方法描述解決問題的策略機制。

2.演算法的特性

3.演算法的基本要求

來看一道最簡單的演算法:

package cn.kimtian.array.one;

/** * 求從1加到指定數字的和

* @author kimtian

**/public class addonetonums

long b = system.currenttimemillis();

system.out.println("第一種方式結果:"+total+",耗時:"+(b-a));

/*** 第二種方式:迴圈從1加到100

**/long total2 = 0;

long c = system.currenttimemillis();

total2 = (end + 1) / 2 * end;

long d = system.currenttimemillis();

system.out.println("第二種方式結果:"+total2+",耗時:"+(d-c));}}

執行結果可以發現,第二種方式執行時間更短。 

這就是兩種解決方式時間複雜度的不同。

不過時間複雜度和空間複雜度是相輔相成的,不能過於偏重乙個而忽略另乙個。有的演算法執行時間很短,卻是以消耗大量記憶體作為前提。所以說沒有最好的演算法,只有最合適的演算法。

附:

常見的時間複雜度

隨著規模n的不斷增大,上述時間複雜度不斷增大,演算法的執行效率越低。

一 資料結構 基礎

1 資料結構本質上是討論資料的儲存方式,討論資料的儲存方式只有乙個目的,那就是方便以後對資料的利用,以及對儲存空間負責。2 資料結構包括以下幾種 1 線性表結構 順序表 鍊錶 棧 佇列 2 樹結構 普通樹 二叉樹 線索二叉樹 3 圖結構 4 線性表結構 1 順序表 類似陣列,把資料按照順序儲存到一塊...

一 資料結構

char cs new char char cs1 new char 4 cs1 0 a 注意 注意陣列下標越界 char cs new char system.out.println cs 4 特點 1.記憶體位址連續,使用之前必須指定陣列長度 2.可以通過下標訪問的方式訪問成員,查詢效率高 3....

資料結構學習筆記一 資料結構基礎

做個決定,從今天開始,每天一題,把自己每天學的東西寫出來,也算是個學習筆記。駑馬十駕,功在不捨 何謂資料結構?資料結構反映資料的內部構成,即乙個資料由哪些成分資料組成,以什麼樣的形式組成,呈現什麼樣的結構。資料結構包括邏輯上的資料結構和物理上的資料結構。邏輯上的資料結構指的是成分資料之間的邏輯關係,...