清華數(shù)據(jù)結(jié)構(gòu)習(xí)題集答案(C語言版嚴(yán)蔚敏)_第1頁
清華數(shù)據(jù)結(jié)構(gòu)習(xí)題集答案(C語言版嚴(yán)蔚敏)_第2頁
清華數(shù)據(jù)結(jié)構(gòu)習(xí)題集答案(C語言版嚴(yán)蔚敏)_第3頁
清華數(shù)據(jù)結(jié)構(gòu)習(xí)題集答案(C語言版嚴(yán)蔚敏)_第4頁
清華數(shù)據(jù)結(jié)構(gòu)習(xí)題集答案(C語言版嚴(yán)蔚敏)_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、清華數(shù)據(jù)結(jié)構(gòu)習(xí)題集答案(C語言版嚴(yán)蔚敏)第1章緒論簡述下列術(shù)語:數(shù)據(jù),數(shù)據(jù)元素、數(shù)據(jù)對(duì)象、數(shù)據(jù)結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)、數(shù)據(jù)類型和抽象數(shù)據(jù)類型。解:數(shù)據(jù)是對(duì)客觀事物的符號(hào)表示。在計(jì)算機(jī)科學(xué)中是指所有能輸入到計(jì)算機(jī)中并被計(jì)算機(jī)程序處理的符號(hào)的總稱。數(shù)據(jù)元素是數(shù)據(jù)的基本單位,在計(jì)算機(jī)程序中通常作為一個(gè)整體進(jìn)行考慮和處理。數(shù)據(jù)對(duì)象是性質(zhì)相同的數(shù)據(jù)元素的集合,是數(shù)據(jù)的一個(gè)子集。數(shù)據(jù)結(jié)構(gòu)是相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。存儲(chǔ)結(jié)構(gòu)是數(shù)據(jù)結(jié)構(gòu)在計(jì)算機(jī)中的表示。數(shù)據(jù)類型是一個(gè)值的集合和定義在這個(gè)值集上的一組操作的總稱。抽象數(shù)據(jù)類型是指一個(gè)數(shù)學(xué)模型以及定義在該模型上的一組操作。是對(duì)一般數(shù)據(jù)類型的擴(kuò)展。試描

2、述數(shù)據(jù)結(jié)構(gòu)和抽象數(shù)據(jù)類型的概念與程序設(shè)計(jì)語言中數(shù)據(jù)類型概念的區(qū)別。解:抽象數(shù)據(jù)類型包含一般數(shù)據(jù)類型的概念,但含義比一般數(shù)據(jù)類型更廣、更抽象。一般數(shù)據(jù)類型由具體語言系統(tǒng)內(nèi)部定義,直接提供給編程者定義用戶數(shù)據(jù),因此稱它們?yōu)轭A(yù)定義數(shù)據(jù)類型。抽象數(shù)據(jù)類型通常由編程者定義,包括定義它所使用的數(shù)據(jù)和在這些數(shù)據(jù)上所進(jìn)行的操作。在定義抽象數(shù)據(jù)類型中的數(shù)據(jù)部分和操作部分時(shí),要求只定義到數(shù)據(jù)的邏輯結(jié)構(gòu)和操作說明,不考慮數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)和操作的具體實(shí)現(xiàn),這樣抽象層次更高,更能為其他用戶提供良好的使用接口。設(shè)有數(shù)據(jù)結(jié)構(gòu)(D,R),其中Dd1,d2,d3,d4,Rr,rd1,d2,d2,d3,d3,d4試按圖論中圖的畫法

3、慣例畫出其邏輯結(jié)構(gòu)圖(有理數(shù)是其分子、分母均為自re 和 im試仿照三元組的抽象數(shù)據(jù)類型分別寫出抽象數(shù)據(jù)類型復(fù)數(shù)和有理數(shù)的定義然數(shù)且分母不為零的分?jǐn)?shù))解:ADTComplex數(shù)據(jù)對(duì)象:D=r,i|r,i為實(shí)數(shù)數(shù)據(jù)關(guān)系:R=<r,i>基本操作:InitComplex(&C,re,im)操作結(jié)果:構(gòu)造一個(gè)復(fù)數(shù)C,其實(shí)部和虛部分別為DestroyCmoplex(&C)操作結(jié)果:銷毀復(fù)數(shù)CGet(C,k,&e)操作結(jié)果:用e返回復(fù)數(shù)C的第k元的值Put(&C,k,e)操作結(jié)果:改變復(fù)數(shù)C的第k元的值為eIsAscending(C)操作結(jié)果:如果復(fù)數(shù)C的兩個(gè)元

