(1).数据结构概述
目錄
數(shù)據(jù)結(jié)構(gòu)概述
預(yù)備知識(shí):
模塊:
這篇筆記是根據(jù)郝斌老師的上課講義整理而得:
數(shù)據(jù)結(jié)構(gòu)概述
定義:如何把現(xiàn)實(shí)中大量復(fù)雜的問題以特定的數(shù)據(jù)類型和特定的存儲(chǔ)結(jié)構(gòu)保存到主存儲(chǔ)器中(內(nèi)存)中, 以及在此基礎(chǔ)上為實(shí)現(xiàn)某一個(gè)功能而執(zhí)行的相應(yīng)操作,這個(gè)相應(yīng)的操作也叫算法。
特定的數(shù)據(jù)類型和結(jié)構(gòu)是指:如果我們保存少量的數(shù)據(jù),我們可以使用數(shù)組(連續(xù));如果保存大量的數(shù)據(jù),我們就必須使用鏈表(不連續(xù),通過指針相連);如果我們還要保存數(shù)據(jù)item之間的關(guān)系,如一個(gè)部門的上下級(jí)關(guān)系,我們就必須使用樹來保存;如果我們要保存一個(gè)城市的地圖(任何節(jié)點(diǎn)之間都可能產(chǎn)生關(guān)系),那我們必須使用圖來保存。
數(shù)據(jù)結(jié)構(gòu) = 個(gè)體的存儲(chǔ)+個(gè)體的關(guān)系存儲(chǔ)
?算法 = 對(duì)存儲(chǔ)數(shù)據(jù)的操作
算法:
?? ?解題的方法和步驟
?? ?衡量算法的標(biāo)準(zhǔn)
?? ??? ?1. 時(shí)間復(fù)雜度:大概程序要執(zhí)行的次數(shù),而非執(zhí)行的時(shí)間
?? ??? ?2. 空間復(fù)雜度:算法執(zhí)行過程中大概所占用的最大內(nèi)存
?? ??? ?3. 難易程度
?? ??? ?4. 健壯性
數(shù)據(jù)結(jié)構(gòu)的地位:
?? ?數(shù)據(jù)結(jié)構(gòu)是軟件中最核心的課程
?? ?程序 = 數(shù)據(jù)的存儲(chǔ) + 數(shù)據(jù)的操作 + 可以被計(jì)算機(jī)執(zhí)行的語言
?
預(yù)備知識(shí):
1)指針:
指針是C語言的靈魂 ;
表示一些復(fù)雜的數(shù)據(jù)結(jié)構(gòu) ;快速的傳送數(shù)據(jù);使函數(shù)返回一個(gè)以上的值;能直接訪問硬件 ;能夠方便的使用數(shù)組和字符串;是理解面向?qū)ο笳Z言中引用的基礎(chǔ)
定義:地址,內(nèi)存單元的編號(hào)。指針變量占4個(gè)字節(jié)。指針就是地址 地址就是指針;指針變量是存放內(nèi)存單元地址的變量;指針的本質(zhì)是一個(gè)操作受限的非負(fù)整數(shù)
分類:
?? ??? ?1. 基本類型的指針
?? ??? ??? ?int *i;
?? ??? ?2. 指針和數(shù)組的關(guān)系
指針 和 一維數(shù)組
數(shù)組名
一維數(shù)組名是個(gè)指針常量,它存放的是一維數(shù)組第一個(gè)元素的地址,?它的值不能被改變一維數(shù)組名指向的是數(shù)組的第一個(gè)元素
?? ??? ?
int a[5] = {1,2,3,4,5}; printf("%p\n", *a+1);//平移四個(gè)字節(jié)地址double arr[3]; double *q; q = &arr[0]; q = &arr[1];?? ?//平移8個(gè)字節(jié)地址,但指針變量只占4個(gè)字節(jié) void Show_Array(int * p, int len) {int i = 0;for (i=0; i<len; ++i)printf("%d\n", p[i]);//p[2] = -1; //p[0] == *p p[2] == *(p+2) == *(a+2) == a[2]//p[i]就是主函數(shù)的a[i] }int main(void) {int a[5] = {1,2,3,4,5};Show_Array(a, 5); //a等價(jià)于&a[0], &a[0]本身就是int *類型//printf("%d\n", a[2]);return 0; }? 指針的指針
結(jié)構(gòu)體:
?? ?為什么會(huì)出現(xiàn)結(jié)構(gòu)體
?? ??? ?為了表示一些復(fù)雜的數(shù)據(jù),普通的數(shù)據(jù)類型無法滿足要求
?? ??? ?
?? ?什么叫結(jié)構(gòu)體
?? ??? ?結(jié)構(gòu)體是用戶根據(jù)實(shí)際需要自己定義的復(fù)合數(shù)據(jù)類型
?? ??? ?
?? ?如何使用結(jié)構(gòu)體
?? ??
?? ??? ?
?? ?注意事項(xiàng)
?? ??? ?結(jié)構(gòu)體變量不能加減乘除,但可以相互賦值
?? ??? ?普通結(jié)構(gòu)體變量和結(jié)構(gòu)體指針變量作為函數(shù)參數(shù)的問題
傳輸?shù)臅r(shí)候最好傳輸指針:地址,而不要傳輸變量,因?yàn)樽兞靠赡苄枰獋鬏敽芏嘧止?jié),而指針始終傳輸?shù)氖撬膫€(gè)字節(jié)。
?? ?
動(dòng)態(tài)內(nèi)存的分配和釋放
?
模塊:
模塊一:線性結(jié)構(gòu)
連續(xù)存儲(chǔ)[數(shù)組]
離散存儲(chǔ)[鏈表]
線性結(jié)構(gòu)的兩種常見應(yīng)用之一 棧
線性結(jié)構(gòu)的兩種常見應(yīng)用之二 隊(duì)列
專題:遞歸
模塊二: 非線性結(jié)構(gòu)
模塊三: 查找和排序
折半查找
排序:
總結(jié)
以上是生活随笔為你收集整理的(1).数据结构概述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习笔记(十一):支持向量机
- 下一篇: 计算机视觉那些事儿(1):基本任务