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

下載本文檔

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

文檔簡介

數(shù)據(jù)結(jié)構(gòu)串和數(shù)組第一頁,共六十三頁,2022年,8月28日串(String)是由零個或多個字符組成的有限序列。一般記為: S='a1a2...an' (n≥0)其中,S是串的名,用單引號括起來的字符序列是串的值;ai(1≤i≤n)可以是字母、數(shù)字或其它字符,串中字符的數(shù)目n稱為串的長度。n=0的串稱為空串(nullstring)。3.6.1串的定義和串的存儲方式—概念第二頁,共六十三頁,2022年,8月28日串中任意個連續(xù)的字符組成的子序列稱為該串的子串。包含子串的串相應(yīng)地稱為主串。通常稱字符在序列中的序號為該字符在串中的位置。子串在主串中的位置則以子串的第一個字符在主串中的位置來表示。當(dāng)兩個串的長度相等,并且各個對應(yīng)位置上的字符都相等時,稱兩個串相等。3.6.1串的定義和串的存儲方式—概念第三頁,共六十三頁,2022年,8月28日例:串名為A、B、C、D的四個串如下:A='verygood'; 長度為9,是D的主串;B=''; 長度為3;C=''; 長度為0(空串);D='good'; 長度為4,是A的子串。D在A中的位置是6。3.6.1串的定義和串的存儲方式—概念第四頁,共六十三頁,2022年,8月28日

(1)賦值操作:StrAssign(S,chars)

初始條件:chars是字符串常量;

操作結(jié)果:生成一個值等于chars的字符串S;(2)插入操作:StrInsert(S,pos,T)

初始條件:字符串S、T存在, 1≤pos≤StrLength(S)+1;

操作結(jié)果:在字符串S的第pos個字符之前插入串T。3.6.1串的定義和串的存儲方式—基本操作第五頁,共六十三頁,2022年,8月28日(3)刪除操作:StrDelete(S,pos,len) 初始條件:字符串S存在, 1≤pos≤StrLength(S)-len+1; 操作結(jié)果:從字符串S中刪除第pos個字符起長度為len的子串。(4)復(fù)制操作:StrCopy(S,T) 初始條件:字符串S存在; 操作結(jié)果:將字符串S的內(nèi)容復(fù)制到串T。3.6.1串的定義和串的存儲方式—基本操作第六頁,共六十三頁,2022年,8月28日(5)判空操作:StrEmpty(S)

初始條件:字符串S存在;

操作結(jié)果:若S為空串,則返回TRUE,否則返回FALSE。(6)比較操作:StrCompare(S,T)

初始條件:字符串S、T存在;

操作結(jié)果:若S>T,則返回值>0;若S=T,則返回值=0;若S<T,則返回值<0。3.6.1串的定義和串的存儲方式—基本操作第七頁,共六十三頁,2022年,8月28日(7)求串長操作:StrLength(S) 初始條件:字符串S存在; 操作結(jié)果:返回字符串S的長度,即串S中字符的個數(shù)。(8)置空操作:StrClear(S) 初始條件:字符串S存在; 操作結(jié)果:將字符串S清為空串。3.6.1串的定義和串的存儲方式—基本操作第八頁,共六十三頁,2022年,8月28日(9)聯(lián)接操作:StrCat(S,T) 初始條件:字符串S、T存在; 操作結(jié)果:將字符串T的值連接在S的后面。(10)求子串操作:SubString(Sub,S,pos,len) 初始條件:字符串S存在, 1≤pos≤StrLength(S) 且1≤len≤StrLength(S)-pos+1; 操作結(jié)果:用Sub返回字符串S的第pos個字符開始長度為len的子串。3.6.1串的定義和串的存儲方式—基本操作第九頁,共六十三頁,2022年,8月28日(11)定位操作:StrIndex(S,pos,T) 初始條件:字符串S、T存在,T非空, 1≤pos≤StrLength(S); 操作結(jié)果:若字符串S中存在與T相等的子串,則返回它在字符串S中第pos個字符之后第一次出現(xiàn)的位置;否則返回0。(7)置換操作:StrReplace(S,T,V) 初始條件:字符串S、T、V存在,T非空; 操作結(jié)果:用V替換字符串S中出現(xiàn)的所有與T相等的不重疊的子串。3.6.1串的定義和串的存儲方式—基本操作第十頁,共六十三頁,2022年,8月28日(13)釋放操作:StrDestroy(S) 初始條件:字符串S存在; 操作結(jié)果:銷毀字符串S。3.6.1串的定義和串的存儲方式—基本操作第十一頁,共六十三頁,2022年,8月28日串的兩種基本存儲結(jié)構(gòu):順序存儲結(jié)構(gòu)和鏈?zhǔn)酱鎯Y(jié)構(gòu)。定長順序串:當(dāng)串的長度基本固定時,主要考慮采用順序存儲結(jié)構(gòu)實現(xiàn)。其C語言描述如下: #define

