《數(shù)據(jù)結(jié)構(gòu)》第6章數(shù)組特殊矩陣和廣義表課件_第1頁(yè)
《數(shù)據(jù)結(jié)構(gòu)》第6章數(shù)組特殊矩陣和廣義表課件_第2頁(yè)
《數(shù)據(jù)結(jié)構(gòu)》第6章數(shù)組特殊矩陣和廣義表課件_第3頁(yè)
《數(shù)據(jù)結(jié)構(gòu)》第6章數(shù)組特殊矩陣和廣義表課件_第4頁(yè)
《數(shù)據(jù)結(jié)構(gòu)》第6章數(shù)組特殊矩陣和廣義表課件_第5頁(yè)
已閱讀5頁(yè),還剩53頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

王鋼主編清華大學(xué)出版社數(shù)據(jù)結(jié)構(gòu)王鋼主編數(shù)據(jù)結(jié)構(gòu)1第6章數(shù)組、特殊矩陣和廣義表數(shù)組的定義及其存儲(chǔ)特殊矩陣的壓縮存儲(chǔ)稀疏矩陣邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu)廣義表的邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu)數(shù)組和廣義表的操作應(yīng)用舉例第6章數(shù)組、特殊矩陣和廣義表數(shù)組的定義及其存儲(chǔ)2數(shù)組的定義及邏輯結(jié)構(gòu)

