大學本科那個數據結構怎麼學,期末不掛科指南,第1篇

數據結構那些事

如果你現在在上大學,恰好又是計算機相關專業

那麼你肯定知道有一個非常枯燥的必修課《數據結構導論》

當然,你現在沒上大學或者不是計算機專業,那你現在應該知道了,他們有個必修課叫《數據結構導論》

從今天開始夢想橡皮擦要寫一套非常有趣的課程了

這套課程目的很簡單


目的:如何通過數據結構期末考試,有趣!

適合人羣:

  1. 大學計算機相關專業,有這門課程,然鵝你沒學,或者因爲一些莫名奇妙的原因,你曠課了
  2. 你想通過自考,注意自考,然後獲取計算機的一個本科學歷,這門課也是必修。

一門課程開始前,我們要先關注這門課的重點

大綱如下

按照國內比較權威的教材,一般情況下,自考採用的是《全國高等教育自學考試指導委員會》給推薦的書籍

本套課程參考的是自考書籍《數據結構導論 2012 主編:鄭誠》 外語教學研究出版社出版

知識點大綱如下

  1. 第一章 概論
  2. 第二章 線性表
  3. 第三章 棧、隊列和數組
  4. 第四章 樹和二叉樹
  5. 第五章 圖
  6. 第六章 查找
  7. 第七章 排序

不同教材,側重點不同,但是考點是覆蓋的。包括你們的期末考試

來吧,今天開始第一章,概論

概論

重點考點

咱直接些,直接來重要考點就行了,搞定這些就OK啦

基本概念

數據、數據元素、數據項

這個要記住,牢牢的記住

先說概念

所有被計算機存儲、處理的對象都是數據,你看計算機能處理圖像、處理音頻、處理文本,這些都是對象

數據的基本單位就是數據元素,一般叫做元素

然後元素是由數據項組成的,數據項還叫 字段或者域 ,並且數據項是數據的不可分割的最小標識單位

用圖來表示,就下圖即可理解
在這裏插入圖片描述
你看,好總結了

數據由若干數據元素組成,數據元素由若干數據項組成

數據的邏輯結構

數據的邏輯結構是指數據元素之間的邏輯關係。邏輯關係是指數據元素之間的關聯方式或“鄰接關係”

說人話:每條數據元素之間的邏輯關係叫數據的邏輯結構

你看自然界,人羣的組成,有一個個獨自站着的,有拍着隊站着的,有互相拉着手站着的…

這些反應到數據上,也是一樣的

在這裏插入圖片描述
四種邏輯結構分別爲

  • 集合
  • 線性結構
  • 樹形結構
  • 圖結構

數據的存儲結構

存儲結構包括兩部分:

  1. 存儲的數據元素
  2. 數據元素之間的關聯方式

表示數據元素之間的關聯方式主要有 順序存儲方式鏈式存儲方式

其實需要記住四種

  1. 順序存儲方式
  2. 鏈式存儲方式
  3. 索引存儲方式
  4. 散列存儲方式

算法分析

評價算法的好壞有四個方面的因素

  1. 正確性
  2. 易讀性
  3. 健壯性
  4. 時空性 – 包含時間效率(時間性能)和空間效率(空間性能)

重要知識點

時間複雜度

分析例子

編寫函數求 1!+2!+…+n!

通過C語言編寫代碼實現如下

int fact1(int n){
	int i,j,temp,s;
	s = 0;
	for (i=1;i<=n;i++){
		temp = 1;
		for(j=1;j<=i;j++){
			temp = temp * j;
		}
		s = s + temp;
	}
	return s;
}

推導時間複雜度

如何估算算法的計算量,可以在算法中合理的選擇一種或幾種操作作爲“基本操作”

例如,上述代碼,我們分別去 乘法、加法和賦值爲基本操作,然後推導計算量

例如,當n = 5 時候,上述代碼的計算量如下

乘法:也就是 temp = temp * j; 執行的次數
1 + 2 + 3 + 4 + 5 = 15次

加法:也就是s = s + temp; 執行的次數
1+1+1+1+1 = 5次

賦值語句:s = 0; temp = 1; temp = temp * j; s = s + temp;執行的總次數

  1. s=0 執行 1次
  2. temp=1 執行 1+1+1+1+1 = 5 次
  3. temp = temp * j; 執行 1+2+3+4+5 = 15次
  4. s = s + temp; 執行 1+1+1+1+1 = 5次
    合計
    1+5+15+5 = 26次

上述是當n等於5的時候的計算量,如果當n就是n的時候
那麼我們在計算一下計算量是多少

乘法:1+2+3+…+n = n(n+1)/2
加法:n
賦值語句:1+n+n(n+1)/2+n

在計算合計:也就是乘法+加法+賦值語句
n(n+1)/2 + n + 1+n+n(n+1)/2+n = 2(n2+n)/2+3n+1 = n2+4n+1

這時候,用T(n)表示這個計算量

T(n) = n2+4n+1

下面重點來了,當n無限大的時候,n2+4n+1 約等於 n2

可以用大O表示法 T(n) = O(n2)
看到了吧,這就是時間複雜度的表示方法,全稱叫做 算法的漸進時間複雜度

上面例子的第二種代碼編寫方式

int fact2(int n){
	int i,j,temp,s;
	s = 0;
	temp = 1;
	for(i=1;i<=n;i++){
		temp = temp * i;
		s = s + temp;
	}
	return s;
}

用和編碼1的方式推導之後
T(n) = 2n+2 ≈ O(n)

當n無限大時,算法的執行時間與n成正比

所以當你明白時間複雜度是怎麼計算出來之後,需要記住一些常見的時間複雜度階數

  • 常數階O(1)
  • 對數階O(log2n)
  • 線性階O(n)
  • 多項式階O(nc) 常見O(22) O(23)
  • 指數階O(Cn) 常見的 O(2n)

最後的知識點是空間複雜度,這個一般在考試中不常見

一般需要考慮三部分

  1. 程序代碼所佔用的空間
  2. 輸入數據所佔用的空間
  3. 輔助變量所佔用的空間

在估算算法空間複雜度,一般只需要分析輔助變量所佔用的空間即可

寫在後面

對於考試來說,一些基本概念要掌握,算法時間複雜度的大小排序要掌握(後續博客中還會涉及),根據一個算法,分析時間算法的複雜度要會

想要 參加自考,想要通過《數據結構導論》,可以@夢想橡皮擦啦

PullWater非本科程序員

歡迎關注「非本科程序員」

掃碼關注非本科程序員

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章