Maxlen

20 //串的最大長度 typedef

struct

{ //串的定義 charch[Maxlen]; intlen; //串的長度 }

Sstring;3.6.1串的定義和串的存儲方式—串的存儲結(jié)構(gòu)第十二頁,共六十三頁,2022年,8月28日在進(jìn)行串的插入時:插入位置pos將原字符串劃分為兩部分(分別假設(shè)為A和B,長度分別為LA和LB);待插入字符串假設(shè)為C,其長度為LC;插入過程可能出現(xiàn)下列三種情況:

1)插入后串的總長度為LA+LB+LC≤Maxlen;

2)插入后串的總長度>Maxlen,且pos+LC<Maxlen;3)插入后串的總長度>Maxlen,且pos+LC>Maxlen;3.6.2定長順序串運(yùn)算—插入算法分析第十三頁,共六十三頁,2022年,8月28日/*在串s中序號為pos的字符之前插入串t*/int

StrInsert(SString*s,intpos,SStringt){

int

i;if(pos<0||pos>s->len)

return(0); /*插入位置不合法*/

if(s->len+t.len<=Maxlen){

/*插入后串長≤Maxlen*/

for(i=s->len+t.len-1;i>=t.len+pos;i--) s->ch[i]=s->ch[i-t.len];for(i=0;i<t.len;i++)s->ch[i+pos]=t.ch[i];s->len=s->len+t.len;}3.6.2定長順序串運(yùn)算—插入算法實現(xiàn)第十四頁,共六十三頁,2022年,8月28日elseif(pos+t.len<=Maxlen){/*插入后串長>Maxlen,

但串t的字符序列可以全部插入*/

for(i=Maxlen-1;i>=t.len+pos;i--) s->ch[i]=s->ch[i-t.len];for(i=0;i<t.len;i++)s->ch[i+pos]=t.ch[i];s->len=Maxlen;}else{ /*串t的部分字符序列要舍棄*/

for(i=0;i<Maxlen-pos;i++)s->ch[i+pos]=t.ch[i];s->len=Maxlen;}return(1);}3.6.2定長順序串運(yùn)算—插入算法實現(xiàn)第十五頁,共六十三頁,2022年,8月28日intStrDelete(SString*s,intpos,intlen){if(pos<0||pos>(s->len-len))return(0);for(i=pos+len;i<s->len;i++) s->ch[i-len]=s->ch[i];s->len=s->len-len;return(1);}3.6.2定長順序串運(yùn)算—刪除算法實現(xiàn)第十六頁,共六十三頁,2022年,8月28日在進(jìn)行串的連接時:假設(shè)原字符串為A,長度為LA;待連接串假設(shè)為B,其長度為LB;連接過程可能出現(xiàn)下列三種情況:

1)連接后串的總長度為LA+LB≤Maxlen;

2)連接后串的總長度>Maxlen,且LA<Maxlen;3)連接后串的總長度>Maxlen,LA=Maxlen;3.6.2定長順序串運(yùn)算—連接算法分析第十七頁,共六十三頁,2022年,8月28日/*將串t連接在串s的后面*/int