4、素按升序排列,則返回1,否則返回0IsDescending(C)操作結(jié)果:如果復(fù)數(shù)C的兩個(gè)元素按降序排列,則返回1,否則返回0Max(C,&e)操作結(jié)果:用e返回復(fù)數(shù)C的兩個(gè)元素中值較大的一個(gè)Min(C,&e)操作結(jié)果:用e返回復(fù)數(shù)C的兩個(gè)元素中值較小的一個(gè)ADTComplexADTRationalNumber數(shù)據(jù)對(duì)象:D=s,m|s,m為自然數(shù),且m不為0數(shù)據(jù)關(guān)系:R=<s,m>基本操作:InitRationalNumber(&R,s,m)操作結(jié)果:構(gòu)造一個(gè)有理數(shù)R,其分子和分母分別為s和mDestroyRationalNumber(&R)操作結(jié)果

5、:銷毀有理數(shù)RGet(R,k,&e)操作結(jié)果:用e返回有理數(shù)R的第k元的值Put(&R,k,e)操作結(jié)果:改變有理數(shù)R的第k元的值為eIsAscending(R)操作結(jié)果:若有理數(shù)R的兩個(gè)元素按升序排列,則返回1,否則返回0IsDescending(R)操作結(jié)果:若有理數(shù)R的兩個(gè)元素按降序排列,則返回1,否則返回0Max(R,&e)操作結(jié)果:用e返回有理數(shù)R的兩個(gè)元素中值較大的一個(gè)Min(R,&e)操作結(jié)果:用e返回有理數(shù)R的兩個(gè)元素中值較小的一個(gè)ADTRationalNumber試畫出與下列程序段等價(jià)的框圖。(1) product=1;i=1;while(i&

6、lt;=n)product*=i;i+;(2) i=0;doi+;while(i!=n)&&(ai!=x);(3) switchcasex<y:z=y-x;break;casex=y:z=abs(x*y);break;default:z=(x-y)/abs(x)*abs(y);在程序設(shè)計(jì)中,常用下列三種不同的出錯(cuò)處理方式:(1) 用exit語句終止執(zhí)行并報(bào)告錯(cuò)誤;(2) 以函數(shù)的返回值區(qū)別正確返回或錯(cuò)誤返回;(3) 設(shè)置一個(gè)整型變量的函數(shù)參數(shù)以區(qū)別正確返回或某種錯(cuò)誤返回。試討論這三種方法各自的優(yōu)缺點(diǎn)。解:(1)exit常用于異常錯(cuò)誤處理,它可以強(qiáng)行中斷程序的執(zhí)行,返回操作

7、系統(tǒng)。(2)以函數(shù)的返回值判斷正確與否常用于子程序的測試,便于實(shí)現(xiàn)程序的局部控制。(3)用整型函數(shù)進(jìn)行錯(cuò)誤處理的優(yōu)點(diǎn)是可以給出錯(cuò)誤類型,便于迅速確定錯(cuò)誤。在程序設(shè)計(jì)中,可采用下列三種方法實(shí)現(xiàn)輸出和輸入:(1) 通過scanf和printf語句;(2) 通過函數(shù)的參數(shù)顯式傳遞;(3) 通過全局變量隱式傳遞。試討論這三種方法的優(yōu)缺點(diǎn)。(4) (1)用scanf和printf直接進(jìn)行輸入輸出的好處是形象、直觀,但缺點(diǎn)是需要對(duì)其進(jìn)行格式控制,較為煩瑣,如果出現(xiàn)錯(cuò)誤,則會(huì)引起整個(gè)系統(tǒng)的崩潰。(2)通過函數(shù)的參數(shù)傳遞進(jìn)行輸入輸出,便于實(shí)現(xiàn)信息的隱蔽,減少出錯(cuò)的可能。(3)通過全局變量的隱式傳遞進(jìn)行輸入輸出

