?
?
一、課程背景
1.1 C重要嗎?
很多人對(duì)學(xué)習(xí)C語(yǔ)言感到無(wú)從下手,經(jīng)常問(wèn)我同一個(gè)問(wèn)題:究竟怎樣學(xué)習(xí)C語(yǔ)言?我是一個(gè)教師,已經(jīng)開(kāi)發(fā)了很多年的程序,和很多剛剛起步的人一樣,學(xué)習(xí)的第一個(gè)計(jì)算機(jī)語(yǔ)言就是C語(yǔ)言。經(jīng)過(guò)這些年的開(kāi)發(fā),我深深的體會(huì)到C語(yǔ)言對(duì)于一個(gè)程序設(shè)計(jì)人員多么的重要,如果不懂C語(yǔ)言,你想寫(xiě)底層程序這幾乎聽(tīng)起來(lái)很可笑,不懂C語(yǔ)言,你想寫(xiě)出優(yōu)秀高效的程序,這簡(jiǎn)直就是天方夜譚。為什么C語(yǔ)言如此重要呢??
第一:C語(yǔ)言語(yǔ)法結(jié)構(gòu)很簡(jiǎn)潔精妙,寫(xiě)出的程序也很高效,很便于描述算法,大多數(shù)的程序員愿意使用C語(yǔ)言去描述算法本身,所以,如果你想在程序設(shè)計(jì)方面有所建樹(shù),就必須去學(xué)它。?
第二:C語(yǔ)言能夠讓你深入系統(tǒng)底層,你知道的操作系統(tǒng),哪一個(gè)不是C語(yǔ)言寫(xiě)的?所有的windows,Unix,Linux,Mac,os/2,沒(méi)有一個(gè)里外的,如果你不懂C語(yǔ)言,怎么可能深入到這些操作系統(tǒng)當(dāng)中去呢?更不要說(shuō)你去寫(xiě)它們的內(nèi)核程序了。?
第三:很多新型的語(yǔ)言都是衍生自C語(yǔ)言,C++,Java,C#,J#,perl...哪個(gè)不是呢?掌握了C語(yǔ)言,可以說(shuō)你就掌握了很多門語(yǔ)言,經(jīng)過(guò)簡(jiǎn)單的學(xué)習(xí),你就可以用這些新型的語(yǔ)言去開(kāi)發(fā)了,這個(gè)再一次驗(yàn)證了C語(yǔ)言是程序設(shè)計(jì)的重要基礎(chǔ)。還有啊,多說(shuō)一點(diǎn):即使現(xiàn)在招聘程序員,考試都是考C語(yǔ)言,你想加入it行業(yè),那么就一定要掌握好C語(yǔ)言
?
1.2、為什么要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)?
在可視化化程序設(shè)計(jì)的今天,借助于集成開(kāi)發(fā)環(huán)境可以很快地生成程序,程序設(shè)計(jì)不再是計(jì)算機(jī)專業(yè)人員的專利。很多人認(rèn)為,只要掌握幾種開(kāi)發(fā)工具就可以成為編程高手,其實(shí),這是一種誤解。要想成為一個(gè)專業(yè)的開(kāi)發(fā)人員,至少需要以下三個(gè)條件:
一、能夠熟練地選擇和設(shè)計(jì)各種數(shù)據(jù)結(jié)構(gòu)和算法。
二、至少要能夠熟練地掌握一門程序設(shè)計(jì)語(yǔ)言。
三、熟知所涉及的相關(guān)應(yīng)用領(lǐng)域的知識(shí)。
其中,后兩個(gè)條件比較容易實(shí)現(xiàn),而第一個(gè)條件則需要花相當(dāng)?shù)臅r(shí)間和精力才能夠達(dá)到,它是區(qū)分一個(gè)程序設(shè)計(jì)人員水平高低的一個(gè)重要標(biāo)志,數(shù)據(jù)結(jié)構(gòu)貫穿程序設(shè)計(jì)的始終,缺乏數(shù)據(jù)結(jié)構(gòu)和算法的深厚功底,很難設(shè)計(jì)出高水平的具有專業(yè)水準(zhǔn)的應(yīng)用程序。曾經(jīng)有一本經(jīng)典計(jì)算機(jī)專業(yè)書(shū)籍叫做《數(shù)據(jù)結(jié)構(gòu)+算法=程序》,也說(shuō)明了數(shù)據(jù)結(jié)構(gòu)和算法的重要性。
?
1.3、為何要選擇學(xué)習(xí)這個(gè)課程?