StrCat(SString*s,SStringt){

int

i,flag;if(s->len+t.len<=Maxlen){

/*連接后串長≤Maxlen*/

for(i=s->len;i<s->len+t.len;i++) s->ch[i]=t.ch[i-s->len];s->len=s->len+t.len;flag=1;}3.6.2定長順序串運(yùn)算—連接算法實現(xiàn)第十八頁,共六十三頁,2022年,8月28日elseif(s->len<Maxlen){/*連接后串長>Maxlen,

但串s的長度<Maxlen*/

for(i=s->len;i<Maxlen;i++) s->ch[i]=t.ch[i-s->len];s->len=Maxlen;flag=0;}elseflag=0;/*串s的長度=Maxlen,串t不被連接*/return(flag);}3.6.2定長順序串運(yùn)算—連接算法實現(xiàn)第十九頁,共六十三頁,2022年,8月28日數(shù)組(array)可看成是線性表的推廣,是最常用的數(shù)據(jù)結(jié)構(gòu)之一。數(shù)組是有限個數(shù)組元素的集合,元素數(shù)目固定;數(shù)組的每個元素與一組下標(biāo)相對應(yīng),數(shù)組元素的下標(biāo)關(guān)系具有上下界的約束且下標(biāo)有序;數(shù)組中所有數(shù)組元素的數(shù)據(jù)類型必須一致;數(shù)組的兩種基本運(yùn)算:給定下標(biāo),存取相應(yīng)的數(shù)據(jù)元素;給定下標(biāo),修改相應(yīng)的數(shù)據(jù)元素。二維數(shù)組的結(jié)構(gòu)特點和存儲方式—定義第二十頁,共六十三頁,2022年,8月28日一個m行n列的二維數(shù)組(也稱為矩陣),記作A[m,n]。二維數(shù)組的結(jié)構(gòu)特點和存儲方式—定義A=a11a12...a1na21a22...a2n……am1am2...amn

第二十一頁,共六十三頁,2022年,8月28日按行優(yōu)先順序存儲 對于上述二維數(shù)組A而言,可以將其看成是由m個行向量組成的向量,即: Am×n=((a11,...,a1n),(a21,...,a2n),...,(am1,...,amn)) 這種行向量表相當(dāng)于一個線性表。 行優(yōu)先順序存儲就是數(shù)組元素按行向量表次序進(jìn)行存儲,即第i+1個行表緊跟在第i個行表后面進(jìn)行存儲。二維數(shù)組的結(jié)構(gòu)特點和存儲方式—存儲結(jié)構(gòu)第二十二頁,共六十三頁,2022年,8月28日 當(dāng)把n維數(shù)組的元素按行優(yōu)先順序地存放在存儲器里,則每個元素的存儲地址可以用公式計算出來。這個計算公式稱為“地址公式”。 假設(shè)每個數(shù)據(jù)元素占c個存儲單元,則上述二維數(shù)組Am×n的地址公式為: Loc(aij)=Loc(a11)+[(i-1)*n+(j-1)]*c (1≤i≤m,1≤j≤n)二維數(shù)組的結(jié)構(gòu)特點和存儲方式—存儲結(jié)構(gòu)第二十三頁,共六十三頁,2022年,8月28日按列優(yōu)先順序存儲 對于上述二維數(shù)組A而言,也可以將其看成是由n個列向量組成的向量,即: Am×n=((a11,...,am1),(a12,...,am2),...,(a1n,...,amn)) 這種列向量表也相當(dāng)于一個線性表。 列優(yōu)先順序存儲就是數(shù)組元素按列向量表次序進(jìn)行存儲,即第i+1個列表緊跟在第i個列表后面進(jìn)行存儲。二維數(shù)組的結(jié)構(gòu)特點和存儲方式—存儲結(jié)構(gòu)第二十四頁,共六十三頁,2022年,8月28日 當(dāng)把n維數(shù)組的元素按列優(yōu)先順序地存放在存儲器里,并假設(shè)每個數(shù)據(jù)元素占c個存儲單元,則上述二維數(shù)組Am×n的地址公式為: Loc(aij)=Loc(a11)+[(j-1)*m+(i-1)]*c (1≤i≤m,1≤j≤n)二維數(shù)組的結(jié)構(gòu)特點和存儲方式—存儲結(jié)構(gòu)第二十五頁,共六十三頁,2022年,8月28日 根據(jù)二維數(shù)組的特性可以推出:一個三維數(shù)組可以用其數(shù)據(jù)元素為二維數(shù)組的線性表來定義;依次類推,n維數(shù)組是由數(shù)據(jù)元素為n-1維數(shù)組的線性表構(gòu)成。 因此,對n維數(shù)組也有上述兩種不同順序分配的存儲結(jié)構(gòu)。當(dāng)把n維數(shù)組的元素這樣順序地存放在存儲器里,則每個元素的存儲地址都可以用“地址公式”計算出來。二維數(shù)組的結(jié)構(gòu)特點和存儲方式—存儲結(jié)構(gòu)第二十六頁,共六十三頁,2022年,8月28日在C語言中,可以把一個二維數(shù)組看作是一種特殊的一維數(shù)組,該一維數(shù)組的元素又是一個一維數(shù)組。例如定義:inta[3][4];其中,可以把a(bǔ)看作是一個一維數(shù)組,它有3個元素:a[0]、a[1]、a[2],每個元素又是一個包含4個元素的一維數(shù)組。二維數(shù)組的結(jié)構(gòu)特點和存儲方式—示例第二十七頁,共六十三頁,2022年,8月28日通常在實際計算中經(jīng)常出現(xiàn)一些階數(shù)很高的矩陣,且矩陣中有許多值相同的元素或者零元素。為了節(jié)省存儲空間,可以對這類矩陣進(jìn)行壓縮存儲。所謂壓縮存儲是指:為多個值相同的元素只分配一個存儲空間;對零元素不分配空間。二維數(shù)組的結(jié)構(gòu)特點—特殊矩陣的存儲方式第二十八頁,共六十三頁,2022年,8月28日下三角矩陣的存儲方式: 設(shè)下三角矩陣為An×n,滿足:二維數(shù)組的結(jié)構(gòu)特點—特殊矩陣的存儲方式A=a110?…0a21a22…0