8、最為方便,只需修改變量的值即可,但過多的全局變量使程序的維護(hù)較為困難。設(shè)n為正整數(shù)。試確定下列各程序段中前置以記號(hào)的語句的頻度:(1) i=1;k=0;while(i<=n-1)k+=10*i;i+;(2) i=1;k=0;dok+=10*i;i+;while(i<=n-1);(3) i=1;k=0;while(i<=n-1)i+;k+=10*i;(4) k=0;for(i=1;i<=n;i+)for(j=i;j<=n;j+)k+;(5) for(i=1;i<=n;i+)for(j=1;j<=i;j+)for(k=1;k<=j;k+)x+=del

9、ta;(6) i=1;j=0;while(i+j<=n)if(i>j)j+;elsei+;(7) x=n; y=0;+1=n(n 1)2(5) 1+(1+2)+(1+2+3)+(1+2+3+n)=i(i 1)2ni(ii 11)n(i2i 1i)2i1 .= n(n 12(6) n1)(2n11) -n(n1)n(n 121)(2n 3)(7) Vn向下取整(8) 1100假設(shè)n為2的乘嘉,并且n>2,試求下列算法的時(shí)間復(fù)雜度及變量count的值(以n的函數(shù)形式表示)。intTime(intn)count=0;x=2;while(x<n/2)x*=2;count+;re

10、turncount;解:o(log2n)count=log2n2已知有實(shí)現(xiàn)同一功能的兩個(gè)算法,其時(shí)間復(fù)雜度分別為O2n和On10,假設(shè)現(xiàn)實(shí)計(jì)算機(jī)可連續(xù)運(yùn)算510次。試問在此條件下,這兩個(gè)算法可解問題的規(guī)模(即n值的范圍)各為多少哪個(gè)算法更適宜請(qǐng)說明理由。解:2n 1012n=401012n 10n=16的時(shí)間為107秒(100多天),又每秒可執(zhí)行基本操作(根據(jù)這些操作來估算算法時(shí)間復(fù)雜度)則對(duì)于同樣的循環(huán)次數(shù)n,在這個(gè)規(guī)模下,第二種算法所花費(fèi)的代價(jià)要大得多。故在這個(gè)規(guī)模下,第一種算法更適宜。設(shè)有以下三個(gè)函數(shù):一424335fn21nn1000,gn15n500n,hn500nnlogn請(qǐng)判斷以

