標(biāo)題: 數(shù)據(jù)結(jié)構(gòu)復(fù)習(xí)v3.0_電信二班_煥楠 [打印本頁]
作者: bibi 時(shí)間: 2015-4-19 01:41
標(biāo)題: 數(shù)據(jù)結(jié)構(gòu)復(fù)習(xí)v3.0_電信二班_煥楠
電子信息工程13(2)班 吳煥楠
歡迎加QQ1435378192相互學(xué)習(xí)
歡迎加入學(xué)霸交流群293194287
全文用楠妹的口吻編寫,為了增加趣味性
新版特性:追加楠妹語言,以及部分代碼。
感謝電信1班澤銳提出的錯(cuò)誤(冒泡法那里)
注:僅列出電信專業(yè)考點(diǎn)
第一章考點(diǎn):算法的效率、復(fù)雜度
時(shí)間復(fù)雜度:算法的時(shí)間量度,用“O(***)”表示
空間復(fù)雜度:算法所需存儲(chǔ)空間的量度
主要考題,計(jì)算某某語句的執(zhí)行次數(shù)(主要是循環(huán)體)。
方法:
1、for(i=x;i<n;i++){a}
a語句執(zhí)行了n-x次,注意循環(huán)條件中沒有等于號
2、for(i=x;i<=n;i++){a}
a語句執(zhí)行了n-x+1次,注意循環(huán)條件中有等于號,有等號就+1咯
3、for(i=x;i<n;i++)
for(j=y;j<=m;j++){a}
a語句執(zhí)行了(n-x)(m-y+1)次,嵌套循環(huán)時(shí),要算兩者的乘積(前提是兩個(gè)循環(huán)的循環(huán)變量無瓜葛)
例題:
1、在下面的程序段的時(shí)間復(fù)雜度為( )【北京工商大學(xué) 2001 一、10(3分)煥楠修改版】
for(i=1;i<n;i++)
for(j=1;j<=n;j++)
x=x+1;
A. O(2n) B.O(n) C.O(n2) D.O(log2n)
答案:C
解釋:先算
x=x+1;語句執(zhí)行的次數(shù)為

次,取最高次項(xiàng)。其實(shí)這題直接目測都可以啦,很簡單吧親!
2、計(jì)算機(jī)執(zhí)行下面的語句時(shí),語句s的執(zhí)行次數(shù)為 _______ 。【南京理工大學(xué)2000二、1(1.5分)】
for(i=l;i<n-l;i++)
for(j=n;j>=i;j--)
s;
答案:
解釋:顯然,兩個(gè)循環(huán)的循環(huán)變量是有瓜葛滴!根據(jù)楠妹第二定律,只能慢慢推導(dǎo)咯!
如果插入位置不合理,拋出異常
- 如果順序表已滿,動(dòng)態(tài)增加容量
- 從最后一個(gè)元素開始向前找到插入位置,并同時(shí)把它們后移
- 插入
- 表長+1
在順序表L的第i個(gè)位置之前插入元素e
(楠妹語言)
int ListInsert_Sq(SqList&L,int i,ElemType e)
{
if(插入位置不合理)
return 0;
if(空間不足)
{
申請空間;
if(空間申請失敗)
return 0;
else
{
讓順序表首地址指針指向新位置;
更新表的大小;
}
}
else
{
把從第i個(gè)到最后一個(gè)元素之間的所有元素逐個(gè)后移一個(gè)位置;
把元素e存儲(chǔ)在第i個(gè)位置;
表長增一;
return 1;
}
}
(代碼自己看書
)
順序表的刪除:
思路:
如果刪除位置不合理,拋出異常
- 取出刪除元素
3、從刪除元素位置開始向后到最后一個(gè)元素,并同時(shí)把它們前移
4、表長-1
(楠妹語言)
int ListDelete_Sq(SqList&L,int i,ElemType &e)
{
if(刪除位置不合理)
return 0;
把第i個(gè)位置到的數(shù)據(jù)放入e;
把從第i+1個(gè)打掃最后一個(gè)元素逐個(gè)前移一個(gè)位置;
表的長度減一;
return 1;
}
(代碼自己看書
)
單鏈表的插入:
思路:
順序棧的出棧操作:
Status Push(SqStack &S,SElemType &e) //注意這里為什么要用引用參數(shù),不懂問楠妹哈
{
if(棧空)
return ERROR;
e=*--S.top;
return OK;
}
注意:
判斷棧空的條件是:S.top==S.base
e=*--S.top; 的理解:
先讓棧頂指針指向棧頂元素,然后賦值給e
實(shí)質(zhì):先減減,后刪除,因?yàn)榉强諚5臈m斨羔樖冀K指向棧頂元素的下一個(gè)位置上
循環(huán)隊(duì)列的入隊(duì):
Status EnQueue(SqQueue &Q,QElemType e)
{
if((Q.rear+1)%MAXQSIZE==Q.front) //判斷隊(duì)列是否滿了
return ERROR;
Q.base[Q.rear]=e; //e入隊(duì)
Q.rear=(Q.rear+1)%MAXQSIZE; //防止越界
return OK;
}
循環(huán)隊(duì)列的出隊(duì):
Status DeQueue(SqQueue &Q,QElemType &e)
{
if(Q.rear==Q.front) //判斷隊(duì)列是否空
return ERROR;
e=Q.base[Q.front]; //e出隊(duì)
Q.front=(Q.front+1)%MAXQSIZE; //保證循環(huán)
return OK;
}
第四章考點(diǎn):串(堆分配內(nèi)存)的 連接、賦值
代碼都在
啦,自己背咯親