……an1an2…ann

第二十九頁,共六十三頁,2022年,8月28日 若將其中的非零元素按行優(yōu)先順序存放為: 則一維數(shù)組Sa[k]和矩陣元素aij之間存在著一一對應(yīng)關(guān)系: (1≤j≤i≤n)二維數(shù)組的結(jié)構(gòu)特點—特殊矩陣的存儲方式k=+j第三十頁,共六十三頁,2022年,8月28日假設(shè)每個數(shù)據(jù)元素占用一個字節(jié)的存儲單元,則下三角矩陣的地址公式為:二維數(shù)組的結(jié)構(gòu)特點—特殊矩陣的存儲方式Loc(aij)=Loc(a11)+i(i?1)/2+(j?1)第三十一頁,共六十三頁,2022年,8月28日三對角矩陣的存儲方式: 設(shè)三對角矩陣為An×n,滿足:二維數(shù)組的結(jié)構(gòu)特點—特殊矩陣的存儲方式A=a11a12

0?………………0a21a22a230……………00

a32a33

a34

0…………0…………00……………an-1,n-2an-1,n-1an-1,n

00……………0an,n-1ann

第三十二頁,共六十三頁,2022年,8月28日 若將其中的非零元素按行優(yōu)先順序存放,假設(shè)每個數(shù)據(jù)元素占用一個字節(jié)的存儲單元,則三對角矩陣的地址公式為:二維數(shù)組的結(jié)構(gòu)特點—特殊矩陣的存儲方式Loc(aij)=Loc(a11)+2(i?1)+(j?1)

其中:i=1,j=1,2

或:i=n,j=n-1,n

或:1<i<n,j=i-1,i,i+1第三十三頁,共六十三頁,2022年,8月28日對稱矩陣的存儲方式: 解決方案類似于下三角矩陣的存儲。二維數(shù)組的結(jié)構(gòu)特點—特殊矩陣的存儲方式第三十四頁,共六十三頁,2022年,8月28日稀疏矩陣:

如果一個矩陣中大多數(shù)元素為零,非零元素較少且分布無一定規(guī)律,則稱之為稀疏矩陣。順序存儲:三元組表:線性表中的每個結(jié)點由三個字段組成,分別是該非零元素的行下標(biāo)、列下標(biāo)和值。二維數(shù)組的結(jié)構(gòu)特點—特殊矩陣的存儲方式第三十五頁,共六十三頁,2022年,8月28日 稀疏矩陣的C語言表示: #definesmax16 /*最大非零元素個數(shù)*/ typedefintdatatype; typedefstruct{ inti,j; /*行號,列號*/ datatypev; /*元素值*/ }node;二維數(shù)組的結(jié)構(gòu)特點—特殊矩陣的存儲方式第三十六頁,共六十三頁,2022年,8月28日 稀疏矩陣的C語言表示: typedefstruct{ intm,n,t; /*行數(shù),列數(shù),非零元素個數(shù)*/ nodedata[smax]; /*三元組表*/ }spmatrix; /*稀疏矩陣類型*/二維數(shù)組的結(jié)構(gòu)特點—特殊矩陣的存儲方式第三十七頁,共六十三頁,2022年,8月28日 稀疏矩陣舉例:非零元素按行優(yōu)先順序存儲。二維數(shù)組的結(jié)構(gòu)特點—特殊矩陣的存儲方式第三十八頁,共六十三頁,2022年,8月28日 該稀疏矩陣共有20個元素,僅有6個非零元素。其三元組表如下圖所示。二維數(shù)組的結(jié)構(gòu)特點—特殊矩陣的存儲方式m=4n=5t=6行號域列號域值域1015204831014123521-26306第三十九頁,共六十三頁,2022年,8月28日偽地址表示法: 偽地址是指本元素在矩陣中按行優(yōu)先順序的相對位置,上述稀疏矩陣A中非零元素為: {5,8,1,3,-2,6} 非零元素的偽地址=n*i+j,n為矩陣的列數(shù)。 因此,5的偽地址為1;1的偽地址為5;…。二維數(shù)組的結(jié)構(gòu)特點—特殊矩陣的存儲方式第四十頁,共六十三頁,2022年,8月28日稀疏矩陣的轉(zhuǎn)置運(yùn)算: 一般矩陣的轉(zhuǎn)置算法為: for(col=0;col<n;col++) for(row=0;row<m;row++) B[col][row]=A[row][col]; 由于稀疏矩陣含有大量的零元素,因此,其轉(zhuǎn)置算法修改為如下所示:二維數(shù)組的結(jié)構(gòu)特點—特殊矩陣的存儲方式第四十一頁,共六十三頁,2022年,8月28日spmatrixTRANSMAT(spmatrixa) /*返回稀疏矩陣A的轉(zhuǎn)置*/ {intano,bno,col;/*ano和bno分別指示a->data 和b->data中結(jié)點序號; col指示*a的列號,即*b的行號*/ pmatrix*b; /*存放轉(zhuǎn)置后的矩陣*/ b=malloc(sizeof(spmatrix)); b->m=a->n;b->n=a->m; /*行列數(shù)交換*/ b->t=a->t;二維數(shù)組的結(jié)構(gòu)特點—特殊矩陣的存儲方式第四十二頁,共六十三頁,2022年,8月28日 if(b->t>0) /*有非零元素,則轉(zhuǎn)置*/ {bno=0; for(col=0;col<a->n;col++)/*按*a的列序轉(zhuǎn)置*/ for(ano=0;ano<a->t;ano++) /*掃描整個三元組表*/ if(a->data[ano].j==col) /*列號為col則進(jìn)行置換*/ {b->data[bno].i=a->data[ano].j; b->data[bno].j=a->data[ano].i; b->data[bno].v=a->data[ano].v;二維數(shù)組的結(jié)構(gòu)特點—特殊矩陣的存儲方式第四十三頁,共六十三頁,2022年,8月28日 bno++; /*b->data結(jié)點序號加1*/ } } returnb; /*返回轉(zhuǎn)置結(jié)果指針*/} /*TRANSMAT*/二維數(shù)組的結(jié)構(gòu)特點—特殊矩陣的存儲方式第四十四頁,共六十三頁,2022年,8月28日該算法的時間主要耗費(fèi)在col和ano的二重循環(huán)上,若A的列數(shù)為n,非零元素個數(shù)為t,則執(zhí)行時間為O(nt),即與A的列數(shù)和非零元素個數(shù)的乘積成正比。而通常用二維數(shù)組表示矩陣時,其轉(zhuǎn)置算法的執(zhí)行時間是O(mn)。由于非零元素個數(shù)一般遠(yuǎn)遠(yuǎn)大于行數(shù),因此,上述稀疏矩陣轉(zhuǎn)置算法雖然節(jié)省了空間,但增加了轉(zhuǎn)置的時間。二維數(shù)組的結(jié)構(gòu)特點—特殊矩陣的存儲方式第四十五頁,共六十三頁,2022年,8月28日鏈?zhǔn)酱鎯Y(jié)構(gòu):帶行指針向量的單鏈表表示。 行指針向量 列值 ——>——> ——>——> ——> ——>二維數(shù)組的結(jié)構(gòu)特點—特殊矩陣的存儲方式1506^011-2^48^23^第四十六頁,共六十三頁,2022年,8月28日十字鏈表結(jié)構(gòu):二維數(shù)組的結(jié)構(gòu)特點—特殊矩陣的存儲方式第四十七頁,共六十三頁,2022年,8月28日設(shè)已知一個n×n的上三角矩陣X,其上三角元素已按行序為主序連續(xù)存放在數(shù)組Y中。請設(shè)計一個tran函數(shù),將數(shù)組Y中元素按列為主序連續(xù)存放在數(shù)組Z中。應(yīng)用實例—問題描述A=12?3

