【正文】
(a)(b)ABCEFGD48281523933AEBCDFG12515843:: int visited[MAXSIZE]。因?yàn)閡在深度優(yōu)先生成樹上是v的子樹,即存在u到v的路徑,現(xiàn)在又出現(xiàn)一條從u指向v的弧,則它們必然構(gòu)成一條回路。 }}習(xí)題7一、選擇題1. C 2. D 3. A 4. B 5. B 6. D 7. A 8. D 9. C 10. C 11. D 12. C二、簡答題1. 對(duì)于無向圖,如果在深度優(yōu)先遍歷中遇到回邊,則必定存在環(huán)。 else { Level(p,blchild,h,lh+1)。 }}: void Level(BiTree b,BiTree p, int *h,int lh){ if (b==NULL) *h=0。 // 如果T為空,則其深度為0 else { // 若T不空返回其子樹中深度較大值加1 if ( Depth(Tlchild) = Depth(Trchild)) return Depth(Tlchild)+1。 free(T)。否則其雙親結(jié)點(diǎn)的編號(hào)為(i+m2)/m(4)編號(hào)為i的結(jié)點(diǎn)的第j個(gè)孩子結(jié)點(diǎn)(若有)的編號(hào)為i*m+(j(m1))522329101356231415784. 解:: void Release(BiTree T){ if (T!=NULL){ Release(Tlchild)。反例為:abab先序序列ab,后序序列ba可對(duì)應(yīng)兩棵二叉樹。}習(xí)題6一、選擇題1. C 2. B 3. A 4. A 5. B 6. B 7. D 8. C 9. A 10. D二、設(shè)計(jì)題1.答案略。i++) s=s*A[3i][i]。 for(i=0。i4。 s=1。j4。i4。 int i,s。 /*累加第二條對(duì)角線之和*/ printf(s=%d\n,s)。in。i++) s=s+A[i][i]。 for(i=0。 if(m!=n) printf(m!=n)。 /*跳過一行*/ } printf(s=%d\n,s)。 j=j+2。 while(im) { j=0。}void proc2(matrix A) /*第(2)題解*/{ int s=0,i,j。 s=sA[0][0]A[0][n1]A[m1][0]A[m1][n1]。jm。j++) /*第一行*/ s=s+A[1][j]。 for(j=0。im。i++) /*第一列*/ s=s+A[i][1]。 for(i=0。稀疏存儲(chǔ)的原則是只存儲(chǔ)非零元。壓縮存儲(chǔ)的原則是:對(duì)多個(gè)值相同的元素只存儲(chǔ)一次,對(duì)零元素甚至不分配存儲(chǔ)空間。而列序優(yōu)先存儲(chǔ)即為:依次按順序存儲(chǔ)第1列,第2列,……直到最后一列的所有元素存儲(chǔ)完畢為止。 return OK。 k。 if ( != ) return ERROR。 } return flag。 else i++。j++。j++。!flag){ j=1。 while(iS1[0]amp。}5. 答:Status SubString(String S1,String S2){ int i,j,k,flag=0。 // 將S中從下標(biāo)從pos+len開始的元素前移len位 S[0]=S[0]len。 if (i1 || iS[0]|| jS[0]) // 非法情況的處理 return ERROR。S,int i,int j){ int len。另一種方法是用動(dòng)態(tài)內(nèi)存分配的方法定義的數(shù)組,數(shù)組元素的個(gè)數(shù)是在程序運(yùn)行時(shí)用戶申請(qǐng)確定的,稱之為動(dòng)態(tài)順序存儲(chǔ)。3. 答:在串的順序存儲(chǔ)結(jié)構(gòu)是用一維數(shù)組存放串中的字符。就是兩個(gè)不同的概念,因?yàn)樵诖鎯?chǔ)時(shí)串的結(jié)尾通常加上串結(jié)束標(biāo)志39。例如,串a(chǎn)和字符39。串是長度不確定的字符序列,而字符只是一個(gè)字符。例如 ,其長度為串中空格的個(gè)數(shù)。}習(xí)題4一、選擇題1. B 2. D 3. B 4. D 5. A 二、簡答題1. 答:長度為零的串稱為空串,記作。 push(S,y)。 push(T,x)。 InitStack(T)。}