!
第六章考點(diǎn):二叉樹的遍歷、赫夫曼編碼
二叉樹的遍歷:(已經(jīng)定好了從左到右,以下僅對先序作說明,其它兩種自己推導(dǎo)啦親,嘻嘻!)
理解的關(guān)鍵是:遞歸的思想
先序(先訪問根)
把權(quán)值最小的兩葉子

相加作為一個(gè)新的結(jié)點(diǎn)

37

- 總之這樣做下去啦,煩死楠妹啦,不做了!哼!!!我生氣了,不理你了!掛就掛唄!反正你掛又不關(guān)我事,嘻嘻。有什么鳥不起的呀!
- 最后,赫夫曼樹都為你弄好了,編碼好簡單呀:就把左樹枝為0,右樹枝為1,寫出編碼
如A 的編碼為:0100
第九章考點(diǎn):哈希表、折半查找
哈希表例題:
設(shè)有一組關(guān)鍵字{14,,20,63,96,29,54},采用哈希函數(shù):H(key)=key mod 15 ,表長為16,用開放地址法的線性探測再散列方法解決沖突。要求:對該關(guān)鍵字序列構(gòu)造哈希表,給出每個(gè)元素的查找次數(shù),并計(jì)算查找成功的平均查找長度。(15分)(廣工—2012年6月28日考題)
答案:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
H(14) = 14 mod 15 = 14
H(20) = 5
H(63) = 3
H(96) = 6
H(29) = 14 H1= (14+1)mod 16 = 15
H(54) = 9
平均查找長度 ASL=(1*5 + 2*1)/6 =7/6
注意:
平均查找長度的計(jì)算,
,記住公式啦,
O(∩_∩)O~~本題的關(guān)鍵是 線性探測再散列方法的使用
說明:
i為沖突的次數(shù),每一次的
key都是第一次算出來那個(gè)喲