數(shù)據(jù)結(jié)構(gòu)用C去表述是最經(jīng)典的,也是更能讓你得到良好的基礎(chǔ)編程思想算法訓(xùn)練的,也是最容易上手的。 ?本課程系可謂是 《 數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)--嚴(yán)蔚敏 》 的視頻版本。
講師梧桐擁有豐富的授課經(jīng)驗(yàn)和開(kāi)發(fā)經(jīng)驗(yàn),對(duì)數(shù)據(jù)結(jié)構(gòu)有深入的研究,并曾發(fā)表論文。講師的授課特點(diǎn)是用最通俗易懂的話來(lái)說(shuō)清晦澀難懂的知識(shí)點(diǎn)。
?
1.4. 、適合學(xué)員
本課程適合
1. 有一定C語(yǔ)言基礎(chǔ)想學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)算法的學(xué)員,有機(jī)會(huì)進(jìn)入名企從事IT領(lǐng)域的在校大學(xué)生
2. 想提高自己的軟件編程能力,想去沖擊更高職位,更高收入的有理想的程序猿
?

?
二、課程大綱
第1章 緒論
一、教學(xué)內(nèi)容
1.1 數(shù)據(jù)結(jié)構(gòu)的相關(guān)基本概念
1.2 數(shù)據(jù)之間的邏輯結(jié)構(gòu)
1.3 數(shù)據(jù)之間的存儲(chǔ)結(jié)構(gòu)
1.4 ?算法
?
二、教學(xué)要求
1、了解數(shù)據(jù)結(jié)構(gòu)的基本概念
2、掌握算法的時(shí)間復(fù)雜度
?
第2章 線性表
一、教學(xué)內(nèi)容
2.1 了解線性表的特點(diǎn)
2.2 順序表及其相關(guān)操作
2.3 鏈表及其相關(guān)操作
?
二、教學(xué)要求
1、了解線性表的特點(diǎn)
2、掌握鏈表及其相關(guān)操作
?
第3章 棧和隊(duì)列
一、教學(xué)內(nèi)容
3.1 兩種重要的特殊的線性結(jié)構(gòu):棧和隊(duì)列
3.2 棧的特點(diǎn)
3.3 隊(duì)列的特點(diǎn)
3.4 ?算法
?
二、教學(xué)要求
1、了解棧的特點(diǎn)
2、了解隊(duì)列的特點(diǎn)
?
第6章 樹(shù)和二叉樹(shù)
一、教學(xué)內(nèi)容
6.1 二叉樹(shù)的定義
6.2 二叉樹(shù)的性質(zhì)
6.3 二叉樹(shù)的存儲(chǔ)結(jié)構(gòu)
6.4 二叉樹(shù)的遍歷
6.5 樹(shù)的存儲(chǔ)結(jié)構(gòu)
6.6 森林與二叉樹(shù)的轉(zhuǎn)換
6.7 樹(shù)的遍歷
6.8 森林的遍歷
6.9 哈夫曼樹(shù)及其應(yīng)用
?
二、教學(xué)要求
1、掌握二叉樹(shù)的性質(zhì)
2、熟悉二叉樹(shù)的遍歷
3、掌握哈夫曼樹(shù)的構(gòu)造
?
第7章 圖
一、教學(xué)內(nèi)容
7.1 圖的定義及相關(guān)術(shù)語(yǔ)
7.2 圖的存儲(chǔ)結(jié)構(gòu)
7.3 圖的兩種遍歷方式
7.4 ?最小生成樹(shù)
7.5 ?關(guān)鍵路徑
?
二、教學(xué)要求
1、了解圖的存儲(chǔ)結(jié)構(gòu)和遍歷
2、掌握關(guān)鍵路徑的計(jì)算
?
第9章 查找
一、教學(xué)內(nèi)容
9.1 順序查找
9.2 折半查找
9.3 二叉排序樹(shù)
9.4 哈希表的構(gòu)造
9.5 處理沖突的方法
?
二、教學(xué)要求
1、掌握折半查找的思想和算法
2、了解哈希表的構(gòu)造和處理沖突的方法
?
第10章 內(nèi)部排序
一、教學(xué)內(nèi)容
10.1 直接插入排序
10.2 希爾排序
10.3 冒泡排序
10.4 快速排序
10.5 簡(jiǎn)單選擇排序
10.6 總結(jié)各種排序方法
?
二、教學(xué)要求
1、掌握直接插入排序的思想和算法
2、了解希爾排序的思想
3、掌握冒泡排序的思想和算法
4、了解快速排序的思想
5、了解簡(jiǎn)單選擇排序的思想
?

?
?



