數(shù)據(jù)結(jié)構(gòu)課件之線性表 .pptx
《數(shù)據(jù)結(jié)構(gòu)課件之線性表 .pptx》由會員分享,可在線閱讀,更多相關(guān)《數(shù)據(jù)結(jié)構(gòu)課件之線性表 .pptx(85頁珍藏版)》請?jiān)趨R文網(wǎng)上搜索。
1、數(shù)據(jù)結(jié)構(gòu)課件數(shù)據(jù)結(jié)構(gòu)課件西北大學(xué)計(jì)算機(jī)系本演示文稿可能包含觀眾討論和即本演示文稿可能包含觀眾討論和即席反應(yīng)。使用席反應(yīng)。使用 PowerPoint 可以可以跟蹤演示時(shí)的即席反應(yīng),跟蹤演示時(shí)的即席反應(yīng),在幻燈片放映中,右鍵單擊鼠標(biāo)在幻燈片放映中,右鍵單擊鼠標(biāo)請選擇請選擇“會議記錄會議記錄”選擇選擇“即席反應(yīng)即席反應(yīng)”選項(xiàng)卡選項(xiàng)卡必要時(shí)輸入即席反應(yīng)必要時(shí)輸入即席反應(yīng)單擊單擊“確定確定”撤消此框撤消此框此動作將自動在演示文稿末尾創(chuàng)建此動作將自動在演示文稿末尾創(chuàng)建一張即席反應(yīng)幻燈片,包括您的一張即席反應(yīng)幻燈片,包括您的觀點(diǎn)。觀點(diǎn)。10/1/20231第第2章章 線性表線性表 l2.1 線性表的概念及運(yùn)
2、算 l2.2 線性表的順序存儲 l2.3 線性表的鏈?zhǔn)酱鎯?l2.4 一元多項(xiàng)式的表示及相加10/1/202322.1 2.1 線性表的概念及運(yùn)算線性表的概念及運(yùn)算l2.1.1 2.1.1 線性表的邏輯結(jié)構(gòu)線性表的邏輯結(jié)構(gòu) l2.1.2 2.1.2 線性表的抽象數(shù)據(jù)類型定義線性表的抽象數(shù)據(jù)類型定義 10/1/20233線性表的定義線線性性表表(Linear List)是由n(n0)個類型相同的數(shù)據(jù)元素a1,a2,,an組成的有限序列,記做(a1,a2,,ai-1,ai,ai+1,an)。數(shù)據(jù)元素之間是一對一的關(guān)系,即每個數(shù)據(jù)元素最多有一個直接前驅(qū)和一個直接后繼。線性表的邏輯結(jié)構(gòu)圖為:10/1/
3、20234線性表的特點(diǎn)線性表的特點(diǎn)同一性:線性表由同類數(shù)據(jù)元素組成,每一個ai必須屬于同一數(shù)據(jù)對象。有窮性:線性表由有限個數(shù)據(jù)元素組成,表長度就是表中數(shù)據(jù)元素的個數(shù)。有序性:線性表中相鄰數(shù)據(jù)元素之間存在著序偶關(guān)系。10/1/202352.1.2 線性表的抽象數(shù)據(jù)類型定義l抽象數(shù)據(jù)類型定義抽象數(shù)據(jù)類型定義:ADT LinearList數(shù)據(jù)元素?cái)?shù)據(jù)元素:D=ai|aiD0,i=1,2,,n n0,D0為某一數(shù)據(jù)對象 關(guān)系關(guān)系:|ai,ai+1D0,i=1,2,n-1 基本操作基本操作:(1)InitList(L)操作前提:L為未初始化線性表。操作結(jié)果:將L初始化為空表。(2)DestroyList
4、(L)操作前提:線性表L已存在。操作結(jié)果:將L銷毀。(3)ClearList(L)操作前提:線性表L已存在。操作結(jié)果:將表L置為空表。ADTLinearList10/1/202362.2 2.2 線性表的順序存儲線性表的順序存儲l2.2.1 線性表的順序存儲結(jié)構(gòu)線性表的順序存儲結(jié)構(gòu)l2.2.2 線性表順序存儲結(jié)構(gòu)上的基本運(yùn)算線性表順序存儲結(jié)構(gòu)上的基本運(yùn)算10/1/20237順序存儲結(jié)構(gòu)的定義 線性表的順序存儲是指用一組地址連續(xù)的存儲單元依次存儲線性表中的各個元素,使得線性表中在邏輯結(jié)構(gòu)上相鄰的數(shù)據(jù)元素存儲在相鄰的物理存儲單元中,即通過數(shù)據(jù)元素物理存儲的相鄰關(guān)系來反映數(shù)據(jù)元素之間邏輯上的相鄰關(guān)系
5、。采用順序存儲結(jié)構(gòu)的線性表通常稱為順序表順序表。假設(shè)線性表中每個元素占k個單元,第一個元素的地址為loc(a1),則第k個元素的地址為:loc(ai)=loc(a1)+(i-1)k 10/1/20238順序存儲結(jié)構(gòu)示意圖順序存儲結(jié)構(gòu)示意圖存儲地址內(nèi)存空間狀態(tài)邏輯地址Loc(a1)a11Loc(a1)+(2-1)ka22loc(a1)+(i-1)kaiiloc(a1)+(n-1)kann.loc(a1)+(maxlen-1)k 空閑10/1/20239順序存儲結(jié)構(gòu)的順序存儲結(jié)構(gòu)的C語言定義語言定義#definemaxsize=線性表可能達(dá)到的最大長度;typedefstructElemTypee
6、lemmaxsize;/*線性表占用的數(shù)組空間*/intlast;/*記錄線性表中最后一個元素在數(shù)組elem 中的位置(下標(biāo)值),空表置為-1*/SeqList;注意區(qū)分元素的序號和數(shù)組的下標(biāo),如a1的序號為1,而其對應(yīng)的數(shù)組下標(biāo)為0。10/1/2023102.2.2線性表順序存儲結(jié)構(gòu)的基本運(yùn)算l線性表的基本運(yùn)算:1.查找操作2.插入操作3.刪除操作4.順序表合并算法l線性表順序存儲結(jié)構(gòu)的優(yōu)缺點(diǎn)分析10/1/202311查找操作查找操作線性表的兩種基本查找運(yùn)算1.1.按序號查找按序號查找GetData(L,i):要求查找線性表L中第i個數(shù)據(jù)元素,其結(jié)果是L.elemi-1或L-elemi-1。
7、2.2.按內(nèi)容查找按內(nèi)容查找Locate(L,e):要求查找線性表L中與給定值e相等的數(shù)據(jù)元素,其結(jié)果是:若在表L中找到與e相等的元素,則返回該元素在表中的序號;若找不到,則返回一個“空序號”,如-1。3.線性表的查找運(yùn)算算法描述為:10/1/202312線性表的查找運(yùn)算線性表的查找運(yùn)算 int Locate(SeqListL,ElemTypee)i=0;/*i為掃描計(jì)數(shù)器,初值為0,即從第一個元素開始比較*/while(i=L.last)&(L.elemi!=e)i+;/*順序掃描表,直到找到值為key的元素,或掃描到表尾而沒找到*/if(i=L.last)return(i);/*若找到值為
8、e的元素,則返回其序號*/elsereturn(-1);/*若沒找到,則返回空序號*/10/1/202313插入操作插入操作 線性表的插入運(yùn)算是指在表的第i(1in+1)個位置,插入一個新元素e,使長度為n的線性表(e1,ei-1,ei,en)變成長度為n+1的線性表(e1,,ei-1,e e,ei,en)。線性表的插入運(yùn)算算法。10/1/202314插入插入算法示意圖算法示意圖已知:已知:線性表(4,9,15,28,30,30,42,51,62),需在第4個元素之前插入一個元素“21”。則需要將第9個位置到第4個位置的元素依次后移一個位置,然后將“21”插入到第4個位置,序號移動元素插入元素
9、123456781094915283030425162491528303042625149152128303042625110/1/202315插入運(yùn)算插入運(yùn)算intInsList(SeqList*L,inti,ElemTypee)intk;if(iL-last+2)/*首先判斷插入位置是否合法*/printf(“插入位置i值不合法”);return(ERROR);if(L-last=maxsize-1)printf(“表已滿無法插入”);return(ERROR);for(k=L-last;k=i-1;k-)/*為插入元素而移動位置*/L-elemk+1=L-elemk;L-elemi-1=
10、e;/*在C語言中數(shù)組第i個元素的下標(biāo)為i-1*/L-last+;return(OK);算法演示(此處連接算法演示程序)。10/1/202316刪除操作刪除操作線性表的刪除運(yùn)算是指將表的第i(1in)個元素刪去,使長度為n的線性表(e1,,ei-1,ei,ei+1,en),變成長度為n-1的線性表(e1,,ei-1,ei+1,en)。算法思路示意算法實(shí)現(xiàn)10/1/202317刪除刪除算法示意算法示意將線性表(4,9,15,21,28,30,30,42,51,62)中的第5個元素刪除。序號123456781094915212830304262514915213030425162刪除28后10/1
11、/202318刪除刪除算法算法intDelList(SeqList*L,inti,ElemType*e)/*在順序表L中刪除第i個數(shù)據(jù)元素,并用指針參數(shù)e返回其值*/intk;if(iL-last+1)printf(“刪除位置不合法!”);return(ERROR);*e=L-elemi-1;/*將刪除的元素存放到e所指向的變量中*/for(k=i;ilast;k+)L-elemk-1=L-elemk;/*將后面的元素依次前移*/L-last-;return(OK);10/1/202319合并算法合并算法l已知:有兩個順序表LA和LB,其元素均為非遞減有序排列,編寫一個算法,將它們合并成一個順
12、序表LC,要求LC也是非遞減有序排列。l算法思想算法思想:設(shè)表LC是一個空表,為使LC也是非遞減有序排列,可設(shè)兩個指針i、j分別指向表LA和LB中的元素,若LA.elemiLB.elemj,則當(dāng)前先將LB.elemj插入到表LC中,若LA.elemiLB.elemj,當(dāng)前先將LA.elemi插入到表LC中,如此進(jìn)行下去,直到其中一個表被掃描完畢,然后再將未掃描完的表中剩余的所有元素放到表LC中。l算法實(shí)現(xiàn)l此處連接算法演示10/1/202320順序表順序表合并算法實(shí)現(xiàn)合并算法實(shí)現(xiàn)voidmerge(SeqList*LA,SeqList*LB,SeqList*LC)i=0;j=0;k=0;whi
13、le(ilast&jlast)if(LA-elemielemj)LC-elemk=LA-elemi;i+;k+;elseLC-elemk=LB-elemj;j+;k+;while(ilast)/*當(dāng)表LA長則將表LA余下的元素賦給表LC*/LC-elemk=LA-elemi;i+;k+;while(jlast)/*當(dāng)表LB長則將表LB余下的元素賦給表LC*/LC-elemk=LB-elemj;j+;k+;LC-last=LA-last+LB-last;10/1/202321順序存儲結(jié)構(gòu)的優(yōu)點(diǎn)和缺點(diǎn)順序存儲結(jié)構(gòu)的優(yōu)點(diǎn)和缺點(diǎn)優(yōu)點(diǎn):1.無需為表示結(jié)點(diǎn)間的邏輯關(guān)系而增加額外的存儲空間;2.可方便地隨機(jī)
14、存取表中的任一元素。缺點(diǎn):1.插入或刪除運(yùn)算不方便,除表尾的位置外,在表的其它位置上進(jìn)行插入或刪除操作都必須移動大量的結(jié)點(diǎn),其效率較低;2.由于順序表要求占用連續(xù)的存儲空間,存儲分配只能預(yù)先進(jìn)行靜態(tài)分配。因此當(dāng)表長變化較大時(shí),難以確定合適的存儲規(guī)模。10/1/2023222.3 2.3 線性表的鏈?zhǔn)酱鎯€性表的鏈?zhǔn)酱鎯鏈表定義:鏈表定義:采用鏈?zhǔn)酱鎯Y(jié)構(gòu)的線性表稱為鏈表。現(xiàn)在我們從兩個角度來討論鏈表:1.從實(shí)現(xiàn)角度看,鏈表可分為動態(tài)鏈表和靜態(tài)鏈表;2.從鏈接方式的角度看,鏈表可分為單鏈表、循環(huán)鏈表和雙鏈表。10/1/202323l2.3.1 單鏈表單鏈表l2.3.2 單鏈表上的基本運(yùn)算單鏈表
15、上的基本運(yùn)算l2.3.3 循環(huán)鏈表循環(huán)鏈表l2.3.4 雙向鏈表雙向鏈表l*2.3.5 靜態(tài)鏈表靜態(tài)鏈表l2.3.6 順序表和鏈表的比較順序表和鏈表的比較鏈表鏈表10/1/2023242.3.1單鏈表 結(jié)點(diǎn)(結(jié)點(diǎn)(Node)為了正確地表示結(jié)點(diǎn)間的邏輯關(guān)系,必須在存儲線性表的每個數(shù)據(jù)元素值的同時(shí),存儲指示其后繼結(jié)點(diǎn)的地址(或位置)信息,這兩部分信息組成的存儲映象叫做結(jié)點(diǎn)(結(jié)點(diǎn)(Node)。單鏈表:鏈表中的每個結(jié)點(diǎn)只有一個指針域,我們將這種鏈表稱為單鏈表。單鏈表包括兩個域:數(shù)據(jù)域用來存儲結(jié)點(diǎn)的值;指針域用來存儲數(shù)據(jù)元素的直接后繼的地址(或位置)。頭指針頭指針:指向鏈表頭結(jié)點(diǎn)的指針。10/1/202
16、325單鏈表的示例圖單鏈表的示例圖頭指針H存儲地址數(shù)據(jù)域指針域1 D 437 B 1313 C 119 H NULL25 F 3731 A 737 G 1943 E 253110/1/202326帶頭結(jié)點(diǎn)的單鏈表示意圖帶頭結(jié)點(diǎn)的單鏈表示意圖有時(shí)為了操作的方便,還可以在單鏈表的第一個結(jié)點(diǎn)之前附設(shè)一個頭結(jié)點(diǎn)。l帶頭結(jié)點(diǎn)的空單鏈表l帶頭結(jié)點(diǎn)的單鏈表Ha1a2Han 10/1/202327單鏈表的存儲結(jié)構(gòu)描述單鏈表的存儲結(jié)構(gòu)描述typedef struct Node /*結(jié)點(diǎn)類型定義*/ElemType data;struct Node *next;Node,*LinkList;/*LinkList為
- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
12 積分
下載 | 加入VIP,下載共享資源 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 數(shù)據(jù)結(jié)構(gòu)課件之線性表 數(shù)據(jù)結(jié)構(gòu) 課件 線性