若是說,熟練掌握編程語言是外功,那麼
數據結構
可謂是內功心法了算法
如下是我學習數據結構的總結和一些筆記編程
數據結構(Data Structure)
抽象數據類型(ADT)的物理實現數據結構
「數據結構」是計算機中存儲,組織數據的方式。編程語言
「數據結構是數據對象」以及存在於該對象的實例和組成實例的數據元素之間的各類聯繫函數
解決問題方法的效率跟數據的組織方式
、空間的利用效率
和算法的巧妙程度
有關學習
例子1:spa
void PrintN( int N ) { int i; for( i=1 ; i<N ; i++) printf("%d\n",i); return; }
void PrintN( int N ) { if( N ) { PrintN(N-1); printf("%d\n",N); } return; }
這個程序前一個用了循環實現打印1-N,後面一個採用遞歸的方法實現的,很明顯遞歸的效率很低,是由於,遞歸實現原理是以堆棧的方式,也就是說函數把 PrintN(N) 到PrintN(1)這N個函數壓入棧中,在依次打印出來,內存消耗巨大。
圖示:3d
例子2:code
計算 對象
double f(int n , double a[], double x) { int i; double p = a[0]; for( i=1 ; i<=n ; i++) p+= ( a[i] * pow( x , i )); return p; }
double f(int n , double a[], double x) { int i; double p = a[0]; for( i=n ; i>0 ; i--) p= a[i-1] +x*p; return p; }
在計算機中,有屢次乘法與加法的運算時,通常按照權重,只需比較乘法次數就能夠了,第一個算法每一次循環執行了i+1次乘法,一共執行了(N^2+3*N)/2次,第二種算法執行了N次乘法,顯然第二種效率高,這就是算法的妙用
其實數據結構是由一些基本數據類型組合成了一個複雜的數據類型,用於解決某一類問題(基本問題有數據的增長,刪除,條件查詢,遍歷等)
總結:到底什麼是數據結構?
數據對象在計算機中的組織方式
邏輯結構
物理存儲結構
數據對象一定與一系列加在其上的操做相關聯
完成這些操做所用的方法就是算法
抽象數據類型(Abstract Data Type)
數據類型
數據對象集
數據集合相關聯的操做集
抽象:描述數據類型的方法不依賴於具體實現
與存放的機器無關
與數據存儲的物理結構無關
與實現操做的算法和編程語言無關
算法
一個有限指令集
接受一些輸入(有些時候不須要輸入)
產生輸出
必定在有限步驟以後終止
每一條指令必須
根據算法寫成的程序在執行時佔用存儲單源的長度
根據算法寫成的程序在執行時好費時間的長度
牛刀小試
用算法實現 求一個數列的最大子列和
給出下列四個算法:
算法三能夠嘗試寫一下。以上資料來源於 MOOC 《數據結構》