資料結構學習筆記(持續更新中)

2021-10-24 18:32:18 字數 2434 閱讀 4596

一般來說,計算機解決乙個具體問題時,大致需要經歷以下幾個步驟:

然而,在建立數學模型這一過程中,有很多非數值的問題無法用數學模型加以描述。

資料結構是一門研究非數值運算的學科。

例如資料是人類,資料元素就是人,眼耳鼻嘴是資料項。

性質相同的意思是資料元素有相同數量和型別的資料項,比如姓名相同的人。

資料結構的形式定義:資料結構是乙個二元組

data_structure = (d,s)

其中:d是資料元素的有限集,s是d上關係的有限集

演算法是對特定問題求解步驟的一種描述,它是指令的有限序列,其中每一條指令示乙個或多個操作。

乙個演算法還具有以下5個重要特性:

有窮性 乙個演算法必須總是對任何合法的輸入值在執行有窮步之後結束,且每一步都在有窮的時間內完成。

確定性 每一條指令必須有確切的含義,不會產生二義性。

可行性 乙個演算法是能行的,即演算法中描述的操作都是可以通過已經實現的基本運算執行有限次來實現的。

輸入 乙個演算法有乙個或多個輸入,這個輸入取決於某個特定的物件的集合。

輸出 乙個演算法有乙個或多個輸出,這些輸出是同輸入有著某些特定關係的量。

正確性可讀性

健壯性 當輸入資料非法時,演算法也能適當做出反應或進行處理

效率與低儲存量需求

演算法執行時間須通過依據該演算法編制的程式在計算機上執行所消耗的時間來度量,度量乙個程式的執行時間有以下兩種方法:

事後統計的方法

事前分析估算的方法

考慮到事後統計的方法有種種缺陷,人們常常使用事前分析估算的方法。

一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式f(n),演算法的時間量度記作

t(n) = o(f(n))
它表示隨著問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱作時間複雜度

演算法所需儲存空間的量度,稱為空間複雜度,記作:

s(n) = o(f(n))
#include int maxsubseqsum1(int a, int n);

int main(void)

; int n = 5;

printf("%d", maxsubseqsum1(a, n));

return 0;

}int maxsubseqsum1(int a, int n)

} return maxsum;

}

時間複雜度:

t(n) = o(n^3)
int maxsubseqsum1(int a, int n)

} return maxsum;

}

時間複雜度:

t(n) = o(n^2)
int max3( int a, int b, int c )

int divideandconquer( int list, int left, int right )

/* 下面是"分"的過程 */

center = ( left + right ) / 2; /* 找到中分點 */

/* 遞迴求得兩邊子列的最大和 */

maxleftsum = divideandconquer( list, left, center );

maxrightsum = divideandconquer( list, center+1, right );

/* 下面求跨分界線的最大子列和 */

maxleftbordersum = 0; leftbordersum = 0;

for( i=center; i>=left; i-- ) /* 左邊掃瞄結束 */

maxrightbordersum = 0; rightbordersum = 0;

for( i=center+1; i<=right; i++ ) /* 右邊掃瞄結束 */

/* 下面返回"治"的結果 */

return max3( maxleftsum, maxrightsum, maxleftbordersum + maxrightbordersum );}

int maxsubseqsum3( int list, int n )

時間複雜度:

t(n) = o(nlogn)
int maxsubseqsum4(int a,int n) 

return maxsum;

}

時間複雜度:

t(n) = o(n)

資料結構學習筆記 持續更新

資料結構概述 定義 我們如何把現實中大量而複雜的問題以特定的資料型別和特定的儲存結構儲存到儲存到主儲存器 記憶體 中,以及在此基礎上為實現某個功能 比如查詢某個元素,刪除某個元素,對所有元素進行排序 而執行相應的操作,這個相應的操作也叫演算法 資料結構 個體 個體的關係 演算法 對儲存資料的操作 演...

資料結構學習 線性結構部分,持續更新

1.線性表 1.1 定義 n個資料元素的有限序列,最常用最簡單的資料結構 線性表中元素的個數定義為線性表的長度,n 0的時候為空表 線性表的資料元素不僅可以進行訪問,還可以進行插入和刪除等。1.2 線性表的順序表示指的是用一組位址連續的儲存單元依次儲存線性表的資料元素 1.3 線性表的鏈式表示指用一...

資料結構學習備忘錄(持續更新)

概念性問題 在鍊錶中引入頭結點可以使頭指標永遠不空。方便插入和刪除運算的實現。線性表採用鏈式儲存時,結點和結點內部的儲存空間必須是連續的。有價值的 高效刪除順序表中值為e的所有元素的 void del sqlist l,elemtype e l length l length k 修改表的長度 對於...