一 資料結構 基礎

2021-10-03 19:14:22 字數 1506 閱讀 6294

1、資料結構本質上是討論資料的儲存方式,討論資料的儲存方式只有乙個目的,那就是方便以後對資料的利用,以及對儲存空間負責。

2、資料結構包括以下幾種

(1)線性表結構:順序表、鍊錶、棧、佇列

(2)樹結構:普通樹、二叉樹、線索二叉樹

(3)圖結構

4、線性表結構

(1)順序表:類似陣列,把資料按照順序儲存到一塊連續的儲存空間內。

(3)棧:棧就是著名的後進先出

(4)佇列:佇列和棧相反,遵循先進先出。

5、樹結構:適合儲存一對多的資料型別。比如乙個家族,父親有兒子,兒子有兒子,父親和兒子就可能是一對多的關係。具體每一種樹的特點,以後再補充。

6、圖儲存結構:適合多對多的資料型別,比如地圖。

7、演算法的時間複雜度和空間複雜度

(1)時間複雜度,顧名思義就是指該演算法程式執行花費的時間,時間越長演算法越差,所以時間複雜度越小,演算法效能越優。

時間複雜度的計算是按照程式中迴圈的次數來計算的,以下計算方法非常的清晰,引用自

時間複雜度的計算

計算乙個演算法的時間複雜度,不可能把所有的演算法都編寫出實際的程式出來讓計算機跑,這樣會做很多無用功,效率太低。實際採用的方法是估算演算法的時間複雜度。

在學習c語言的時候講過,程式由三種結構構成:順序結構、分支結構和迴圈結構。順序結構和分支結構中的每段**只執行一次;迴圈結構中的**的執行時間要看迴圈的次數。

由於是估算演算法的時間複雜度,相比而言,迴圈結構對演算法的執行時間影響更大。所以,演算法的時間複雜度,主要看演算法中使用到的迴圈結構中**迴圈的次數(稱為「頻度」)。次數越少,演算法的時間複雜度越低。

例如:a) ++x; s=0;

b) for (int i=1; i<=n; i++)

c) for (int i=1; i<=n; i++) }

上邊這個例子中,a **的執行了 1 次,b **的執行了 n 次,c **執行了 n*n 次。

時間複雜度的表示

演算法的時間複雜度的表示方式為:

o(頻度)

這種表示方式稱為大「o」記法。

注意,是大寫的字母o,不是數字0。

對於上邊的例子而言,a 的時間複雜度為o(1),b 的時間複雜度為o(n),c 的時間複雜度為為o(n2)。

如果a、b、c組成一段程式,那麼演算法的時間複雜度為o(n2+n+1)。但這麼表示是不對的,還需要對n2+n+1進行簡化。

簡化的過程總結為3步:

去掉執行時間中的所有加法常數。(例如 n2+n+1,直接變為 n2+n)

只保留最高項。(n2+n 變成 n2)

如果最高項存在但是係數不是1,去掉係數。(n2 係數為 1)

所以,最終a、b和c合併而成的**的時間複雜度為o(n2)。

列舉了幾種常見的演算法時間複雜度的比較(又小到大):

o(1)常數階 < o(logn)對數階 < o(n)線性階 < o(n2)平方階 < o(n3)(立方階) < o(2n) (指數階)

(2)空間複雜度,顧名思義就是指演算法程式執行占用的空間大小

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

程式 資料結構 演算法 越工作越發現業務 是很容易的,框架也是舊瓶裝新水,大體差不多。那麼好的 的區分在於演算法,效能這些的差距。而資料結構是演算法實現的基礎,演算法總是要依賴某種資料結構來實現的。好久沒有仔細看資料結構了,最近被頻繁的演算法,奈何我資料結構基礎不好。決定好好複習一遍,並輸出乙份文件...

一 資料結構

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

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

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