數(shù)據(jù)結(jié)構(gòu)第二章_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)第二章_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)第二章_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)第二章_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)第二章_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第二章線性表線性表順序表鏈表順序表與鏈表的比較線性表定義:

n(0)個(gè)數(shù)據(jù)元素的有限序列,記作(a1,…ai-1,ai,ai+1,…,an)

其中,ai

是表中數(shù)據(jù)元素,n是表長(zhǎng)度。特點(diǎn):同一線性表中元素具有相同特性。相鄰數(shù)據(jù)元素之間存在序偶關(guān)系。除第一個(gè)元素外,其他每一個(gè)元素有一個(gè)且僅有一個(gè)直接前驅(qū)。除最后一個(gè)元素外,其他每一個(gè)元素有一個(gè)且僅有一個(gè)直接后繼。

抽象數(shù)據(jù)類(lèi)型線性表的定義

ADTList{數(shù)據(jù)對(duì)象:D={ai|ai∈Elemset,i=1,2…,n,n>=0}數(shù)據(jù)關(guān)系:R1={<ai-1,ai>|ai-1,ai∈D,i=2,…,n}基本操作:

(1)存?。?)插入(3)刪除 (4)查找(5)合并(6)分解(7)排序(8)求線性表的長(zhǎng)度算法2.1

算法2.2

順序表定義:將線性表中的元素相繼存放在一個(gè)連續(xù)的存儲(chǔ)空間中。

存儲(chǔ)結(jié)構(gòu):數(shù)組。特點(diǎn):線性表的順序存儲(chǔ)方式。存取方式:順序存取順序存儲(chǔ)結(jié)構(gòu)示意圖458990674078

012345順序表的存儲(chǔ)方式:LOC(ai+1)=LOC(ai)+(i-1)*lLOC(ai)=LOC(a1)+(i-1)*l

a1

a2

…ai………an12…i………n

aa+l…a+(i-1)*l………a+(n-1)*l

idletypedefintElemType;intA,B,*P;與ElemTypeA,B,*P;等價(jià)typedefcharElemType;charx,y,*P;與ElemTypex,y,*P;等價(jià)typedefstruct{ longnum;//學(xué)生號(hào) floatscore;//成績(jī)}ElemType;//定義了一個(gè)新類(lèi)型,類(lèi)型名ElemTypeElemTypestudent1,student2,*p;順序表(SeqList)的類(lèi)型定義#defineList_INIT_SIZE100//線性表存儲(chǔ)空間的初始分配量。#defineLISTINCREMENT10//線性表存儲(chǔ)空間的分配增量typedefstruct{ElemType*elem;//分配空間基址intLenth;//當(dāng)前長(zhǎng)度intListsize;//當(dāng)前分配的存儲(chǔ)容量(以sizeof(ElemType)為單位)}Sqlist;順序表基本運(yùn)算初始化

插入運(yùn)算---在第I(1<=I<=n+1)個(gè)元素之前插入一個(gè)新的數(shù)據(jù)元素x。使:長(zhǎng)度為n的線性表變?yōu)殚L(zhǎng)度為n+1的線性表(a1,a2,…,ai-1,ai,…,an)

(a1,a2,…,ai-1,x,ai,…,an)插入25345716480963

0123456750插入x2534575016480963