4

50

6

7

8

90

0

10

11

120

0

013140

0

0

0

15第四十八頁,共六十三頁,2022年,8月28日根據(jù)已知條件: Y=(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)期望得到的結(jié)果: Z=(1,2,6,3,7,10,4,8,11,13,5,9,12,14,15)解題思路:用i和j表示矩陣X中元素的行和列下標(biāo)。用k表示數(shù)組Y中元素的下標(biāo)。初始值設(shè)為:i=1,j=1,k=1;將y[k]=x[i,j]元素存放在z[j*(j-1)/2+i]中,且當(dāng)一行沒有結(jié)束時j++,否則i++并修改下一行元素的個數(shù)及i和j的值,直到k=n(n+1)/2為止。應(yīng)用實例—算法分析第四十九頁,共六十三頁,2022年,8月28日#include<stdio.h>#defineN5voidtran(inty[],intn,intz[]){ intk,step=n,count=0,i=0,j=0; for(k=0;k<n*(n+1)/2;k++){ count++; z[j*(j-1)/2+i]=y[k]; if(count==step){ step--; count=0; i++; j=i; } else j++; }}應(yīng)用實例—算法實現(xiàn)第五十頁,共六十三頁,2022年,8月28日main(){ intx[N][N],y[N*(N+1)/2],z[N*(N+1)/2]; inti,j,k=0,n=N; for(i=0;i<n;i++) for(j=0;j<n;j++) x[i][j]=0; printf(“pleaseinputnonzerodataofMatrix:\n); for(i=0;i<n;i++) for(j=i;j<n;j++) scanf(“%d”,&x[i][j]);應(yīng)用實例—算法實現(xiàn)第五十一頁,共六十三頁,2022年,8月28日 for(i=0;i<n;i++) for(j=0;j<n;j++) printf(“%4d”,x[i][j]); printf(“\n”); for(i=0;i<n;i++) for(j=i;j<n;j++){ y[k]=x[i][j]; k++; } for(i=0;i<n*(n+1)/2;i++) printf(“%4d”,y[i]); printf(“\n”); tran(y,n,z); for(i=0;i<n*(n+1)/2;i++) printf(“%4d”,z[i]); printf(“\n”);}應(yīng)用實例—算法實現(xiàn)第五十二頁,共六十三頁,2022年,8月28日[問題描述]輸入一個稀疏矩陣,要求:將其轉(zhuǎn)化為三元組的表示形式;在三元組存儲矩陣中查找值為x的結(jié)點,若x存在,則輸出其位置,否則輸出“不存在”提示信息。稀疏矩陣壓縮存儲方式和簡單運(yùn)算實例第五十三頁,共六十三頁,2022年,8月28日[算法描述]稀疏矩陣用二維數(shù)組A進(jìn)行存儲;三元組用結(jié)構(gòu)體B表示;將數(shù)組A中的非零元素及它所在的行、列下標(biāo)按行優(yōu)先順序存在到B中;在B中查找值為x的結(jié)點,若存在,則輸出其位置;否則輸出“不存在”提示信息。稀疏矩陣壓縮存儲方式和簡單運(yùn)算實例第五十四頁,共六十三頁,2022年,8月28日[C語言源程序]#include<stdio.h> #defineMax100 typedefintElemtype; typedefstruct{ inti,j; Elemtypev; }Pnode;稀疏矩陣壓縮存儲方式和簡單運(yùn)算實例第五十五頁,共六十三頁,2022年,8月28日 typedefstruct{ introws,cols,terms; Pnodedata[Max+1]; }PMatrix; PMatrixB;稀疏矩陣壓縮存儲方式和簡單運(yùn)算實例第五十六頁,共六十三頁,2022年,8月28日 voidcrt_matrix(intA[][Max],intm,intn){ inti,j,k=1; for(i=1;i<=m;i++) for(j=1;j<=n;j++) if(A[i][j]!=0){

溫馨提示

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

評論

0/150

提交評論