數(shù)組是由下標(biāo)和值組成的元素序列的集合。在數(shù)組中,一旦給定下標(biāo),都存在一個(gè)與其對(duì)應(yīng)的值,這個(gè)值稱為數(shù)組元素。在數(shù)組中通常做下面兩種操作:取值操作:給定一組下標(biāo),讀其對(duì)應(yīng)的數(shù)組元素。賦值操作:給定一組下標(biāo),存儲(chǔ)或修改與其相對(duì)應(yīng)的數(shù)據(jù)元素。數(shù)組的定義及邏輯結(jié)構(gòu)數(shù)組是由下標(biāo)和值組成的元素序列的集合。3例6.1若矩陣Am×n中存在某個(gè)元素aij滿足:aij是第i行中最小值且第j列中的最大值,則稱該元素為矩陣A的一個(gè)鞍點(diǎn)。試編寫一個(gè)算法,找出A中所有的鞍點(diǎn)。基本思路:在矩陣A中求出每一行的最小元素,然后判斷該元素是否是它所在列中的最大值,若是則打印出,接著處理下一行。矩陣A用二維數(shù)組表示。算法如下:例題例6.1若矩陣Am×n中存在某個(gè)元素aij滿足:aij4[算法6.1]求矩陣鞍點(diǎn)算法voidsaddle(intA[][],intm,intn){//m,n是矩陣A的行和列inti,j,k,min;for(i=0;i<m;i++){min=A[i][0];for(j=1;j<n;j++)if(A[i][j]<min)min=A[i][j];//找第i行最小值for(j=0;j<n;j++)//檢測(cè)該行中的每一個(gè)最小值是否是鞍點(diǎn)if(A[i][j]==min){k=j;p=0;while(p<m&&A[p][j]<=min)p++;if(p>=m)printf("%d%d%d",i,j,k);}//if}}[算法6.1]求矩陣鞍點(diǎn)算法5對(duì)稱矩陣的壓縮存儲(chǔ)

1.對(duì)稱矩陣若一個(gè)n階矩陣M中滿足下述性質(zhì):aij=aji0≤i,j≤n–1則稱為n階對(duì)稱矩陣。例如A矩陣是一個(gè)5階對(duì)稱矩陣,如圖6.5所示。2352936638562732378498341A=對(duì)稱矩陣的壓縮存儲(chǔ)1.對(duì)稱矩陣23529362.對(duì)稱矩陣的存儲(chǔ)a0,0a1,0a1,1a2,0…an-1,0an-1,n-1k值n(n+1)/2–10123第1行第2行第n行圖6.6對(duì)稱矩陣的壓縮存儲(chǔ)2.對(duì)稱矩陣的存儲(chǔ)a0,0a1,0a1,1a2,0…an-171.三角矩陣

82345a5671aa897aaa10aaaa8B=8000025000368004791051708C=圖6.7上三角矩陣及下三角矩陣1.三角矩陣

82345a56781.帶狀矩陣00a0,0a0,1a0,200a1,0a1,1a1,2a1,30a2,0a2,1a2,2a2,3a2,4

0a3,1a3,2a3,3a3,4

00a4,2a4,3a4,4D=b條b條圖6.8帶狀矩陣圖6.9半帶寬為2的5階帶狀矩陣1.帶狀矩陣00a0,0a0,1a0,209稀疏矩陣

16–15221123311155191346ijv1A=153000000220–151100060000000091000000000023414225670圖6.11稀疏矩陣圖6.12三元組表稀疏矩陣16–15221110三元組的類型定義:#defineSMAX1024//最大非零元素個(gè)數(shù)typedefstruct{inti,j;//非零所在行、列

Elemtypev;//非零元素的值}SPNode;//存儲(chǔ)非零元素的三元組結(jié)構(gòu)體類型typedefstruct{intmu,nu,tu;//矩陣的行、列及非零元素的實(shí)際個(gè)數(shù)SPNodedata[SMAX];//三元組表}SPMatrix;//稀疏矩陣的三元組表存儲(chǔ)類型三元組的類型定義:11稀疏矩陣的轉(zhuǎn)置159112113234122111561–15436ijv1234567B=150009100000000110000030000–15000002206000圖6.13A的轉(zhuǎn)置B圖6.14B的三元組算法思路:①A的行、列轉(zhuǎn)化成B的列、行;②在A.data中依次找第一列的、第二列的、直到最后一列,并將找到的每個(gè)三元組的行、列交換后順序存儲(chǔ)到B.data中即可。稀疏矩陣的轉(zhuǎn)算法6.2]稀疏矩陣的轉(zhuǎn)置算法SPMatrix*TransM1(SPMatrix*A){SPMatrix*B;intp,q,col;B=(SPMatrix*)malloc(sizeof(SPMatrix));B->mu=A->nu;B->nu=A->mu;B->tu=A->tu;if(B->tu>0){q=1;for(col=1;col<=(A->nu);col++)//按A的列序轉(zhuǎn)換for(p=1;p<=(A->tu);p++)//掃描整個(gè)三元組表

if(A->data[p].j==col){B->data[q].i==A->data[p].j;B->data[q].j=A->data[q].i;B->data[q].v=A->data[p].v;q++;}//if}//if(b->tu>0)returnB;//返回轉(zhuǎn)置后矩陣的指針}//TransM1[算法6.2]稀疏矩陣的轉(zhuǎn)置算法13稀疏矩陣的乘積稀疏矩陣的乘法運(yùn)算的粗略步驟如下:(1)初始化。清理一些單元,準(zhǔn)備按行順序存放乘積矩陣。(2)求B的num,rpot。(3)做矩陣乘法。將A.data中三元組的列值與B.data中三元組的行值相等的非零元素相乘,并將具有相同下標(biāo)的乘積元素相加。稀疏矩陣的乘積稀疏矩陣的乘法運(yùn)算的粗略步驟如下:14[算法6.3]稀疏矩陣的乘積算法

SPMatrix*MulSMatrix(SPMatrix*A,SPMatrix*B){//稀疏矩陣A(m1×n1)和B(m2×n2)用三元組表存儲(chǔ),求A×BSPMatrix*C;//乘積矩陣的指針intp,q,i,j,k,r;Elemtypetemp[n+1];intnum[B->nu+1],rpot[B->nu+1];if(A->nu!=B->mu)returnNULL;//A的列與B的行不相等C=(SPMatrix*)malloc(sizeof(SPMatrix));//申請(qǐng)C的存儲(chǔ)空間C->mu=A->mu;C->nu=A->nu;if(A->tu*B->tu==0){C->tu=0;returnC;}for(i=1;i<=B->mu;i++)num[i]=0;//求矩陣B中每一行非零元素的個(gè)數(shù)for(k=1;k<=B->tu;k++){

[算法6.3]稀疏矩陣的乘積算法15{i=B->data[k].i;num[i]++;}rpot[1]=1;//求矩陣B中每一行第一個(gè)非零元素在B.data中的位置for(i=2;i<=B->mu;i++)rpot[i]=rpot[i-1]+num[i-1];r=0;//當(dāng)前C中非零元素的位置p=1;for(i=1;i<=A->mu;i++){for(j=1;j<=B->nu;j++)temp[j]=0;//C累加器初始化while(A->data[p].i==i){k=A->data[p].j;if(k<B->mu)t=rpot[k+1];{16elset=B->tu+1;//確定B中第k行的非零元素在B.data中下限位置for(q=rpot[k];q<t;q++)//B中第k行的每一個(gè)非零元素{j=B->data[q].j;temp[j]+=A->data[p].v*B->data[q].v;}p++;}//whilefor(j=1;j<=B->nu;j++)if(temp[j]){r++;C->data[r]={i,j,temp[j]};}}//foriC->tu=r;returnC;}//MulSMtrixelse17廣義表的概念和特性1。定義:廣義表是n(n≥0)個(gè)元素有限序列,記作A=(a1,a2,a3,…,an)其中,A是廣義表的名稱,n是它的長(zhǎng)度,ai(1≤i≤n)或者是數(shù)據(jù)元素,或者是廣義表。顯然廣義表的定義是一個(gè)遞歸的定義,即廣義表中可以包含廣義表。

2。舉例(1)A=(),A是一個(gè)空表,其長(zhǎng)度為零。(2)B=(e),表B只有一個(gè)原子e,B的長(zhǎng)度為1。(3)C=(a,(b,c,d)),表C的長(zhǎng)度為2,兩個(gè)元素分別為原子a和子表(b,c,d)。(4)D=(A,B,C),列表D的長(zhǎng)度為3,3個(gè)元素都是列表。(5)E=(a,E),這是一個(gè)遞歸的表,其長(zhǎng)度為2,E是相當(dāng)于一個(gè)無窮表。廣義表的概念和特性1。定義:廣義表是n(n≥0)個(gè)元素有限181.頭尾表示法

圖6.18頭尾表示法的結(jié)點(diǎn)形式1.頭尾表示法圖6.18頭尾表示法的結(jié)點(diǎn)形式192.孩子兄弟表示法

圖6.20孩子兄弟表示法的結(jié)點(diǎn)形式2.孩子兄弟表示法

圖6.20孩子兄弟表示法的結(jié)點(diǎn)形式201.廣義表的基本運(yùn)算

Creat(LS):根據(jù)廣義表的書寫形式創(chuàng)建一個(gè)廣義表LS。IsEmpty(LS):若廣義表LS為空,則返回True;否則返回False。Length(LS):求廣義表的長(zhǎng)度。Depth(LS):求廣義表的深度。Locate(LS,x):在廣義表LS上查找數(shù)據(jù)元素x。Merage(LS1,LS2):復(fù)制廣義表,即按照LS1建立廣義表LS2。Head(LS):返回廣義表的頭部。Tail(LS):返回廣義表的尾部。1.廣義表的基本運(yùn)算

Creat(LS):根據(jù)廣義表的書寫形212.廣義表運(yùn)算的實(shí)現(xiàn)[算法6.4]廣義表的取頭算法GlistHead(Glist*ls){GLNode*p;p=NULL;if(ls->tag)p=ls->hp;returnp;}2.廣義表運(yùn)算的實(shí)現(xiàn)[算法6.4]廣義表的取頭算法22[算法6.5]廣義表的取尾算法GlistTail(Glistls){GLNode*p;p=NULL;if(ls->tag)p=ls->tp;returnp;}[算法6.5]廣義表的取尾算法23[算法6.6]建立廣義表的存儲(chǔ)結(jié)構(gòu)的算法intCreate(Glistls,char*s){GLNode*p,*q;char*sub,hsub;if(StrEmpty(s))*ls=NULL;else{(*ls)=(GLNode*)malloc(sizeof(GLNode));if(!(*ls))return0;if(Strlength(s)==1){(*ls)->tag=0;(*ls)->data=s;}else{(*ls)->tag=1;[算法6.6]建立廣義表的存儲(chǔ)結(jié)構(gòu)的算法24p=*ls;hsub=SubStr(s,2,StrLength(s)-2);do{sever(sub,hsub);Create(&(p->ptr.hp),sub);q=p;if(!StrEmpty(sub){p=(GLNode*)malloc(sizeof(GLNode));if(!p)return0;p->tag=1;q->ptr.tp=p;}}while(!StrEmpty(sub));q->ptr.tp=NULL;}}return1;}intsever(char*str,char*hstr){inti,k,n;p=*ls;25charch;n=StrLength(str));i=1;k=0;for(i=1,k=0;i<=n||k!=0;++i){ch=SubStr(str,i,1);if(ch==′(′)++k;elseif(ch==′)′)--k;}if(i<=n){hstr=SubStr(str,1,i-2);str=SubStr(str,i,n-i+1);}else{StrCopy(hstr,str);CreatStr(str);}}charch;26[算法6.7]以表頭、表尾建立廣義表算法intMerge(Glistls1,Glistls2,Glist*ls){(*ls)=malloc(sizeof(GLNode));if(!(*ls))return0;(*ls)->tag=1;(*ls)->hp=ls1;(*ls)->tp=ls2;return1;}[算法6.7]以表頭、表尾建立廣義表算法27[算法6.8]求廣義表的深度算法intDepth(Glistls){indep,max;Glistp;if(!ls)return1;//空表深度為1if(ls->tag==0)return0;//單元素深度為0for(max=0,p=ls;p;p=p->ptr.tp){dep=Depth(p->ptr.hp);//求以p->ptr.hp尾頭指針的子表深度if(dep>max)max=dep;}returnmax+1;//非空表的深度是各元素的深度的最大值加1}[算法6.8]求廣義表的深度算法28[算法6.9]復(fù)制廣義表算法intCopyGlist(Glistls1,Glist*ls2){if(!ls1)(*ls2)=NULL;else{(*ls2)=malloc(sizeof(GLNode));if(!(*ls2))return0;//建表頭結(jié)點(diǎn)(*ls2)->tag=ls1->tag;if(ls1->tag==0)(*ls2)->data=ls1->data;//復(fù)制單元素else{CopyGList(&((*ls2)->ptr.hp),ls1->ptr.hp);//復(fù)制廣義表ls1->ptr.hp的一個(gè)副本CopyGList(&((*ls2)->ptr.tp),ls1->ptr.tp);//復(fù)制廣義表ls1->ptr.tp的一個(gè)副本}}return1;}[算法6.9]復(fù)制廣義表算法29王鋼主編清華大學(xué)出版社數(shù)據(jù)結(jié)構(gòu)王鋼主編數(shù)據(jù)結(jié)構(gòu)30第6章數(shù)組、特殊矩陣和廣義表數(shù)組的定義及其存儲(chǔ)特殊矩陣的壓縮存儲(chǔ)稀疏矩陣邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu)廣義表的邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu)數(shù)組和廣義表的操作應(yīng)用舉例第6章數(shù)組、特殊矩陣和廣義表數(shù)組的定義及其存儲(chǔ)31數(shù)組的定義及邏輯結(jié)構(gòu)

數(shù)組是由下標(biāo)和值組成的元素序列的集合。在數(shù)組中,一旦給定下標(biāo),都存在一個(gè)與其對(duì)應(yīng)的值,這個(gè)值稱為數(shù)組元素。在數(shù)組中通常做下面兩種操作:取值操作:給定一組下標(biāo),讀其對(duì)應(yīng)的數(shù)組元素。賦值操作:給定一組下標(biāo),存儲(chǔ)或修改與其相對(duì)應(yīng)的數(shù)據(jù)元素。數(shù)組的定義及邏輯結(jié)構(gòu)數(shù)組是由下標(biāo)和值組成的元素序列的集合。32例6.1若矩陣Am×n中存在某個(gè)元素aij滿足:aij是第i行中最小值且第j列中的最大值,則稱該元素為矩陣A的一個(gè)鞍點(diǎn)。試編寫一個(gè)算法,找出A中所有的鞍點(diǎn)?;舅悸罚涸诰仃嘇中求出每一行的最小元素,然后判斷該元素是否是它所在列中的最大值,若是則打印出,接著處理下一行。矩陣A用二維數(shù)組表示。算法如下:例題例6.1若矩陣Am×n中存在某個(gè)元素aij滿足:aij33[算法6.1]求矩陣鞍點(diǎn)算法voidsaddle(intA[][],intm,intn){//m,n是矩陣A的行和列inti,j,k,min;for(i=0;i<m;i++){min=A[i][0];for(j=1;j<n;j++)if(A[i][j]<min)min=A[i][j];//找第i行最小值for(j=0;j<n;j++)//檢測(cè)該行中的每一個(gè)最小值是否是鞍點(diǎn)if(A[i][j]==min){k=j;p=0;while(p<m&&A[p][j]<=min)p++;if(p>=m)printf("%d%d%d",i,j,k);}//if}}[算法6.1]求矩陣鞍點(diǎn)算法34對(duì)稱矩陣的壓縮存儲(chǔ)

1.對(duì)稱矩陣若一個(gè)n階矩陣M中滿足下述性質(zhì):aij=aji0≤i,j≤n–1則稱為n階對(duì)稱矩陣。例如A矩陣是一個(gè)5階對(duì)稱矩陣,如圖6.5所示。2352936638562732378498341A=對(duì)稱矩陣的壓縮存儲(chǔ)1.對(duì)稱矩陣235293352.對(duì)稱矩陣的存儲(chǔ)a0,0a1,0a1,1a2,0…an-1,0an-1,n-1k值n(n+1)/2–10123第1行第2行第n行圖6.6對(duì)稱矩陣的壓縮存儲(chǔ)2.對(duì)稱矩陣的存儲(chǔ)a0,0a1,0a1,1a2,0…an-1361.三角矩陣

82345a5671aa897aaa10aaaa8B=8000025000368004791051708C=圖6.7上三角矩陣及下三角矩陣1.三角矩陣

82345a567371.帶狀矩陣00a0,0a0,1a0,200a1,0a1,1a1,2a1,30a2,0a2,1a2,2a2,3a2,4

0a3,1a3,2a3,3a3,4

00a4,2a4,3a4,4D=b條b條圖6.8帶狀矩陣圖6.9半帶寬為2的5階帶狀矩陣1.帶狀矩陣00a0,0a0,1a0,2038稀疏矩陣

16–15221123311155191346ijv1A=153000000220–151100060000000091000000000023414225670圖6.11稀疏矩陣圖6.12三元組表稀疏矩陣16–15221139三元組的類型定義:#defineSMAX1024//最大非零元素個(gè)數(shù)typedefstruct{inti,j;//非零所在行、列

Elemtypev;//非零元素的值}SPNode;//存儲(chǔ)非零元素的三元組結(jié)構(gòu)體類型typedefstruct{intmu,nu,tu;//矩陣的行、列及非零元素的實(shí)際個(gè)數(shù)SPNodedata[SMAX];//三元組表}SPMatrix;//稀疏矩陣的三元組表存儲(chǔ)類型三元組的類型定義:40稀疏矩陣的轉(zhuǎn)置159112113234122111561–15436ijv1234567B=150009100000000110000030000–15000002206000圖6.13A的轉(zhuǎn)置B圖6.14B的三元組算法思路:①A的行、列轉(zhuǎn)化成B的列、行;②在A.data中依次找第一列的、第二列的、直到最后一列,并將找到的每個(gè)三元組的行、列交換后順序存儲(chǔ)到B.data中即可。稀疏矩陣的轉(zhuǎn)算法6.2]稀疏矩陣的轉(zhuǎn)置算法SPMatrix*TransM1(SPMatrix*A){SPMatrix*B;intp,q,col;B=(SPMatrix*)malloc(sizeof(SPMatrix));B->mu=A->nu;B->nu=A->mu;B->tu=A->tu;if(B->tu>0){q=1;for(col=1;col<=(A->nu);col++)//按A的列序轉(zhuǎn)換for(p=1;p<=(A->tu);p++)//掃描整個(gè)三元組表

if(A->data[p].j==col){B->data[q].i==A->data[p].j;B->data[q].j=A->data[q].i;B->data[q].v=A->data[p].v;q++;}//if}//if(b->tu>0)returnB;//返回轉(zhuǎn)置后矩陣的指針}//TransM1[算法6.2]稀疏矩陣的轉(zhuǎn)置算法42稀疏矩陣的乘積稀疏矩陣的乘法運(yùn)算的粗略步驟如下:(1)初始化。清理一些單元,準(zhǔn)備按行順序存放乘積矩陣。(2)求B的num,rpot。(3)做矩陣乘法。將A.data中三元組的列值與B.data中三元組的行值相等的非零元素相乘,并將具有相同下標(biāo)的乘積元素相加。稀疏矩陣的乘積稀疏矩陣的乘法運(yùn)算的粗略步驟如下:43[算法6.3]稀疏矩陣的乘積算法

SPMatrix*MulSMatrix(SPMatrix*A,SPMatrix*B){//稀疏矩陣A(m1×n1)和B(m2×n2)用三元組表存儲(chǔ),求A×BSPMatrix*C;//乘積矩陣的指針intp,q,i,j,k,r;Elemtypetemp[n+1];intnum[B->nu+1],rpot[B->nu+1];if(A->nu!=B->mu)returnNULL;//A的列與B的行不相等C=(SPMatrix*)malloc(sizeof(SPMatrix));//申請(qǐng)C的存儲(chǔ)空間C->mu=A->mu;C->nu=A->nu;if(A->tu*B->tu==0){C->tu=0;returnC;}for(i=1;i<=B->mu;i++)num[i]=0;//求矩陣B中每一行非零元素的個(gè)數(shù)for(k=1;k<=B->tu;k++){

[算法6.3]稀疏矩陣的乘積算法44{i=B->data[k].i;num[i]++;}rpot[1]=1;//求矩陣B中每一行第一個(gè)非零元素在B.data中的位置for(i=2;i<=B->mu;i++)rpot[i]=rpot[i-1]+num[i-1];r=0;//當(dāng)前C中非零元素的位置p=1;for(i=1;i<=A->mu;i++){for(j=1;j<=B->nu;j++)temp[j]=0;//C累加器初始化while(A->data[p].i==i){k=A->data[p].j;if(k<B->mu)t=rpot[k+1];{45elset=B->tu+1;//確定B中第k行的非零元素在B.data中下限位置for(q=rpot[k];q<t;q++)//B中第k行的每一個(gè)非零元素{j=B->data[q].j;temp[j]+=A->data[p].v*B->data[q].v;}p++;}//whilefor(j=1;j<=B->nu;j++)if(temp[j]){r++;C->data[r]={i,j,temp[j]};}}//foriC->tu=r;returnC;}//MulSMtrixelse46廣義表的概念和特性1。定義:廣義表是n(n≥0)個(gè)元素有限序列,記作A=(a1,a2,a3,…,an)其中,A是廣義表的名稱,n是它的長(zhǎng)度,ai(1≤i≤n)或者是數(shù)據(jù)元素,或者是廣義表。顯然廣義表的定義是一個(gè)遞歸的定義,即廣義表中可以包含廣義表。

2。舉例(1)A=(),A是一個(gè)空表,其長(zhǎng)度為零。(2)B=(e),表B只有一個(gè)原子e,B的長(zhǎng)度為1。(3)C=(a,(b,c,d)),表C的長(zhǎng)度為2,兩個(gè)元素分別為原子a和子表(b,c,d)。(4)D=(A,B,C),列表D的長(zhǎng)度為3,3個(gè)元素都是列表。(5)E=(a,E),這是一個(gè)遞歸的表,其長(zhǎng)度為2,E是相當(dāng)于一個(gè)無窮表。廣義表的概念和特性1。定義:廣義表是n(n≥0)個(gè)元素有限471.頭尾表示法

圖6.18頭尾表示法的結(jié)點(diǎn)形式1.頭尾表示法圖6.18頭尾表示法的結(jié)點(diǎn)形式482.孩子兄弟表示法

圖6.20孩子兄弟表示法的結(jié)點(diǎn)形式2.孩子兄弟表示法

圖6.20孩子兄弟表示法的結(jié)點(diǎn)形式491.廣義表的基本運(yùn)算

Creat(LS):根據(jù)廣義表的書寫形式創(chuàng)建一個(gè)廣義表LS。IsEmpty(LS):若廣義表LS為空,則返回True;否則返回False。Length(LS):求廣義表的長(zhǎng)度。Depth(LS):求廣義表的深度。Locate(LS,x):在廣義表LS上查找數(shù)據(jù)元素x。Merage(LS1,LS2):復(fù)制廣義表,即按照LS1建立廣義表LS2。Head(LS):返回廣義表的頭部。Tail(LS):返回廣義表的尾部。1.廣義表的基本運(yùn)算

Creat(LS):根據(jù)廣義表的書寫形502.廣義表運(yùn)算的實(shí)現(xiàn)[算法6.4]廣義表的取頭算法GlistHead(Glist*ls){GLNode*p;p=NULL;if(ls->tag)p=ls->hp;returnp;}2.廣義表運(yùn)算的實(shí)現(xiàn)[算法6.4]廣義表的取頭算法51[算法6.5]廣義表的取尾算法GlistTail(Glistls){GLNode*p;p=NULL;if(ls->tag)p=ls->tp;returnp;}[算法6.5]廣義表的取尾算法52[算法6.6]建立廣義表的存儲(chǔ)結(jié)構(gòu)的算法intCreate(Glistls,char*s){GLNode*p,*q;char*sub,hsub;if(StrEmpty(s))*ls=NULL;else{(*ls)=(GLNode*)malloc(sizeof(GLNode));if(!(*ls))return0;if(Strlength(s)==1){(*ls)->tag=0;(*ls)->data=s;}else{(*ls)->tag=1;[算法6.6]建立廣義表的存儲(chǔ)結(jié)構(gòu)的算法53p=*ls;hsub=SubStr(s,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論