11、下斷言正確與否:(1) f(n)是O(g(n)(2) h(n)是O(f(n)(3) g(n)是O(h(n)(4) h(n)是O(5) h(n)是O(nlogn)解:對(duì)(2)錯(cuò)(3)錯(cuò)(4)對(duì)(5)錯(cuò)22試設(shè)定若干n值,比較兩函數(shù)n2和50nlog2n的增長趨勢,并確定n在什么范圍內(nèi),函數(shù)n2的值大于50nlog2n的值。2一.斛:n的增長趨勢快。但在n較小的時(shí)候,50nlog2n的值較大。,一,2當(dāng)n>438時(shí),n50nlog2n判斷下列各對(duì)函數(shù)fn和gn,當(dāng)n時(shí),哪個(gè)函數(shù)增長更快2n3_4_(1) fn10nlnn!10,gn2nn722.5(2) fnlnn!5,gn13n(3) f

12、nn2.1Vn41,gnlnn!2nn3on2n25(4) fn22,gnnn解:(1)g(n)快(2)g(n)快(3)f(n)快(4)f(n)快試用數(shù)學(xué)歸納法證明:n,2,一,一一(1) inn12n1/6n0i1nin1(2) xx1/x1x1,n0i0ni1n(3) 221n11 1n2(4)2i1nn12 1試寫一算法,自大至小依次輸出順序讀入的三個(gè)整數(shù)X,丫和Z的值解:intmax3(intx,inty,intz)if(x>y)if(x>z)returnx;elsereturnz;elseif(y>z)returny;elsereturnz;已知k階斐波那契序列的定

13、義為f00 , fi 0 ,,fk 20, fk 11;fn 1 fn 2fn k,n k,k 1,試編寫求k階斐波那契序列的第m項(xiàng)值的函數(shù)算法,k和m均以值調(diào)用的形式在函數(shù)參數(shù)表中出現(xiàn)。解:k>0為階數(shù),n為數(shù)列的第n項(xiàng)intFibonacci(intk,intn)if(k<1)exit(OVERFLOW);int*p,x;p=newintk+1;if(!p)exit(OVERFLOW);inti,j;for(i=0;i<k+1;i+)if(i<k-1)pi=0;elsepi=1;for(i=k+1;i<n+1;i+)x=p0;for(j=0;j<k;j+

14、)pj=pj+1;pk=2*pk-1-x;returnpk;假設(shè)有A,B,C,D,E五個(gè)高等院校進(jìn)行田徑對(duì)抗賽,各院校的單項(xiàng)成績均已存入計(jì)算機(jī),并構(gòu)成一張表,表中每一行的形式為項(xiàng)目名稱性別校名成績得分編寫算法,處理上述表格,以統(tǒng)計(jì)各院校的男、女總分和團(tuán)體總分,并輸出解:typedefenumA,B,C,D,ESchoolName;typedefenumFemale,MaleSexType;typedefstructcharevent3;chool=sn)if(ai.sex=Male)+=ai.score;if(ai.sex=Female)+=ai.score;=+;returntemp;試編寫

15、算法,計(jì)算i!*2i的值并存入數(shù)組a0.arrsize-1的第i-1個(gè)分量中(i=1,2,n)。假設(shè)計(jì)算機(jī)中允許的整數(shù)最大值為maxint,則當(dāng)n>arrsize或?qū)δ硞€(gè)k1kn,使k!?2kmaxint時(shí),應(yīng)按出錯(cuò)處理。注意選擇你認(rèn)為較好的出錯(cuò)處理方法。解:#include<>#include<>#defineMAXINT65535#defineArrSize100intfun(inti);intmain()inti,k;intaArrSize;cout<<"Enterk:"cin>>k;if(k>ArrSize

16、-1)exit(0);for(i=0;i<=k;i+)if(i=0)ai=1;elseif(2*i*ai-1>MAXINT)exit(0);elseai=2*i*ai-1;for(i=0;i<=k;i+)if(ai>MAXINT)exit(0);elsecout<<ai<<""return0;n試編寫算法求一元多項(xiàng)式的值Pnxaixi的值Pnx0,并確定算法中每一語句的執(zhí)行次數(shù)和整i0個(gè)算法的時(shí)間第雜度。注意選擇你認(rèn)為較好的輸入和輸出方法。本題的輸入為aii0,1,n,x0和n,輸出為PnX0。解:#include<&g

17、t;#include<>#defineN10doublepolynomail(inta,inti,doublex,intn);intmain()doublex;intn,i;intaN;cout<<"輸入變量的值x:"cin>>x;cout<<"輸入多項(xiàng)式的階次n:"cin>>n;if(n>N-1)exit(0);cout<<"輸入多項(xiàng)式的系數(shù)a0-an:"for(i=0;i<=n;i+)cin>>ai;cout<<"

18、Thepolynomailvalueis"<<polynomail(a,n,x,n)<<endl;return0;doublepolynomail(inta,inti,doublex,intn)if(i>0)returnan-i+polynomail(a,i-1,x,n)*x;elsereturnan;本算法的時(shí)間復(fù)雜度為o(n)。第2章線性表描述以下三個(gè)概念的區(qū)別:頭指針,頭結(jié)點(diǎn),首元結(jié)點(diǎn)(第一個(gè)元素結(jié)點(diǎn))。解:頭指針是指向鏈表中第一個(gè)結(jié)點(diǎn)的指針。首元結(jié)點(diǎn)是指鏈表中存儲(chǔ)第一個(gè)數(shù)據(jù)元素的結(jié)點(diǎn)。頭結(jié)點(diǎn)是在首元結(jié)點(diǎn)之前附設(shè)的一個(gè)結(jié)點(diǎn),該結(jié)點(diǎn)不存儲(chǔ)數(shù)據(jù)元素,其

19、指針域指向首元結(jié)點(diǎn),其作用主要是為了方便對(duì)鏈表的操作。它可以對(duì)空表、非空表以及首元結(jié)點(diǎn)的操作進(jìn)行統(tǒng)一處理。填空題。解:(1)在順序表中插入或刪除一個(gè)元素,需要平均移動(dòng)表中一半元素,具體移動(dòng)的元素個(gè)數(shù)與元素在表中的位置有關(guān)。(2)順序表中邏輯上相鄰的元素的物理位置必定緊鄰。單鏈表中邏輯上相鄰的元素的物理位置不一定緊鄰。(3)在單鏈表中,除了首元結(jié)點(diǎn)外,任一結(jié)點(diǎn)的存儲(chǔ)位置由其前驅(qū)結(jié)點(diǎn)的鏈域的值指示。(4)在單鏈表中設(shè)置頭結(jié)點(diǎn)的作用是插入和刪除首元結(jié)點(diǎn)時(shí)不用講行特殊處理。在什么情況下用順序表比鏈表好解:當(dāng)線性表的數(shù)據(jù)元素在物理位置上是連續(xù)存儲(chǔ)的時(shí)候,用順序表比用鏈表好,其特點(diǎn)是可以進(jìn)行隨機(jī)存取。對(duì)以