0123456750i插入算法的思想:若i=n+1,則將x插入到表尾;若表長(zhǎng)度n<0或插入位置不適當(dāng),則輸出錯(cuò)誤信息,并返回-1;當(dāng)1<=i<=n時(shí),則從表尾開(kāi)始到i個(gè)依次向后移動(dòng)一個(gè)位置(共需移動(dòng)n-i+1個(gè)數(shù)據(jù)元素。最后將x存入v[i]中,表長(zhǎng)n增1插入成功,函數(shù)返回值為0。StatusListInsert_Sq(SqList&L,inti,ElemTypee){ //在順序線性表L中第i個(gè)位置之前插入新的元素e. //i的合法值為1≤i≤ListLenth_sq(L)+1 if(i<1||i>L.lenth+1)retureERROR;//i值不合法 if(L.lenth>=L.Listsize){//當(dāng)前存儲(chǔ)空間已滿,增加分配 newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType)); if(!newbase)exit(OVERLOW);//存儲(chǔ)分配失敗。 L.elem=newbase;//新基址 L.listsize+=LISTINCREMENT; }//增加存儲(chǔ)容量 q=&(L.elem[i-1]);//q為插入位置 for(p=&(L.elem[L.lenth-1];p>=q;--p)*(p+1)=*p; //插入位置及至后的元素右移 *q=e;//插入e ++L.lenth;//表長(zhǎng)增1 returnOK;}//ListInsert_sq按等概率考慮:可能的插入位置為i=1,2,……n,n+1共n+1個(gè),則pi=1/(n+1)所以順序表插入算法平均約需移動(dòng)一半結(jié)點(diǎn)。時(shí)間復(fù)雜度為:T(n)=O(n)(2)刪浪除算蹄法--尖-將線娘性表路的第I(1<津=I遵<=醋n)個(gè)結(jié)捏點(diǎn)刪里除,騾使:虎長(zhǎng)度艇為n的線宴性表晶變?yōu)橐鲩L(zhǎng)度盈為n-屯1的線拉性表勢(shì)。(a1,a2,…韻,ai-沖1,ai,ai+涂1,…獵,an)(a1,a2,…樂(lè),ai-吵1,ai+漸1,…僑,an)刪除25電3脫4新57端50擱16睛4芝8適09聽(tīng)6316刪除x25窯3慣4辱57酷50圾4桑8區(qū)09饒630稻1好2指3筒4甩5遠(yuǎn)6糧7刪除掩算法扶的思衡想:若i=訂n,只需刪主除終箏端結(jié)寇點(diǎn),凝不用舅移動(dòng)寬結(jié)點(diǎn)補(bǔ);若表啟長(zhǎng)度n<貿(mào)=0或刪剛除位合置不慕適當(dāng),則項(xiàng)輸出根錯(cuò)誤揭信息唱,并浸返回-1;當(dāng)1<技=i巧<n時(shí),玩則將暗表中姐結(jié)點(diǎn)ai+殃1,ai+皺2,…很,an依次輛向前召移動(dòng)競(jìng)一個(gè)領(lǐng)位置記(共虎需移攏動(dòng)n-機(jī)I個(gè)數(shù)季據(jù)元智素。最后衡將表刃長(zhǎng)n減1,刪閘除成績(jī)功,銅函數(shù)駁返回送值為0。St譽(yù)at彎usLi滋st洲D(zhuǎn)e瞧le勢(shì)te丟_S顧q(調(diào)Sq頑Li窮st&L,緊in常ti,枝El巡壽em銜Ty描pe&揀e)短{//在順陜序線度性表隨中刪東除第i個(gè)元蛋素,曬并用e返回墊其值//作i的合脾法值綿為1≤態(tài)i≤膠Li甘st很Le納nt筐h_枯Sq地(L抖)if沾((樓i<1蓄)帳||找(山i>L.箱le奏nt拼h))昆re歷tu嗽rn捆ER蒙RO燃R;頭/糞/i值為詠不合盈法P=稀&(貝L.臣el澆em偽[i勞-1慌])掩;隆/慨/統(tǒng)p為被泳刪除粥元素伙的位步置e=藍(lán)*p匯;巾/涌/被刪艱除元溫素的柴值賦晌給eq=淋L.傳el惡em棋+L帳.l掉en事th皺-1繁;仗/枯/標(biāo)尾難元素熊位置fo賣(mài)r(借++擁p;尤p<歷=q售;然++杯p)*(恐p-靈1)拔=*杰p;瘡/喪/被刪靈除之厲后的鮮元素籃左移--L.社le捆nt逢h;踐//表長(zhǎng)巨度減1re凝tu閘rn窩O圓K;}/垮/Li階st頑De泰le迫te-S尚q刪除繳算法醬分析編:上述碧算法fo銷(xiāo)r循環(huán)屯語(yǔ)句棋的執(zhí)唯行次塵數(shù)為n-梨i;若i=如1,最壞亮:O(插n)若i=味n,無(wú)需島用移錘動(dòng)結(jié)慘點(diǎn),飾直接迅刪除填即可業(yè)。(廣最好O(沸1))移動(dòng)歌結(jié)點(diǎn)廳的平邀均次敞數(shù):按等束概率楚考慮護(hù):可能宰的刪堤除位年置為I=慰1,抵2,摧……納n共n個(gè),申則pi倡=1隙/n所以順序鋒表插滔入算決法平士均約傲需移道動(dòng)一探半結(jié)伐點(diǎn)。小結(jié)?。喉樞蛑北聿逶慈?、什刪除擁算法畝平均矩約需施移動(dòng)能一半拔結(jié)點(diǎn)怎,當(dāng)n很大他時(shí),媽算法抽的效稿率較冤低。時(shí)間叨復(fù)雜戀度為芽:T(悟n)蒙=O(貓n)按值富查找:找x在表離中的緩位置施,若階查找泳成功肺,返臣回表測(cè)項(xiàng)的辟位置結(jié),否劉則返躍回-1in椒tLo榴ca眨te體El列em胡_S吉q(賤Sq秀li伴stL,逐El裙em瓶Ty掏pee,革s瘋ta窮tu滲s滅(*co暢ma授re敘)(懶El戒em外Ty騰pe澤,E值le證mT慘yp西e))貍{//在順氣序線聰性表L中查箱找第1個(gè)與e滿足co屬mp琴ar欺e(啞)的元飄素的模位序//若找眨到,扶則返孝回其閣在L中的印為序姨,否化則返俗回0i=瓣1;忘/敵/i的初馬值為捏第1個(gè)元宿素的頁(yè)位序p=L.定el暗em;卻//細(xì)p的初蘋(píng)值為解第個(gè)任元素隨的存儀儲(chǔ)位屋置wh穩(wěn)il恩e(派i<=L.涌le棍nt遍h&&裙!攝(*兆co王mp漲ar瞧e)朱(*炎p+宋+,般e鐮))事++狡i;if品(都i<拜=L.茄le軟nt歡h)鏡r某et扒ur景n寸i;el勁se逆re前tu樸rn何0愉;}/解/Lo吐ca延te姓El嫁em沉_S劣q順序疫表的父合并vo儲(chǔ)idMe教rg蛙eL雪is蠟t_迅Sq捆(S達(dá)qL忙is貪tLa棄,S制qL隙is傭tLb翠,S徹qL虜is巡壽t&Lc){//已知膠順序輸線性認(rèn)表La和Lb的元瘡素按倘值非揚(yáng)遞減提排列//歸并La和Lb得到酬新的蔑順序胞線性賞表Lc,Lc的也芬按值誰(shuí)非遞茄減排株列pa汪=La柴.e蹦le困m;芽pb=Lb表.e稅le棗m;lc厭.l側(cè)is股ts義iz登e=Lc填.l殊en本th=La限.l擇en補(bǔ)th吳+L升b.腦le是nt永h;pc幣=Lc痕.e倍le志m=(El頂em癥Ty榨pe*)ma邊ll質(zhì)oc酸(L飲c.抵Li宗st奔si李ze*si兆ze凡of持(E種le瞇mT鋸yp優(yōu)e))數(shù);if國(guó)(!束Lc閉.e每le吵m)ex者it予(O標(biāo)VE陽(yáng)RF椅LO訊W);pa陵_l殘as婆t=L擦a.顯el邁em亮+L壩a.茂le占nt團(tuán)h-來(lái)1;pb靜_l燈as筐t=L能b.密el學(xué)em則+L江b.恥le絕nt沿h-狂1;wh婆il

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論