!
如果
,則為線性探測再散列 如果
,則為二次探測再散列 如果
為偽隨機(jī)序列,則為偽隨機(jī)探測再散列
解釋:老師講過,不解釋了哦!不懂上Q問我。嘻嘻。
折半查找例題:
在有序表(6,12,16,27,28,36,38,48,56,60,67)中,用折半法查找關(guān)鍵值58,需做的關(guān)鍵值比較次數(shù)為。(廣工—2012年6月28日考題)
答案:3次
解釋:
分一半,以36為中心,58和36比較,58>36
有序表變?yōu)?8,48,56,60,67(注意從中心的下一個(gè)元素開始)
- 再分一半,以56為中心,58和56比較,58>56
有序表變?yōu)?0,67
- 剩下兩個(gè),沒得再分一半啦親,此時(shí)比較58和60,58<60,但是60左邊木有了,嗚嗚~~~~(>_<)~~~~ ,因此58不在有序表中,查找結(jié)束,一共比較3次親O(∩_∩)O~~
第十章考點(diǎn):交換排序(冒泡法、快速排序法)、直接插入排序
冒泡法例題(楠妹出的,嘻嘻):(版本1.0和2.0中有錯(cuò))
親,你快點(diǎn)幫人家從小到大排列序列 56 23 77 21 ,要求用冒泡法,并且求比較次數(shù)啦親
答案:
第一輪比較:
1、56和23比較,56>23,56和23交換位置,序列變?yōu)椋?/font>
23 56 77 21
2、56和77比較,56<77,56和23不交換位置,序列變?yōu)椋?/font>
23 56 77 21
3、77和21比較,77>21,77和21交換位置,序列變?yōu)椋?/font>
23 56 21 77
第二輪比較:
1、23和56比較,23<56,不交換
2、56和21比較,56>21,交換,序列變?yōu)椋?/font>
23 21 56 77
3、56和77比較,56<77,不交換
第三輪比較:
1、23和21比較,23>21,交換,序列變?yōu)椋?/font>
23 56 77
2、23和56比較,不交換
3、56和77比較,不交換
排序完啦,嘻嘻,好開心!O(∩_∩)O~~ 并且比較次數(shù)為3輪,每一輪3次,共9次!
快夸夸楠妹吧!!(*^__^*) 嘻嘻……
解釋:
冒泡法排序的思路就是不斷地相間元素比較,交換
每一次必然是石沉大海,最大一個(gè)必然去了最后,比較小的慢慢向前浮上來,所以叫楠妹冒泡法!
冒泡法排序的比較輪數(shù)為: 元素個(gè)數(shù)-1
推薦大家看看這個(gè)視頻:
http://v.ku6.com/show/T4wLiqzZ9PCOFbmcjPDuew...html?ptag=vsogou
快速排序法例題(楠妹出的):
親,你快點(diǎn)幫人家從小到大排列序列 56 23 83 77 21 89 11 ,要求用快速排序法,并且求比較次數(shù)啦親
答案:
2、21和56比較,21小于56,21取代56的位置,記錄全部后移
5、77和21比較,77大于21,77與56比較,77大于56,77與23比較,77大于23,77與77比較,77等于77,故77留在原來位置
6、取出23,放入哨兵位置
7、23和21比較,23大于21,23與56比較,23小于56,23取代56的位置,記錄全部后移
10、56和21比較,56大于21,56和23比較,56大于23,56和56比較,56等于56,故56留在原來位置
11、因此,最終的排序?yàn)椋?/div>
共比較10次
注:
冒泡法的時(shí)間復(fù)雜度為:
快速排序法的時(shí)間復(fù)雜度為:

直接插入排序的時(shí)間復(fù)雜度為:
可見,快速排序法,全球公認(rèn)最快的排序法。專業(yè)排序30年,不要兩三百,不要四五百,只要998,對,你沒聽錯(cuò),只要998!你就可以擁有全球最快的排序法!趕快拿錢給楠妹吧,嘻嘻!!!(但是不穩(wěn)定……嗚嗚嗚~~~~(>_<)~~~~ )
終于寫完啦,寫了五個(gè)小時(shí)呀,嗚嗚!!!認(rèn)真看哦,(⊙o⊙)哦,(⊙o⊙)哦,(⊙o⊙)哦。。。。親!不認(rèn)真看的,打死你打死你打死你,哼哼哼哼!!!
要說再見了,不舍得呀!!!嗚嗚嗚嗚嗚嗚嗚!!!O__O”… ~~~~(>_<)~~~~!!!!
2014年6月6日星期五
于廣東某供熱大學(xué)某實(shí)驗(yàn)室
歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |