![12講第五章數(shù)組廣義表_第1頁(yè)](http://file4.renrendoc.com/view/a8b216eb3c9ea1c46fb7f000fc766bf4/a8b216eb3c9ea1c46fb7f000fc766bf41.gif)
![12講第五章數(shù)組廣義表_第2頁(yè)](http://file4.renrendoc.com/view/a8b216eb3c9ea1c46fb7f000fc766bf4/a8b216eb3c9ea1c46fb7f000fc766bf42.gif)
![12講第五章數(shù)組廣義表_第3頁(yè)](http://file4.renrendoc.com/view/a8b216eb3c9ea1c46fb7f000fc766bf4/a8b216eb3c9ea1c46fb7f000fc766bf43.gif)
![12講第五章數(shù)組廣義表_第4頁(yè)](http://file4.renrendoc.com/view/a8b216eb3c9ea1c46fb7f000fc766bf4/a8b216eb3c9ea1c46fb7f000fc766bf44.gif)
![12講第五章數(shù)組廣義表_第5頁(yè)](http://file4.renrendoc.com/view/a8b216eb3c9ea1c46fb7f000fc766bf4/a8b216eb3c9ea1c46fb7f000fc766bf45.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第五章數(shù)組和廣義表本章內(nèi)容與要點(diǎn)本章內(nèi)容數(shù)組的類(lèi)型定義和表示方法;稀疏矩陣的壓縮存儲(chǔ)方法及矩陣運(yùn)算的實(shí)現(xiàn);廣義表定義的遞歸性及廣義表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。本章要點(diǎn)了解數(shù)組的兩種存儲(chǔ)表示方法,并掌握數(shù)組在以行為主的存儲(chǔ)結(jié)構(gòu)中的地址計(jì)算方法;領(lǐng)會(huì)以三元組表示稀疏矩陣時(shí)進(jìn)行矩陣運(yùn)算采用的處理方法;掌握廣義表的結(jié)構(gòu)特點(diǎn)及鏈?zhǔn)酱鎯?chǔ)表示方法;掌握數(shù)組和廣義表可看成是一種特殊的線性表,其特殊性在于,表中的數(shù)據(jù)元素本身也是一種線性表。5.1數(shù)組的定義數(shù)組數(shù)組是數(shù)據(jù)元素為結(jié)構(gòu)類(lèi)型的一種特殊的線性表。數(shù)組的每一個(gè)元素的結(jié)構(gòu)都是相同的;數(shù)組中各元素具有統(tǒng)一的類(lèi)型,并且數(shù)組元素的下標(biāo)一般具有固定的上界和下界;數(shù)組通常分為一維數(shù)組、二維數(shù)組、三維數(shù)組…和n維數(shù)組。數(shù)組一旦被定義,它的維數(shù)和維界就不再改變。除了結(jié)構(gòu)的初始化和銷(xiāo)毀之外,數(shù)組只有存取元素和修改元素值的操作。
二維數(shù)組的定義二維數(shù)組既可以看成是由行向量組成的向量;也可以看成是列向量組成的向量;C語(yǔ)言中二維數(shù)組的定義定義為分量類(lèi)型為一維數(shù)組類(lèi)型的一維數(shù)組類(lèi)型
typedefelemtypearray2[m][n];
等價(jià)于:
typedefelemtypearray1[n];typedefarray1array2[m];Amn=a11a12
…a1na21a22
…a2n
…
…
…
…am1am2
…amn5.2數(shù)組的順序表示和實(shí)現(xiàn)數(shù)組的順序存儲(chǔ)方式行優(yōu)先順序?qū)?shù)組元素按行排列,第i+1個(gè)行向量緊接在第i個(gè)行向量后面;以二維數(shù)組為例,按行優(yōu)先順序存儲(chǔ)的線性序列為:a11,a12,…,a1n,a21,a22,…a2n,……,am1,am2,…,amn
PASCAL、C語(yǔ)言中,數(shù)組就是按行優(yōu)先順序存儲(chǔ)的。列優(yōu)先順序?qū)?shù)組元素按列向量排列,第j+1個(gè)列向量緊接在第j個(gè)列向量之后,數(shù)組的m*n個(gè)元素按列優(yōu)先順序存儲(chǔ)的線性序列為:a11,a21,…,am1,a12,a22,…am2,……,an1,an2,…,anm在FORTRAN語(yǔ)言中,數(shù)組就是按列優(yōu)先順序存儲(chǔ)的。數(shù)組的順序存儲(chǔ)方式(續(xù))多維數(shù)組行優(yōu)先順序規(guī)定為先排最右的下標(biāo),從右到左,最后排最左下標(biāo):列優(yōu)先順序規(guī)定為先排最左下標(biāo),從左向右,最后排最右下標(biāo)。數(shù)組的順序存儲(chǔ)特點(diǎn)只要已知開(kāi)始結(jié)點(diǎn)的存放地址(即基地址)、數(shù)組維數(shù)、每維的上、下界,和每個(gè)數(shù)組元素所占用的單元數(shù),就可以將數(shù)組元素的存放地址表示為其下標(biāo)的線性函數(shù);數(shù)組中的任一元素可以在相同的時(shí)間內(nèi)存取,即順序存儲(chǔ)的數(shù)組是一個(gè)隨機(jī)存取結(jié)構(gòu)。數(shù)組的順序表示和實(shí)現(xiàn)(續(xù))求數(shù)組A[c1..d1,c2..d2,……,cn..dn]每個(gè)給定下標(biāo)的數(shù)據(jù)元素的存儲(chǔ)地址:LOC(j1,j2,…,jn)=
Loc(c1,c2,…,cn)+[(d2-c2+1)…(dn-cn+1)(j1-c1)+(d3-c3+1)…(dn-cn+1)(j2-c2)+...+(dn-cn+1)(jn-1-cn-1)+(jn-cn)]*l=Loc(c1,c2,…,cn)+[∑(ji-ci)(∏(dk-ck+1)+(jn-cn)]*li=1k=i+1n-1nLOC(j1,j2,…,jn)=
Loc(c1,c2,…,cn)+∑αi(ji-ci)i=1n其中αi
=l∏(dk-ck+1)1≤i≤nnk=i+15.3矩陣壓縮存儲(chǔ)特殊矩陣非零元素或零元素的分布有一定規(guī)律的矩陣,可以把矩陣壓縮存儲(chǔ)在一個(gè)一維數(shù)數(shù)組中。如下三角矩陣有映射k=i(i-1)/2+j(i≥j),Aij=Bk(i≥j),Aij=0(i≤j)An×nBm,即B[k]=A[i,j],需求出下標(biāo)映射函數(shù)k=f(i,j)。上三角矩陣0對(duì)角矩陣000下三角矩陣ajiaij對(duì)稱矩陣a11a21a22a31...a(chǎn)n,1...a(chǎn)nnk=0123n(n-1)/2n(n+1)/2-1稀疏矩陣稀疏矩陣非零元素很少,分布沒(méi)有規(guī)律;設(shè)矩陣A中有s個(gè)非零元素,若s遠(yuǎn)遠(yuǎn)小于矩陣元素的總數(shù)(即s≦m×n),則稱A為稀疏矩陣;令e=s/(m*n),稱e為矩陣的稀疏因子。通常認(rèn)為e≦0.05時(shí)稱之為稀疏矩陣;在壓縮存儲(chǔ)時(shí)需要同時(shí)存儲(chǔ)非零元素的下標(biāo)和值;可用三元組存儲(chǔ)(行號(hào),列號(hào),值)。0120000100030000500000000020006ijv1212211253345522566A三元組順序表(續(xù))稀疏矩陣的定義稀疏矩陣還可用帶行索引的二元組表、十字鏈表等表示。#defineMAXSIZE12500typedefstruct{ inti,j; ElemTypee;}Triple;typedefstruct{ Tripledata[MAXSIZE+1]; intmu,nu,tu;}TSMatrix;矩陣的操作求矩陣的轉(zhuǎn)置ijv1212211253345522566ijv1212112252435523656A’求矩陣的轉(zhuǎn)置一個(gè)m×n的矩陣M,它的轉(zhuǎn)置T是一個(gè)n×m的矩陣,且a[i][j]=b[j][i],0≤i≤m,0≤j≤n,即M的行是T的列,M的列是T的行;算法思想對(duì)M中的每一列col(1≤col≤n),從頭至尾掃描三元表a.data;找出所有列號(hào)等于col的那些三元組,將它們的行號(hào)和列號(hào)互換后依次放入b.data中;即可得到T的按行優(yōu)先的壓縮存儲(chǔ)表示。求矩陣轉(zhuǎn)置的算法Voidtransmatrix(TSMatrixM,TSMatrix&T){ T.mu=M.nu;T.nu=M.mu;T.tu=M.tu;if(T.tu) {q=1;for(col=1;col<=M.nu;col++)for(p=1;p<=M.tu;p++) if(M.data[p].j==col) {T.data[q].i=M.data[p].j;T.data[q].j=M.data[p].i;T.data[q].e=M.data[p].e;q++;}}}算法的時(shí)間復(fù)雜度
O(nu*tu)快速轉(zhuǎn)置算法思路對(duì)M掃描一次,預(yù)先確定矩陣M中每一列的第一個(gè)非零元在T中的位置;對(duì)M進(jìn)行第二次掃描,由位置關(guān)系裝入三元組。算法實(shí)現(xiàn)附設(shè)num和cpot兩個(gè)向量:num[col]:表示矩陣M中第col列中非零元的個(gè)數(shù);cpot[col]:指示M中第col列的第一個(gè)非零元在b.data中的恰當(dāng)位置;cpot[1]=1;cpot[col]=cpot[col-1]+num[col-1] 2≤col≤a.nu
因三元組表是按行優(yōu)先排序的,故先確定轉(zhuǎn)置后矩陣各行的元素個(gè)數(shù),預(yù)留出位置再進(jìn)行轉(zhuǎn)置??焖俎D(zhuǎn)置的算法實(shí)現(xiàn)voidfasttranstri(TSMatrixM,TSMatrix&T){ T.mu=M.nu;T.nu=M.mu;T.tu=M.tu; if(T.tu) { for(col=1;col<=M.nu;++col)num[col]=0; for(t=1;t<=M.tu;++t)++num[M.data[t].j]; cpot[1]=1; for(col=2;col<=M.nu;++col) cpot[col]=cpot[col-1]+num[col-1]; for(p=1;p<=M.tu;++p) { col=M.data[p].j;q=cpot[col];T.data[q].i=M.data[p].j;T.data[q].j=M.data[p].i;T.data[q].e=M.data[p].e;++cpot[col];}}}算法的時(shí)間復(fù)雜度
O(mu*nu)5.4廣義表的定義廣義表又稱列表,其每一個(gè)元素的結(jié)構(gòu)都可能是不同的;是n(n≥0)個(gè)元素a1,a2,a3,…,an的有限序列,其中ai或者是原子項(xiàng),或者是一個(gè)廣義表;通常記作LS=(a1,a2,a3,…,an)LS是廣義表的名字,n為它的長(zhǎng)度。若ai是廣義表,則稱它為L(zhǎng)S的子表。第一個(gè)元素a1稱為表LS的表頭(head),由余下元素組成的表(a2,a3,...,an)稱為L(zhǎng)S的表尾(tail)。廣義表中括號(hào)的重?cái)?shù)稱為廣義表的深度。廣義表的定義(續(xù))廣義表舉例表長(zhǎng)表深表頭表尾A=()01--B=(a,A)=(a,())22a(())C=((a,b),c,d)32(a,b)(c,d)D=(a,D)=(a,(a,(a,…)))2
a(D)廣義表的圖形表達(dá)方法
A=(a,b)abAB=(A,c)BD=(a,D)aDL=(A,B)LABabcAabc表原子5.5廣義表的存儲(chǔ)結(jié)構(gòu)頭尾鏈表存儲(chǔ)結(jié)構(gòu)typedefenum{ATOM,LIST}ElemTag;typedefstructGLNode{ ElemTagtag; union{ AtomTypeatom; struct{ structGLNode*hp; /*表頭指針*/ structGLNode*tp; /*表尾指針*/ }ptr; };}*GList;tag=1hptp表結(jié)點(diǎn)tag=0data原子結(jié)點(diǎn)廣義表的頭尾鏈表存儲(chǔ)結(jié)構(gòu)示例A=()A-NIL11^^0a111^0c0d11^0a0b11^D0aB=(a,A)C=((a,b),c,d)D=(a,D)(A)(D)(a,b)(c,d)(d)(b)BC廣義表的存儲(chǔ)結(jié)構(gòu)(續(xù))擴(kuò)展線性鏈表存儲(chǔ)結(jié)構(gòu)typedefenum{ATOM,LIST}ElemTag;typedefstructGLNode{ ElemTagtag; union{ AtomTagatom; structGLNode*hp; /*表頭指針*/ }; structGLNode*tp; /*同一層的下一個(gè)結(jié)點(diǎn)*/}*GList;tag=0datatp原子結(jié)點(diǎn)tag=1hptp表結(jié)點(diǎn)廣義表的擴(kuò)展線性鏈表存儲(chǔ)示例A1^^1^0aA=()1^^BB=(a,A)C=((a,b),c,d)C1^10c0d^0a0b^1^DD=(a,D)0a1^aDaA(a,b)cdab5.6m元多項(xiàng)式的表示將m元多項(xiàng)式先分解成主變?cè)亩囗?xiàng)式可將其看作一元多項(xiàng)式每個(gè)系數(shù)則是m-1元多項(xiàng)式;利用此法可將m-1元多項(xiàng)式進(jìn)一步分解,直至每個(gè)系數(shù)為常數(shù)。作業(yè)求下列廣義表運(yùn)算的結(jié)果:
1、HEAD[((a,b),(c,d))]2、TAIL[((a,b),(c,d))]3、HEAD[TAIL[((a,b),(c,d))]] 4、TAIL[HEAD[((a,b),(c,d))]]5、HEAD[TAIL[HEAD[((a,b),(c,d))]]] 6、TAIL[HEAD[TAIL[((a,b),(c,d))]]]作業(yè)利用HEAD和TAIL運(yùn)算將下列廣義表中的原子c取出來(lái):
1、L1=(a,b,c,d)2、L2=((a,b),(c
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)加工印花合同范本
- 2025年中國(guó)新型動(dòng)力電池行業(yè)市場(chǎng)調(diào)研分析及投資戰(zhàn)略規(guī)劃報(bào)告
- 中國(guó)電網(wǎng)合同范例
- 刻字瓷像合同范本
- 買(mǎi)個(gè)合同范例
- 國(guó)開(kāi)電大《幼兒園課程論》形考任務(wù)三參考答案
- 出國(guó)勞務(wù)標(biāo)準(zhǔn)合同范本
- 青島市機(jī)動(dòng)車(chē)委托銷(xiāo)售合同范本
- 個(gè)人水果訂購(gòu)合同范本
- 免除責(zé)任合同范本
- 電子線檢驗(yàn)標(biāo)準(zhǔn)
- 建筑施工安全員理論考核試題與答案
- 人教版七年級(jí)歷史下冊(cè)教學(xué)計(jì)劃(及進(jìn)度表)
- 建筑工程節(jié)后復(fù)工自查表
- 華萊士標(biāo)準(zhǔn)化體系
- 快捷smt全自動(dòng)物料倉(cāng)儲(chǔ)方案
- keysight眼圖和抖動(dòng)噪聲基礎(chǔ)知識(shí)與測(cè)量方法
- TPU材料項(xiàng)目可行性研究報(bào)告寫(xiě)作參考范文
- 試用期考核合格證明表
- 鍋爐補(bǔ)給水陰陽(yáng)混床操作步序表
- 2005年第4季度北京住房租賃指導(dǎo)價(jià)格
評(píng)論
0/150
提交評(píng)論