20、下單鏈表分別執(zhí)行下列各程序段,并畫出結(jié)果示意圖L-AJJ*lp*1 Q16TS畫出執(zhí)行下列各行語句后各指針及鏈表的示意圖。L=(LinkList)malloc(sizeof(LNode); P=L;for(i=1;i<=4;i+)P->next=(LinkList)malloc(sizeof(LNode);P=P->next; P->data=i*2-1;P->next=NULL;for(i=4;i>=1;i-) Ins_LinkList(L,i+1,i*2);for(i=1;i<=3;i+) Del_LinkList(L,i);解:F已知L是無表頭結(jié)

21、點(diǎn)的單鏈表,且P結(jié)點(diǎn)既不是首元結(jié)點(diǎn),也不是尾元結(jié)點(diǎn),試從下列提供的答案中選擇合適的語句序列。a.在P結(jié)點(diǎn)后插入S結(jié)點(diǎn)的語句序列是。b.在P結(jié)點(diǎn)前插入S結(jié)點(diǎn)的語句序列是。c.在表首插入S結(jié)點(diǎn)的語句序列是。d.在表尾插入S結(jié)點(diǎn)的語句序列是。(1) P->next=S;(2) P->next=P->next->next;(3) P->next=S->next;(4) S->next=P->next;(5) S->next=L;(6) S->next=NULL;(7) Q=P;(8) while(P->next!=Q)P=P->n

22、ext;(9) while(P->next!=NULL)P=P->next;(10) P=Q;(11) P=L;(12) L=S;(13) L=P;解:a.(4)(1)b. (7)(11)(8)(4)(1)c. (5)(12)d. (9)(1)(6)已知L是帶表頭結(jié)點(diǎn)的非空單鏈表,且P結(jié)點(diǎn)既不是首元結(jié)點(diǎn),也不是尾元結(jié)點(diǎn),試從下列提供的答案中選擇合適的語句序列。a.刪除P結(jié)點(diǎn)的直接后繼結(jié)點(diǎn)的語句序列是。b.刪除P結(jié)點(diǎn)的直接前驅(qū)結(jié)點(diǎn)的語句序列是。c.刪除P結(jié)點(diǎn)的語句序列是。d.刪除首元結(jié)點(diǎn)的語句序列是。e. 刪除尾元結(jié)點(diǎn)的語句序列是。(1) P=P->next;(2) P->

23、;next=P;(3) P->next=P->next->next;(4) P=P->next->next;(5) while(P!=NULL)P=P->next;(6) while(Q->next!=NULL)P=Q;Q=Q->next;(7) while(P->next!=Q)P=P->next;(8) while(P->next->next!=Q)P=P->next;(9) while(P->next->next!=NULL)P=P->next;(10) Q=P;(11) Q=P->ne

24、xt;(12) P=L;(13) L=L->next;(14) free(Q);解:a.(11)(3)(14)b. (10)(12)(8)(3)(14)c. (10)(12)(7)(3)(14)d. (12)(11)(3)(14)e. (9)(11)(3)(14)P結(jié)點(diǎn)是某雙向鏈表的中間結(jié)點(diǎn),試從下列提供的答案中選擇合適的語句序列。a. 在P結(jié)點(diǎn)后插入S結(jié)點(diǎn)的語句序列是。b. 在P結(jié)點(diǎn)前插入S結(jié)點(diǎn)的語句序列是。c. 刪除P結(jié)點(diǎn)的直接后繼結(jié)點(diǎn)的語句序列是。d. 刪除P結(jié)點(diǎn)的直接前驅(qū)結(jié)點(diǎn)的語句序列是e. 刪除P結(jié)點(diǎn)的語句序列是。(1) P->next=P->next->ne

25、xt;(2) P->priou=P->priou->priou;(3) P->next=S;(4) P->priou=S;(5) S->next=P;(6) S->priou=P;(7) S->next=P->next;(8) S->priou=P->priou;(9) P->priou->next=P->next;(10) P->priou->next=P;(11) P->next->priou=P;(12) P->next->priou=S;(13) P->prio

26、u->next=S;(14) P->next->priou=P->priou;(15) Q=P->next;(16) Q=P->priou;(17) free(P);(18) free(Q);解:a.(7)(3)(6)(12)b. (8)(4)(5)(13)c. (15)(1)(11)(18)d.(16)(2)(10)(18)e.(14)(9)(17)簡述以下算法的功能。StatusA(LinkedListL) Aa1,, am Bb1, ,bn ABABA B A BABA B A B a1, ,anan, ,a1Aa1,a2, ,am Bbi ,b2,

27、,bnCa1 ,b1,am,bm,bm 1, ,bn m n Ca1,b1,an,bn,an,am m nLa1,a2, ,an La1,a3, ,an,a4,a2 .,an)改造為(a1,a3,an,a2)StatusListChange_DuL(DuLinkList&L)inti;DuLinkListp,q,r;p=L->next;r=L->pre;i=1;while(p!=r)if(i%2=0)q=p;p=p->next;e1_ e2R x C|Xc2xemCmxemem 1ei0Ci 0 i 1,2, ,mm 1 R x0 x0PxPn1 xPn2xpRpnp

28、jpkpipj pk pi pj pk pipipj pkRpkpi2n1olor;Push(s,g);while(!StackEmpty(s)Pop(s,e);CurPos=;g町Color=FillColor;g町Visited=1;if<M&&!g+1肛Visited&&g+1口.Color=OldColor)Push(s,g+1;if>0&&!g肛Visited&&g口口.Color=OldColor)Push(s,g;if<N&&!g+1.Visited&&g口+1.Co

29、lor=OldColor)Push(s,g口+1);if>0&&!g肛Visited&&g口口.Color=OldColor)Push(s,g;voidCreateGDS(ElemTypegMN)inti,j;for(i=0;i<M;i+)for(j=0;j<N;j+)gij.=i;gij.=j;gij.Visited=0;gij.Color=0;for(i=2;i<5;i+)for(j=2;j<4;j+)g叩.Color=3;for(i=5;i<M-1;i+)for(j=3;j<6;j+)gij.Color=3;voi

30、dShowGraphArray(ElemTypegMN)inti,j;for(i=0;i<M;i+)for(j=0;j<N;j+)cout<<gij.Color;cout<<endl;假設(shè)表達(dá)式有單字母變量和雙目四則運(yùn)算符構(gòu)成。試寫一個(gè)算法,將一個(gè)通常書寫形式且書寫正確的表達(dá)式轉(zhuǎn)換為逆波蘭表達(dá)式。解:.#格式voidInversePolandExpression(charBuffer)Stacks;InitStack(s);inti=0,j=0;ElemTypee;Push(s,Bufferi);i+;while(Bufferi!='#')0

31、mQn0if(!IsOperator(Bufferi)gm,n'gm1,2nnmQn0n 1n0n F n2n0pp2AesqrtA,p,esqrtA,1p%e,Aeakm m,nakm m 1,1m 0,n 0fn maxfn 1 maxakm m 1,akm m,n 1m 0, n 01a(a 1)i(i 1)k b k ni (n j) - 1 i 1 j 1 i2211 2j f1(i) (n -)i -i2f (j) jc (n 1)|i j 10 k 3n 1s(n) s(n 1) ans(n 1)a1 (n 1)d add(a, b)aadd(a,b)總共需進(jìn)行n-k次交

32、換。注意最后一組可能出現(xiàn)不足k個(gè)元素的情況,此時(shí)最后一組為剩余元素加第一組的前幾個(gè)元素共k個(gè)構(gòu)成最后一組。voidRRMove(ElemTypeA口,intk,intn)ElemTypee;inti=0,j,p;while(i<n-k)p=i/k+1;for(j=0;j<k;j+)e=Aj;Aj=A(p*k+j)%n;A(p*k+j)%n=e;i+;解:#include<>#defineRS4#defineCS4typedefintElemType;typedefstructElemTypee;inti,j;intFlags;NodeType;voidInitializ

33、e(NodeTypeaRSCS,ElemTypeARSCS);voidSaddlePoint(NodeTypeaRSCS);ElemTypeRowMin(NodeTypeaRSCS,intk);ElemTypeColMax(NodeTypeaRSCS,intk);voidShow(NodeTypeaRSCS);intmain()ElemTypeARSCS=2,1,3,4,1,3,1,2,2,7,1,3,3,2,4,1;NodeTypeaRSCS;Initialize(a,A);SaddlePoint(a);Show(a);return0;voidInitialize(NodeTypeaRSCS

34、,ElemTypeARSCS)inti,j;for(i=0;i<RS;i+)for(j=0;j<CS;j+)aij.e=Aij;aij.i=i;aij.j=j;aij.Flags=0;voidSaddlePoint(NodeTypeaRSCS)inti,j;ElemTypex,y;for(i=0;i<RS;i+)x=RowMin(a,i);for(j=0;j<CS;j+)y=ColMax(a,j);if(aij.e=x&&aij.e=y)aij.Flags=1;ElemTypeRowMin(NodeTypeaRSCS,intk)ElemTypex;x=a

35、k0.e;inti;for(i=1;i<CS;i+)if(x>aki.e)x=aki.e;returnx;ElemTypeColMax(NodeTypeaRSCS,intk)ElemTypex;x=a0k.e;inti;for(i=1;i<RS;i+)if(x<aik.e)x=aik.e;returnx;voidShow(NodeTypeaRSCS)for(inti=0;i<RS;i+)for(intj=0;j<CS;j+)if(aij.Flags)cout<<i<<""<<j<<"

36、;isasaddlepoint"<<endl;解:typedefintElemType;classTriplepublic:introw;intcol;ElemTypee;Triple()virtualTriple()BOOLoperator<(Tripleb);BOOLoperator=(Tripleb);BOOLTriple:operator<(Tripleb)if(row<returnTRUE;if(row=&&col<returnTRUE;returnFALSE;BOOLTriple:operator=(Tripleb)if

37、(row=&&col=returnTRUE;elsereturnFALSE;classCSparseMatpublic:CSparseMat()virtualCSparseMat()CSparseMat(intr,intc,intn);CSparseMatoperator+(CSparseMatB);voidShowSparse(CDC*pDC);Triple*m_pt;ow=;m_pti.col=;m_pti.e=;void CSparseMat:ShowSparse(CDC *pDC)charstr10;intk=0;for(inti=0;i<m_nRow;i+)fo

38、r(intj=0;j<m_nCol;j+)if(m_ptk.row=i&&m_ptk.col=j)itoa(m_ptk.e,str,10);k+;elseitoa(0,str,10);pDC->TextOut(0+j*20,0+i*20,str,strlen(str);ow=m_pti.row;k.col=m_pti.col;k.e=m_pti.e;i+;elseif(m_pti=j)k.row=m_pti.row;k.col=m_pti.col;k.e=m_pti.e+j.e;i+;j+;elsek.row=j.row;k.col=j.col;k.e=j.e;j+

39、;k+;while(i<m_nTrs)k.row=m_pti.row;k.col=m_pti.col;k.e=m_pti.e;i+;k+;while(j<k.row=j.row;k.col=j.col;k.e=j.e;j+;k+;=k;returntemp;解:#include<>#include<>#defineMax128typedefintElemType;typedefstructintcol;ElemTypee;Twin;classCSparseMatpublic:CSparseMat()CSparseMat(intr,intc,intn);virtualCSparseMat()vo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論