資料結構 比較鍊錶和陣列

2021-09-02 08:14:58 字數 2132 閱讀 6152

計算機的資源是有限的 , 而人對計算機的需求是無限的 。 好的資料機構和演算法便是為了更好的滿足計算機使用者的需求 , 而這也是計算機作業系統意義所在。 在學習資料結構的同時 , 了解一定的計算機作業系統知識有助於更好的理解其意義所在。 而了解資料結構和演算法 會更容易明白作業系統的工作原理。

廣義上講 , 資料結構是資料的儲存結構 , 而演算法就是運算元據的方法 。

資料結構和演算法的目的在於 提高計算機的資源利用率 , 實現 「 快 」 和 「 省 」。 讓同一功能的**用更快的速度執行 , 這在處理大量資料的程式中尤為重要 , 那不同的需求的資料該以怎樣的結構儲存在計算機中能夠更加節省資源呢 ?這便是資料結構和演算法的意義所在 , 這在大資料時代尤為重要。

int flag =

0, temp=

0;

o ( long n )

示例 : 時間複雜度為 long ₂n

void

longn

(int n)

}

o ( m + n ) 、 o ( m * n ) 多個不同規模資料 , 實際複雜度由資料規模來決定

示例 :

void

mandn

(int m, int n)

// 時間複雜度為 o(m+n)

}}

最好時間複雜度 。 即 在最理想的情況下執行**的時間複雜度 。

最差時間複雜度 。 即 在最壞情況下執行**的時間複雜度 。

平均時間複雜度 。 即 把所有可能的情況乘上相應的概率除以一共有多少種可能 ( 數學上叫做 加權平均數 )。

均攤時間複雜度 。 一般出現在比較極端的情況下 。 在處理資料時大多數是較低時間複雜度 , 只有個別情況下時間複雜度較高 。 這時我們把個別較高複雜度分攤給較低時間複雜度 , 再進行計算平均時間複雜度 , 使得複雜度的分析更為合理化。

綜合分析 氣泡排序

#include 

#include

void

bubble_sort

(int num[

], int length)

// 定義乙個氣泡排序的函式}if

(flag ==0)

break

;// 若陣列本就是有序的則直接結束迴圈}}

int main()

; int length =

sizeof

(num)

/sizeof

(num[0]

);bubble_sort

(num , length)

;/*

這樣是得不到準確的陣列的長度的, 建議的操作是在定義陣列的函式中計算陣列的長度, 在以實參的形式傳遞出去, 這樣其他的函式變可以獲得陣列的長度

*/for

(int i =

0; i < length; i++

)return0;

}

分析 : 最好 時間複雜度 o( n ) 即陣列本就是有序排列 只需要迴圈一次 , 最差時間複雜度 o( n2 ) , 平均情況時間複雜度 o( n2 ) ,均攤時間複雜度 o(n2)

你可能需要先了解 :

c 語言 初探鍊錶

程式設計中的小坑

陣列, 支援下標隨機訪問 , 所以時間複雜度是 o( 1 ) , 但當進行 增刪 操作時陣列的時間複雜度為 o ( n ), 執行效率較低

鍊錶, 每次訪問都要從頭開始查詢 , 因此時間複雜度為 o( n ) , 但進行 增刪 操作時 只要改變 插入 or 刪除 結點的指標指向即可 , 所以鍊錶 增刪 操作的時間複雜度為 o( 1 )。

通過時間複雜度分析可以明顯的看出兩者的優勢以及劣勢 。 在 對資料的訪問較為頻繁 ,而 增刪 操作較少時採用陣列儲存資料是更為高效的 , 反之 , 當需要對資料進行頻繁的 增刪 操作而較少直接訪問資料進行改查時 , 使用鍊錶會更為高效。

資料結構 陣列與鍊錶

陣列的特點 1.在記憶體中,陣列是一塊連續的區域 2.陣列需要預留空間,在使用前需要提前申請所佔記憶體的大小,不知道需要多大的空間,可能會浪費記憶體空間,即陣列空間利用率低 3.在陣列起始位置處,插入資料和刪除資料效率低。插入資料時,待插入位置的的元素和它後面的所有元素都需要向後搬移 刪除資料時,待...

(資料結構) 順序表和煉表的比較

1.儲存方式的比較 順序表的儲存空間是一次性分配好的了,而鍊錶的儲存空間是多次分配的。2.儲存密度 節點值域所佔儲存量 節點結構所佔的儲存總量 順序表的密度是等於1的,而鍊錶的密度是小於1的 1.訪問方式 順序表可以隨機抽取,也可以順序抽取 但是鍊錶只可以順序抽取 讀取第n個元素,那麼就必須遍歷其之...

資料結構 可變陣列 鍊錶

變長陣列 variable length array 簡稱 vla c語言中,直到c99標準出現之前,宣告陣列時在方括號內只能使用整數常量表示式。而c99做了很大改進,允許陣列的 中的值是整形變數或是整形表示式。這就解釋了下面的情況 int n scanf d n int array n 雖然n確實...