一泳赋、數(shù)組
a+(5*2+3)*2 = a+26
稀疏矩陣:矩陣中大部分元素都是0
解題技巧:代入法(記公式太難!;憧纭N窬!)
答案:A
二、數(shù)據(jù)結(jié)構(gòu)
計(jì)算機(jī)存儲(chǔ)和組織數(shù)據(jù)的方式穷遂。
非線性結(jié)構(gòu):樹(shù)函匕,圖(有環(huán)路)
(1)線性表
單向鏈表刪除元素a2:p->next = (a3) = q->next
單向鏈表插入x,a1與a2之間:s->next = (a2) = p->next蚪黑,p->next = s
雙向鏈表原理相同盅惜,只是操作兩套指針。
順序存儲(chǔ)與鏈?zhǔn)酱鎯?chǔ)對(duì)比:
存儲(chǔ)密度:包括存儲(chǔ)頭節(jié)點(diǎn)指針與數(shù)據(jù)祠锣,比如一個(gè)元素?cái)?shù)據(jù)大小為2酷窥,可能整個(gè)鏈元素大小為3~4。
隊(duì)列和棧
隊(duì)列:先進(jìn)先出
棧:先進(jìn)后出
循環(huán)隊(duì)列:隊(duì)列頭尾相接伴网,存入一個(gè)元素尾指針向后移一位,刪除一個(gè)元素頭指針向后移動(dòng)一位妆棒。缺點(diǎn):隊(duì)空和隊(duì)滿都是頭尾指針指在一起澡腾,解決:少存一個(gè)元素,可以清晰判斷尾指針+1就是頭指針糕珊,表示隊(duì)滿动分。
練習(xí)答案:
(2)廣義表
長(zhǎng)度:最外層元素個(gè)數(shù)
深度:層數(shù)
表頭:最外層第一個(gè)元素
表尾:除了表頭之外的所有元素組成的廣義表
例2答案:
tail(LS1) --> ((b,c),(d,e))
head(tail(LS1)) --> (b,c)
head( head ( tail(LS1) ) ) --> b
(3) 樹(shù)與二叉樹(shù)
節(jié)點(diǎn)的度:一個(gè)節(jié)點(diǎn)擁有的孩子節(jié)點(diǎn)數(shù),如節(jié)點(diǎn)1的度為 2红选,節(jié)點(diǎn)7為0澜公;
樹(shù)的度:所有節(jié)點(diǎn)度數(shù)最高值;
葉子節(jié)點(diǎn):4喇肋,5坟乾,7,8沒(méi)有孩子節(jié)點(diǎn)
分支節(jié)點(diǎn):有分支
內(nèi)部節(jié)點(diǎn):夾在中間蝶防,2甚侣,3,6
兄弟節(jié)點(diǎn):同父親间学,平級(jí)殷费,如4印荔,5
層次:
層次遍歷:1,2详羡,3仍律,4,5实柠,6水泉,7,8
前序:根-左-右:1-2-4-5-7-8--3-6
中序:左-根-右:4-2-7-8-5-1-3-6
后序:左-右-根:4-8-7-5-2-6-3-1
普通數(shù)轉(zhuǎn)二叉樹(shù)
連線法:兄弟節(jié)點(diǎn)連接起來(lái)主到,有多個(gè)孩子的只保留左邊第一個(gè)那條線
查找(排序)二叉樹(shù):左孩子節(jié)點(diǎn)均小于根茶行,右孩子節(jié)點(diǎn)均大于根
哈夫曼樹(shù):無(wú)損壓縮方式,構(gòu)造樹(shù)的帶權(quán)路徑長(zhǎng)度最小登钥。
權(quán):元素內(nèi)值
帶權(quán)路徑長(zhǎng)度:
空閑的資源利用起來(lái)畔师,方便遍歷。
平衡二叉樹(shù):提高查找效率牧牢,每個(gè)節(jié)點(diǎn)的平衡度只能為1看锉,0,-1塔鳍。
平衡度:左右兩孩子節(jié)點(diǎn)的深度差伯铣。
(4)圖
矩陣大小取決于節(jié)點(diǎn)數(shù)量n,矩陣為n*n
鄰接表:數(shù)組記錄可達(dá)節(jié)點(diǎn)及距離轮纫,鏈表存儲(chǔ)
沒(méi)有被箭頭指腔寡,表示不受約束。
掌握拓?fù)渑判虻牧鞒?/b>
圖的最小生成樹(shù):把圖節(jié)點(diǎn)間的連線去掉掌唾,用最少量線把所有節(jié)點(diǎn)連接起來(lái)放前,使得代價(jià)總和最小。
普里姆算法:從任意一個(gè)節(jié)點(diǎn)出發(fā)糯彬,并設(shè)這個(gè)節(jié)點(diǎn)為紅點(diǎn)集凭语,其余為藍(lán)點(diǎn)集,選擇該節(jié)點(diǎn)距離最近的點(diǎn)連接起來(lái)撩扒,并將該節(jié)點(diǎn)納入紅點(diǎn)集
注意:選的邊不能形成環(huán)
克魯斯卡爾算法:從最短邊選起似扔,依次選取短邊,除去形成環(huán)的邊搓谆。
(5)算法基礎(chǔ)
重點(diǎn):時(shí)間復(fù)雜度炒辉,分析算法的時(shí)間復(fù)雜度
所有常數(shù)級(jí)的復(fù)雜度都用 O(1) 表示;
循環(huán)n次挽拔,時(shí)間復(fù)雜度O(n);
log2(n) 是二叉樹(shù)查找辆脸,有n個(gè)節(jié)點(diǎn),最多查找的時(shí)間復(fù)雜度
限制:鍵值有序排列
散列表:按內(nèi)容查詢
線性探測(cè)法:
偽隨機(jī)數(shù)法:
(6)排序
希爾排序先大致調(diào)整排序螃诅,再梳理啡氢,效率高于直接插入排序
堆排序:先建堆状囱,取走根節(jié)點(diǎn),再重建堆倘是,再取走根節(jié)點(diǎn)....
冒泡排序:后面(底部)的往前冒亭枷,注意下標(biāo)的范圍變化
快速排序:選定基準(zhǔn),小于基準(zhǔn)的放基準(zhǔn)前面搀崭,大于基準(zhǔn)的放基準(zhǔn)后面叨粘,將原數(shù)列分成了兩個(gè)小數(shù)列。再對(duì)小數(shù)列用遞歸的方法瘤睹,就可繼續(xù)拆分升敲。
歸并排序:分組不斷合并
基數(shù)排序:先按個(gè)位收集排序,再按十位收集排序轰传,再按百位收集排序...