




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1第二章線(xiàn)性表1234567891第二章線(xiàn)性表12345678912本章內(nèi)容2.1線(xiàn)性表的類(lèi)型定義2.2線(xiàn)性表類(lèi)型的實(shí)現(xiàn)順序映象2.3線(xiàn)性表類(lèi)型的實(shí)現(xiàn)鏈?zhǔn)接诚?本章內(nèi)容2.1線(xiàn)性表的類(lèi)型定義23順序表示及其特點(diǎn)3順序表示及其特點(diǎn)34順序表示及其特點(diǎn)順序映象——以x的存儲(chǔ)位置和y的存儲(chǔ)位置之間某種關(guān)系表示邏輯關(guān)系<x,y>。最簡(jiǎn)單的一種順序映象方法是:用一組地址連續(xù)的存儲(chǔ)單元依次存放線(xiàn)性表中的數(shù)據(jù)元素。
a1a2…ai-1ai…an線(xiàn)性表的起始地址稱(chēng)作線(xiàn)性表的基地址4順序表示及其特點(diǎn)順序映象——以x的存儲(chǔ)位置和y的45順序表示及其特點(diǎn)以“存儲(chǔ)位置相鄰〞表示有序?qū)?lt;ai-1,ai>即:LOC(ai)=LOC(ai-1)+CC是一個(gè)數(shù)據(jù)元素所占存儲(chǔ)量所有數(shù)據(jù)元素的存儲(chǔ)位置均取決于第一個(gè)數(shù)據(jù)元素的存儲(chǔ)位置LOC(ai)=LOC(a1)+(i-1)×C
5順序表示及其特點(diǎn)以“存儲(chǔ)位置相鄰〞表示有序?qū)?lt;ai-1,a5小結(jié):順序表的特點(diǎn)用連續(xù)的存儲(chǔ)單元存放線(xiàn)性表的元素(采用一維數(shù)組存放)。元素存儲(chǔ)順序與元素的邏輯順序一致。讀寫(xiě)元素方便,通過(guò)下標(biāo)即可指定位置。6
a1a2…ai-1ai…an線(xiàn)性表的起始地址稱(chēng)作線(xiàn)性表的基地址小結(jié):順序表的特點(diǎn)用連續(xù)的存儲(chǔ)單元存放線(xiàn)性表的元素(采用一維67#defineLIST_INIT_SIZE80
//線(xiàn)性表存儲(chǔ)空間的初始分配量#defineLISTINCREMENT10
//線(xiàn)性表存儲(chǔ)空間的分配增量typedefstruct{ElemType*elem;//存儲(chǔ)空間基址
intlength;//當(dāng)前長(zhǎng)度
intlistsize;//當(dāng)前分配的存儲(chǔ)容量
//(以sizeof(ElemType)為單位)}SqList;//俗稱(chēng)順序表7#defineLIST_INIT_SIZE87801….i-2i-1….n-1……順序表a1a2…ai-1ai…an...L.elem+L.length-1L.elem+L.listsize-1elemlengthlistsizeL注意:由于數(shù)組的下標(biāo)從“0”開(kāi)始,表中第i個(gè)元素是L.elem[i-1].typedefstruct{ElemType*elem;
intlength;
intlistsize;
}SqList;//順序表SqListL;801….89順序表的初始化操作StatusInitList_Sq(SqList&L){//構(gòu)造一個(gè)空的線(xiàn)性表
L.elem=(ElemType*)malloc
(LIST_INIT_SIZEsizeof(ElemType));if(!L.elem)exit(OVERFLOW);L.length=0;L.listsize=LIST_INIT_SIZE;returnOK;}//InitList_Sqtypedefstruct{ElemType*elem;
intlength;
intlistsize;
}SqList;//順序表9順序表的初始化操作StatusInitList_Sq(910順序表的插入操作ListInsert(&L,i,e)
//插入元素在順序表L的第i個(gè)元素之前插入新的元素e,把e插入到第i個(gè)元素的位置
i的合法范圍為1≤i≤L.length+101….i-2i-1….n-1a1a2…ai-1ai…anee10順序表的插入操作ListInsert(&L,i,e)1011操作的過(guò)程:ListInsert(&L,6,30)341611825313416118253130341611825313416118302531341611830253111操作的過(guò)程:ListInsert(&L,6,30)1112操作的過(guò)程:ListInsert(&L,6,30)34161182531341611830253134161182531pqp34161182531pq=&(L.elem[i-1]);p=&(L.elem[L.length-1]);*(p+1)=*p;p--;34161182531p*(p+1)=*p;*q=e;p>=q;插入操作12操作的過(guò)程:ListInsert(&L,6,30)1213操作步驟判斷插入位置是否合法:1≤i≤L.length+1初始化指針循環(huán):從表尾開(kāi)場(chǎng),依次將第i-1個(gè)元素之后的元素順序后移一位將新元素e寫(xiě)入到第i個(gè)位置將表的長(zhǎng)度加113操作步驟1314StatusListInsert_Sq(SqList&L,inti,ElemTypee){
if(i<1||i>L.length+1)returnERROR;//步驟1:位置不合法
q=&(L.elem[i-1]);//步驟2:q指示插入位置
for(p=&(L.elem[L.length-1]);p>=q;p--)*(p+1)=*p;//步驟3:元素依次后移*q=e;//步驟4:插入e
++L.length;//步驟5:表長(zhǎng)加1
returnOK;}//ListInsert_Sq算法時(shí)間復(fù)雜度取決于:移動(dòng)元素的次數(shù)14StatusListInsert_Sq(SqList1415插入操作的算法復(fù)雜度考慮移動(dòng)元素的平均情況:假設(shè)在第i個(gè)元素之前插入的概率為pi,那么在長(zhǎng)度為n的線(xiàn)性表中插入一個(gè)元素所需移動(dòng)元素次數(shù)的期望值為:若假定在線(xiàn)性表中任何一個(gè)位置上進(jìn)行插入的概率都是相等的,則移動(dòng)元素的期望值為:算法時(shí)間復(fù)雜度為:O(n)15插入操作的算法復(fù)雜度考慮移動(dòng)元素的平均情況:若假定在線(xiàn)性1516if(L.length>=L.listsize){
//當(dāng)前存儲(chǔ)空間已滿(mǎn),增加分配
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)exit(OVERFLOW);//存儲(chǔ)分配失敗
L.elem=newbase;//新基址
L.listsize+=LISTINCREMENT;//增加存儲(chǔ)容量}如果存儲(chǔ)空間已滿(mǎn)怎么辦?16if(L.length>=L.listsize)1617程序設(shè)計(jì)方法的兩點(diǎn)說(shuō)明先考慮一般情況,后考慮特殊情況一般不用根本操作實(shí)現(xiàn)其他根本操作17程序設(shè)計(jì)方法的兩點(diǎn)說(shuō)明先考慮一般情況,后考慮特殊情況1718兩個(gè)實(shí)際問(wèn)題錯(cuò)誤的類(lèi)型:正常處理的錯(cuò)誤:是一些常見(jiàn)、合理的錯(cuò)誤〔如:用戶(hù)輸入的錯(cuò)誤〕,通過(guò)錯(cuò)誤代碼返回。意外錯(cuò)誤:拋出Exception,通過(guò)try-catch撲捉。初始化問(wèn)題:數(shù)據(jù)構(gòu)造沒(méi)有初始化就使用往往也是錯(cuò)誤,但無(wú)法判定。在C++和Java中通過(guò)構(gòu)造函數(shù)解決。18兩個(gè)實(shí)際問(wèn)題錯(cuò)誤的類(lèi)型:1819順序表的刪除操作ListDelete(&L,i,&e)//刪除元素刪除線(xiàn)性表中第i個(gè)元素,并將刪除的元素方在e中i的合法范圍為1≤i≤L.length刪除操作19順序表的刪除操作ListDelete(&L,i,&e1920操作的過(guò)程:ListDelete(&L,5,&e)34161253134161253134161182531pp341612531pp=&(L.elem[i-1]);*e=*p;p++;341612531p*(p-1)=*p;p>=L.elem+L.length-1;pp++;341612531p*(p-1)=*p;20操作的過(guò)程:ListDelete(&L,5,&e2021操作步驟判斷插入位置是否合法:1≤i≤L.length初始化指針將第i個(gè)元素的值賦給變量e循環(huán):從第i+1個(gè)元素開(kāi)場(chǎng),依次將后面的元素順序前移一位將表的長(zhǎng)度減121操作步驟2122StatusListDelete_Sq(SqList&L,inti,ElemType&e){
//步驟1:位置是否合法
if((i<1)||(i>L.length))returnERROR;
p=&(L.elem[i-1]);//步驟2:初始化指針
e=*p;//步驟3:賦給eq=L.elem+L.length-1;//表尾的位置
for(++p;p<=q;++p)*(p-1)=*p;//步驟4:被刪除元素之后的元素左移
--L.length;//步驟5:表長(zhǎng)減1returnOK;}//ListDelete_Sq算法時(shí)間復(fù)雜度取決于:移動(dòng)元素的次數(shù)22StatusListDelete_Sq算法時(shí)間復(fù)雜度取2223刪除操作的算法復(fù)雜度考慮移動(dòng)元素的平均情況:假設(shè)在刪除第i個(gè)元素的概率為pi,那么在長(zhǎng)度為n的線(xiàn)性表中刪除一個(gè)元素所需移動(dòng)元素次數(shù)的期望值為:若假定在線(xiàn)性表中任何一個(gè)位置上進(jìn)行刪除的概率都是相等的,則移動(dòng)元素的期望值為:算法時(shí)間復(fù)雜度為:O(n)23刪除操作的算法復(fù)雜度考慮移動(dòng)元素的平均情況:若假定在線(xiàn)性2324LocateElem_Sq(SqListL,ElemTypee,Status(*compare)(ElemType,ElemType))23754138546217L.elemL.lengthL.listsizee=38pppppi12341850p基本操作:將順序表中的元素逐個(gè)和給定值e相比較。定位操作循環(huán)結(jié)束標(biāo)志:找到e或者p超過(guò)表尾的地址24LocateElem_Sq(SqListL,Elem2425定位操作請(qǐng)大家寫(xiě)出順序表的定位操作的操作步驟和程序要求:在順序表中查詢(xún)第一個(gè)滿(mǎn)足判定條件的數(shù)據(jù)元素,假設(shè)存在,那么返回它的位序,否那么返回0算法時(shí)間復(fù)雜度為:O(n)25定位操作請(qǐng)大家寫(xiě)出順序表的定位操作的算法時(shí)間復(fù)雜度為:O25小結(jié):順序表的優(yōu)缺點(diǎn)優(yōu)點(diǎn)不需要附加空間隨機(jī)存取任一個(gè)元素〔根據(jù)下標(biāo)〕缺點(diǎn)很難估計(jì)所需空間的大小開(kāi)場(chǎng)就要分配足夠大的一片連續(xù)的內(nèi)存空間更新操作代價(jià)大26小結(jié):順序表的優(yōu)缺點(diǎn)優(yōu)點(diǎn)262627END27END2728第二章線(xiàn)性表1234567891第二章線(xiàn)性表1234567892829本章內(nèi)容2.1線(xiàn)性表的類(lèi)型定義2.2線(xiàn)性表類(lèi)型的實(shí)現(xiàn)順序映象2.3線(xiàn)性表類(lèi)型的實(shí)現(xiàn)鏈?zhǔn)接诚?本章內(nèi)容2.1線(xiàn)性表的類(lèi)型定義2930順序表示及其特點(diǎn)3順序表示及其特點(diǎn)3031順序表示及其特點(diǎn)順序映象——以x的存儲(chǔ)位置和y的存儲(chǔ)位置之間某種關(guān)系表示邏輯關(guān)系<x,y>。最簡(jiǎn)單的一種順序映象方法是:用一組地址連續(xù)的存儲(chǔ)單元依次存放線(xiàn)性表中的數(shù)據(jù)元素。
a1a2…ai-1ai…an線(xiàn)性表的起始地址稱(chēng)作線(xiàn)性表的基地址4順序表示及其特點(diǎn)順序映象——以x的存儲(chǔ)位置和y的3132順序表示及其特點(diǎn)以“存儲(chǔ)位置相鄰〞表示有序?qū)?lt;ai-1,ai>即:LOC(ai)=LOC(ai-1)+CC是一個(gè)數(shù)據(jù)元素所占存儲(chǔ)量所有數(shù)據(jù)元素的存儲(chǔ)位置均取決于第一個(gè)數(shù)據(jù)元素的存儲(chǔ)位置LOC(ai)=LOC(a1)+(i-1)×C
5順序表示及其特點(diǎn)以“存儲(chǔ)位置相鄰〞表示有序?qū)?lt;ai-1,a32小結(jié):順序表的特點(diǎn)用連續(xù)的存儲(chǔ)單元存放線(xiàn)性表的元素(采用一維數(shù)組存放)。元素存儲(chǔ)順序與元素的邏輯順序一致。讀寫(xiě)元素方便,通過(guò)下標(biāo)即可指定位置。33
a1a2…ai-1ai…an線(xiàn)性表的起始地址稱(chēng)作線(xiàn)性表的基地址小結(jié):順序表的特點(diǎn)用連續(xù)的存儲(chǔ)單元存放線(xiàn)性表的元素(采用一維3334#defineLIST_INIT_SIZE80
//線(xiàn)性表存儲(chǔ)空間的初始分配量#defineLISTINCREMENT10
//線(xiàn)性表存儲(chǔ)空間的分配增量typedefstruct{ElemType*elem;//存儲(chǔ)空間基址
intlength;//當(dāng)前長(zhǎng)度
intlistsize;//當(dāng)前分配的存儲(chǔ)容量
//(以sizeof(ElemType)為單位)}SqList;//俗稱(chēng)順序表7#defineLIST_INIT_SIZE8343501….i-2i-1….n-1……順序表a1a2…ai-1ai…an...L.elem+L.length-1L.elem+L.listsize-1elemlengthlistsizeL注意:由于數(shù)組的下標(biāo)從“0”開(kāi)始,表中第i個(gè)元素是L.elem[i-1].typedefstruct{ElemType*elem;
intlength;
intlistsize;
}SqList;//順序表SqListL;801….3536順序表的初始化操作StatusInitList_Sq(SqList&L){//構(gòu)造一個(gè)空的線(xiàn)性表
L.elem=(ElemType*)malloc
(LIST_INIT_SIZEsizeof(ElemType));if(!L.elem)exit(OVERFLOW);L.length=0;L.listsize=LIST_INIT_SIZE;returnOK;}//InitList_Sqtypedefstruct{ElemType*elem;
intlength;
intlistsize;
}SqList;//順序表9順序表的初始化操作StatusInitList_Sq(3637順序表的插入操作ListInsert(&L,i,e)
//插入元素在順序表L的第i個(gè)元素之前插入新的元素e,把e插入到第i個(gè)元素的位置
i的合法范圍為1≤i≤L.length+101….i-2i-1….n-1a1a2…ai-1ai…anee10順序表的插入操作ListInsert(&L,i,e)3738操作的過(guò)程:ListInsert(&L,6,30)341611825313416118253130341611825313416118302531341611830253111操作的過(guò)程:ListInsert(&L,6,30)3839操作的過(guò)程:ListInsert(&L,6,30)34161182531341611830253134161182531pqp34161182531pq=&(L.elem[i-1]);p=&(L.elem[L.length-1]);*(p+1)=*p;p--;34161182531p*(p+1)=*p;*q=e;p>=q;插入操作12操作的過(guò)程:ListInsert(&L,6,30)3940操作步驟判斷插入位置是否合法:1≤i≤L.length+1初始化指針循環(huán):從表尾開(kāi)場(chǎng),依次將第i-1個(gè)元素之后的元素順序后移一位將新元素e寫(xiě)入到第i個(gè)位置將表的長(zhǎng)度加113操作步驟4041StatusListInsert_Sq(SqList&L,inti,ElemTypee){
if(i<1||i>L.length+1)returnERROR;//步驟1:位置不合法
q=&(L.elem[i-1]);//步驟2:q指示插入位置
for(p=&(L.elem[L.length-1]);p>=q;p--)*(p+1)=*p;//步驟3:元素依次后移*q=e;//步驟4:插入e
++L.length;//步驟5:表長(zhǎng)加1
returnOK;}//ListInsert_Sq算法時(shí)間復(fù)雜度取決于:移動(dòng)元素的次數(shù)14StatusListInsert_Sq(SqList4142插入操作的算法復(fù)雜度考慮移動(dòng)元素的平均情況:假設(shè)在第i個(gè)元素之前插入的概率為pi,那么在長(zhǎng)度為n的線(xiàn)性表中插入一個(gè)元素所需移動(dòng)元素次數(shù)的期望值為:若假定在線(xiàn)性表中任何一個(gè)位置上進(jìn)行插入的概率都是相等的,則移動(dòng)元素的期望值為:算法時(shí)間復(fù)雜度為:O(n)15插入操作的算法復(fù)雜度考慮移動(dòng)元素的平均情況:若假定在線(xiàn)性4243if(L.length>=L.listsize){
//當(dāng)前存儲(chǔ)空間已滿(mǎn),增加分配
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)exit(OVERFLOW);//存儲(chǔ)分配失敗
L.elem=newbase;//新基址
L.listsize+=LISTINCREMENT;//增加存儲(chǔ)容量}如果存儲(chǔ)空間已滿(mǎn)怎么辦?16if(L.length>=L.listsize)4344程序設(shè)計(jì)方法的兩點(diǎn)說(shuō)明先考慮一般情況,后考慮特殊情況一般不用根本操作實(shí)現(xiàn)其他根本操作17程序設(shè)計(jì)方法的兩點(diǎn)說(shuō)明先考慮一般情況,后考慮特殊情況4445兩個(gè)實(shí)際問(wèn)題錯(cuò)誤的類(lèi)型:正常處理的錯(cuò)誤:是一些常見(jiàn)、合理的錯(cuò)誤〔如:用戶(hù)輸入的錯(cuò)誤〕,通過(guò)錯(cuò)誤代碼返回。意外錯(cuò)誤:拋出Exception,通過(guò)try-catch撲捉。初始化問(wèn)題:數(shù)據(jù)構(gòu)造沒(méi)有初始化就使用往往也是錯(cuò)誤,但無(wú)法判定。在C++和Java中通過(guò)構(gòu)造函數(shù)解決。18兩個(gè)實(shí)際問(wèn)題錯(cuò)誤的類(lèi)型:4546順序表的刪除操作ListDelete(&L,i,&e)//刪除元素刪除線(xiàn)性表中第i個(gè)元素,并將刪除的元素方在e中i的合法范圍為1≤i≤L.length刪除操作19順序表的刪除操作ListDelete(&L,i,&e4647操作的過(guò)程:ListDelete(&L,5,&e)34161253134161253134161182531pp341612531pp=&(L.elem[i-1]);*e=*p;p++;341612531p*(p-1)=*p;p>=L.elem+L.length-1;pp++;341612531p*(p-1)=*p;20操作的過(guò)程:ListDelete(&L,5,&e4748操作步驟判斷插入位置是否合法:1≤i≤L.length初始化指針將第i個(gè)元素的值賦給變量e循環(huán):從第i+1個(gè)元素開(kāi)場(chǎng),依次將后面的元素順序前移一位將表的長(zhǎng)度減121操作步驟4849StatusListDelete_Sq(SqList&L,inti,ElemType&e){
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《Unit 5 Welcome》(教學(xué)設(shè)計(jì))-2024-2025學(xué)年北師大版(一起)英語(yǔ)二年級(jí)上冊(cè)
- 河北工業(yè)職業(yè)技術(shù)大學(xué)《數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- Unit 7 Outdoor fun Pronunciation 教學(xué)設(shè)計(jì)-2024-2025學(xué)年譯林版英語(yǔ)七年級(jí)下冊(cè)
- 廣東水利電力職業(yè)技術(shù)學(xué)院《建筑力學(xué)與結(jié)構(gòu)選型》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖北財(cái)稅職業(yè)學(xué)院《智慧物流技術(shù)與裝備》2023-2024學(xué)年第二學(xué)期期末試卷
- 黔南民族幼兒師范高等專(zhuān)科學(xué)校《電路實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 內(nèi)蒙古民族幼兒師范高等專(zhuān)科學(xué)校《水利水電工程施工》2023-2024學(xué)年第二學(xué)期期末試卷
- 濟(jì)南2025年山東濟(jì)南市歷城區(qū)所屬事業(yè)單位招聘初級(jí)綜合類(lèi)崗位50人筆試歷年參考題庫(kù)附帶答案詳解-1
- 焦作工貿(mào)職業(yè)學(xué)院《無(wú)人機(jī)行業(yè)應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 海南經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院《化學(xué)教學(xué)設(shè)計(jì)研究》2023-2024學(xué)年第二學(xué)期期末試卷
- 加涅的信息加工理論-課件
- 400字作文稿紙(方格)A4打印模板
- 不領(lǐng)證的夫妻離婚協(xié)議書(shū)
- 鋁型材企業(yè)組織架構(gòu)及部門(mén)職能
- 華為BEM戰(zhàn)略解碼體系完整版
- Python商務(wù)數(shù)據(jù)分析與實(shí)戰(zhàn)PPT完整全套教學(xué)課件
- 利用“自然筆記”提高小學(xué)生科學(xué)素養(yǎng)獲獎(jiǎng)科研報(bào)告
- 焓濕圖的應(yīng)用實(shí)例
- 2022-2023學(xué)年江蘇省揚(yáng)州市普通高校高職單招綜合素質(zhì)測(cè)試題(含答案)
- 小學(xué)科學(xué)教科版三年級(jí)下冊(cè)全冊(cè)課課練習(xí)題(2023春)(附參考答案)
- 《是誰(shuí)覺(jué)醒了中國(guó)》
評(píng)論
0/150
提交評(píng)論