(最新整理)2016廣工AnyView數(shù)據(jù)結構第1-5章答案_第1頁
(最新整理)2016廣工AnyView數(shù)據(jù)結構第1-5章答案_第2頁
(最新整理)2016廣工AnyView數(shù)據(jù)結構第1-5章答案_第3頁
(最新整理)2016廣工AnyView數(shù)據(jù)結構第1-5章答案_第4頁
(最新整理)2016廣工AnyView數(shù)據(jù)結構第1-5章答案_第5頁
已閱讀5頁,還剩62頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案編輯整理:尊敬的讀者朋友們:這里是精品文檔編輯中心,本文檔內容是由我和我的同事精心編輯整理后發(fā)布的,發(fā)布之前我們對文中內容進行仔細校對,但是難免會有疏漏的地方,但是任然希望((完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案)的內容能夠給您的工作和學習帶來便利。同時也真誠的希望收到您的建議和反饋,這將是我們進步的源泉,前進的動力。本文可編輯可修改,如果覺得對您有幫助請收藏以便隨時查閱,最后祝您生活愉快業(yè)績進步,以下為(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案的全部內容。(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案/**********【題目】試寫一算法,如果三個整數(shù)a,b和c的值不是依次非遞增的,則通過交換,令其為非遞增.***********/voidDescend(int&a,int&b,int&c)/*通過交換,令a〉=b>=c*/{if(c〈=b&&b〈=a)return;else{if(a〈b)swap(a,b);if(a<c)swap(a,c);if(b〈c)swap(b,c);}}voidswap(int&a,int&b){inttemp;temp=a;a=b;b=a;}/**********

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案【題目】試編寫算法求一元多項式P(x)=a0+a1x+a2x^2+。..+anx^n的值P(x0),并確定算法中每一語句的執(zhí)行次數(shù)和整個算法的時間復雜度.**********/floatPolynomial(intn,inta[],floatx)/*求一元多項式的值P(x)。*//*數(shù)組a的元素a[i]為i次項的系數(shù),i=0,..。,n*/{floatanswer=a[0];floattemp=1。0;for(inti=1;i<=n;i++){temp*=x;answer+=a[i]*temp;}returnanswer;}/**********【題目】已知k階裴波那契序列的定義為f(0)=0,f(1)=0,.。.,f(k—2)=0,f(k—1)=1;f(n)=f(n—1)+f(n—2)+.。。+f(n—k),n=k,k+1,。。。試編寫求k階裴波那契序列的第m項值的函數(shù)算法,

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案k和m均以值調用的形式在函數(shù)參數(shù)表中出現(xiàn)。**********/StatusFibonacci(intk,intm,int&f)/*求k階斐波那契序列的第m項的值f*/{if(k<=1||m<0)returnERROR;elseif(m==k-1)f=1;elseif(m==0)f=0;else{inti,j,sum;int*t;t=(int*)malloc(m*sizeof(int));for(i=0;i〈=k—2;i++)t[i]=0;t[k—1]=1;for(i=k;i<=m;i++){sum=0;for(j=i-k;j〈=i;j++)sum+=t[j];t[i]=sum;

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案}f=t[m];}returnOK;}/**********【題目】試編寫算法,計算i!×2^i的值并存入數(shù)組a[0..n-1]的第i-1個分量中(i=1,2,…,n)。假設計算機中允許的整數(shù)最大值為MAXINT,則當對某個k(1≤k≤n)使k!×2^k>MAXINT時,應按出錯處理。注意選擇你認為較好的出錯處理方法。**********/StatusSeries(inta[],intn)/*求i!*2^i序列的值并依次存入長度為n的數(shù)組a;*//*若所有值均不超過MAXINT,則返回OK,否則OVERFLOW*/{intt=1,p=1;for(inti=1;i〈=n;i++){t*=i;p*=2;a[i—1]=t*p;if(a[i—1]〉MAXINT)

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案returnERROR;}returnOK;}/**********【題目】假設有A、B、C、D、E五個高等院校進行田徑對抗賽,各院校的單項成績均以存入計算機并構成一張表,表中每一行的形式為:項目名稱性別校名成績得分編寫算法,處理上述表格,以統(tǒng)計各院校的男、女總分和團體總分,并輸出.**********/voidScores(ResultType*result,ScoreType*score)/*求各校的男、女總分和團體總分,并依次存入數(shù)組score*//*假設比賽結果已經儲存在result[]數(shù)組中,*//*并以特殊記錄{"”,male,'’,"”,0}(域scorce=0)*//*表示結束*/{inti=0;while(result[i]。sport!=NULL){switch(result[i]。schoolname){

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案case'A’:score[0].totalscore+=result[i].score;if(result[i]。gender==male)score[0].malescore+=result[i].score;elsescore[0]。femalescore+=result[i].score;break;case'B’:score[1].totalscore+=result[i].score;if(result[i]。gender==male)score[1].malescore+=result[i].score;elsescore[1].femalescore+=result[i]。score;break;case'C’:score[2].totalscore+=result[i].score;if(result[i]。gender==male)score[2]。malescore+=result[i].score;elsescore[2]。femalescore+=result[i]。score;break;case'D’:score[3]。totalscore+=result[i].score;if(result[i].gender==male)score[3]。malescore+=result[i].score;elsescore[3].femalescore+=result[i].score;break;case'E':score[4]。totalscore+=result[i]。score;if(result[i].gender==male)score[4].malescore+=result[i].score;else

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案score[4].femalescore+=result[i].score;break;}i++;}}/**********【題目】試寫一算法,對序列S的第i個元素賦以值e。序列的類型定義為:typedefstruct{ElemType*elem;intlength;}Sequence;***********/StatusAssign(Sequence&S,inti,ElemTypee)/*對序列S的第i個元素賦以值e,并返回OK.*//*若S或i不合法,則賦值失敗,返回ERROR*/{if(S。length〈1||i>S.length)returnERROR;elseS。elem[i]=e;returnOK;}

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案/**********【題目】試寫一算法,由長度為序列的類型定義為:typedefstruct{n的一維數(shù)組a構建一個序列S。ElemType*elem;intlength;}Sequence;***********/StatusCreateSequence(Sequence&S,intn,ElemType*a)/*由長度為n的一維數(shù)組a構建一個序列S,并返回OK.*//*若構建失敗,則返回ERROR*/{if(n<1)returnERROR;else{S。elem=(ElemType*)malloc(n*sizeof(ElemType));S。elem[0]=a[0];for(inti=1;i〈n;i++)S。elem[i]=a[i];S.length=n;}returnOK;

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案}/**********【題目】鏈表的結點和指針類型定義如下typedefstructLNode{ElemTypedata;structLNode*next;}LNode,*LinkList;試寫一函數(shù),構建一個值為x的結點。***********/LinkListMakeNode(ElemTypex)/*構建一個值為x的結點,并返回其指針。/*若構建失敗,則返回*/*/NULL。{LNode*p;p=(LNode*)malloc(sizeof(LNode));if(p==NULL)returnNULL;elsep—>data=x;returnp;}/**********【題目】鏈表的結點和指針類型定義如下

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案typedefstructLNode{ElemTypedata;structLNode*next;}LNode,*LinkList;試寫一函數(shù),構建長度為2且兩個結點的值依次為x和y的鏈表。**********/LinkListCreateLinkList(ElemTypex,ElemTypey)/*構建其兩個結點的值依次為x和y的鏈表。*//*若構建失敗,則返回NULL。*/{LNode*p;p=(LNode*)malloc(sizeof(LNode));if(p==NULL)returnNULL;else{p—〉next=(LNode*)malloc(sizeof(LNode));if(p—〉next==NULL)returnNULL;p—>data=x;p—>next-〉data=y;p—〉next—>next=NULL;}returnp;

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案}/**********【題目】鏈表的結點和指針類型定義如下typedefstructLNode{ElemTypedata;structLNode*next;}LNode,*LinkList;試寫一函數(shù),構建長度為2的升序鏈表,兩個結點的值分別為x和y,但應小的在前,大的在后.**********/LinkListCreateOrdLList(ElemTypex,ElemTypey)/*構建長度為2的升序鏈表。*//*若構建失敗,則返回NULL。*/{LNode*p;p=(LNode*)malloc(sizeof(LNode));if(p==NULL)returnNULL;else{p-〉next=(LNode*if(p-〉next==NULL)returnNULL;)malloc(sizeof(LNode));

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案p—>data=(x<y)?x:y;p-〉next—〉data=(x>y)?x:y;p—>next—〉next=NULL;}returnp;}/**********【題目】試寫一算法,實現(xiàn)順序棧的判空操作StackEmpty_Sq(SqStackS)。順序棧的類型定義為:typedefstruct{ElemType*elem;//存儲空間的基址inttop;//棧頂元素的下一個位置,簡稱棧頂位標//當前分配的存儲容量intsize;intincrement;//擴容時,增加的存儲容量}SqStack;//順序棧***********/StatusStackEmpty_Sq(SqStackS)/*對順序棧S判空。*//*若S是空棧,則返回TRUE;否則返回FALSE*/{if(S.top==0)returnTRUE;

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案returnFALSE;}/**********【題目】試寫一算法,實現(xiàn)順序棧的取棧頂元素操作GetTop_Sq(SqStackS,ElemType&e)。順序棧的類型定義為:typedefstruct{ElemType*elem;//存儲空間的基址inttop;//棧頂元素的下一個位置,簡稱棧頂位標//當前分配的存儲容量intsize;intincrement;//擴容時,增加的存儲容量}SqStack;//順序棧***********/StatusGetTop_Sq(SqStackS,ElemType&e)/*取順序棧S的棧頂元素到e,并返回OK;*//*若失敗,則返回ERROR.{*/if(S。top==0)returnERROR;e=S.elem[S.top—1];returnOK;}/**********

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案【題目】試寫一算法,實現(xiàn)順序棧的出棧操作Pop_Sq(SqStack&S,ElemType&e)。順序棧的類型定義為:typedefstruct{ElemType*elem;//存儲空間的基址inttop;//棧頂元素的下一個位置,簡稱棧頂位標intsize;intincrement;//擴容時,增加的存儲容量}SqStack;//順序棧//當前分配的存儲容量***********/StatusPop_Sq(SqStack&S,ElemType&e)/*順序棧S的棧頂元素出棧到e,并返回OK;*//*若失敗,則返回ERROR。*/{if(S.top==0)returnERROR;e=S。elem[——S。top];returnOK;}/**********【題目】若順序棧的類型重新定義如下。試編寫算法,構建初始容量和擴容增量分別為size和inc的空順序棧S。typedefstruct{

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案ElemType*elem;//存儲空間的基址ElemType*top;//棧頂元素的下一個位置intsize;//當前分配的存儲容量intincrement;//擴容時,增加的存儲容量}SqStack2;***********StatusInitStack_Sq2(SqStack2&S,intsize,intinc)/*構建初始容量和擴容增量分別為size和inc的空順序棧/S。*//*若成功,則返回OK;否則返回ERROR。{*/S.elem=(ElemType*)malloc(sizeof(ElemType));if(S.elem==NULL||size〈=0||inc<=0)returnERROR;S。top=S。elem;S。size=size;S。increment=inc;returnOK;}/**********【題目】若順序棧的類型重新定義如下。試編寫算法,實現(xiàn)順序棧的判空操作。typedefstruct{ElemType*elem;//存儲空間的基址

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案ElemType*top;//棧頂元素的下一個位置intsize;//當前分配的存儲容量intincrement;//擴容時,增加的存儲容量}SqStack2;***********/StatusStackEmpty_Sq2(SqStack2S)S判空*//*對順序棧。/*若S是空棧,則返回TRUE;否則返回FALSE*/{if(S。top==S.elem)returnTRUE;returnFALSE;}/**********【題目】若順序棧的類型重新定義如下。試編寫算法,實現(xiàn)順序棧的入棧操作。typedefstruct{ElemType*elem;//存儲空間的基址ElemType*top;//棧頂元素的下一個位置intsize;//當前分配的存儲容量intincrement;//擴容時,增加的存儲容量}SqStack2;***********/

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案StatusPush_Sq2(SqStack2&S,ElemTypee)/*若順序棧S是滿的,則擴容,若失敗則返回ERROR.*//*將e壓入S,返回OK.{*/ElemType*p;if(S。top-S.elem>S。size){p=(ElemType*)realloc(S.elem,(S.size+S。increment)*sizeof(ElemType));if(p==NULL)returnERROR;S。elem=p;S.size+=S.increment;}*(S。top++)=e;returnOK;}/**********【題目】若順序棧的類型重新定義如下。試編寫算法,實現(xiàn)順序棧的出棧操作。typedefstruct{ElemType*elem;//存儲空間的基址ElemType*top;//棧頂元素的intsize;//當前分配的下一個位置存儲容量

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案intincrement;//擴容時,增加的存儲容量}SqStack2;***********/StatusPop_Sq2(SqStack2&S,ElemType&e)/*若順序棧S是空的,則返回ERROR;*//*否則將S的棧頂元素出棧到e,返回OK。*/{if(S。elem==S.top)returnERROR;e=*(-—S.top);returnOK;}/**********【題目】試寫一算法,借助輔助棧,復制順序棧S1得到S2.順序棧的類型定義為:typedefstruct{ElemType*elem;//存儲空間的基址//棧頂元素的下一個位置,簡稱棧頂位標//當前分配的存儲容量inttop;intsize;intincrement;//擴容時}SqStack;//順序棧,增加的存儲容量可調用順序棧接口中下列函數(shù):StatusInitStack_Sq(SqStack&S,intsize,intinc);//初始化順序棧S

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案StatusDestroyStack_Sq(SqStack&S);//銷毀順序棧StatusStackEmpty_Sq(SqStackS);//棧S判空,若空則返回TRUE,否則FALSEStatusPush_Sq(SqStack&S,ElemTypee);//將元素e壓入棧StatusPop_Sq(SqStack&S,ElemType&e);//棧S的棧頂元素出棧到eSS***********/StatusCopyStack_Sq(SqStackS1,SqStack&S2)/*借助輔助棧,復制順序棧S1得到S2。/*若復制TRUE;否則FALSE.*/*/成功,則返回{if(StackEmpty_Sq(S1)){S2。top=0;returnTRUE;}S2.elem=S1.elem;S2.top=S1.top;returnTRUE;}/**********【題目】試寫一算法,求循環(huán)隊列的長度。循環(huán)隊列的類型定義為:typedefstruct{ElemType*base;//存儲空間的基址

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案intfront;intrear;//隊頭位標//隊尾位標,指示隊尾元素的下一位置intmaxSize;//最大長度}SqQueue;***********/intQueueLength_Sq(SqQueueQ)/*返回隊列Q中元素個數(shù),即隊列的長度。*/{if(Q。rear—Q。front〈0)returnQ.maxSize-Q。front+Q.rear;returnQ。rear—Q.front;}/**********【題目】如果希望循環(huán)隊列中的元素都能得到利用,則可設置一個標志域tag,并以tag值為0或1來區(qū)分尾指針和頭指針值相同時的隊列狀態(tài)是”空"還是"滿”。試編寫與此結構相應的入隊列和出隊列的算法。本題的循環(huán)隊列CTagQueue的類型定義如下:typedefstruct{ElemTypeelem[MAXQSIZE];inttag;intfront;intrear;

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案}CTagQueue;**********/StatusEnCQueue(CTagQueue&Q,ElemTypex)x加入隊列/*將元素Q,并返回OK;*//*若失敗,則返回ERROR。{*/if(Q.front==Q。rear&&Q.tag==1)returnERROR;if(Q。rear==0){Q.elem[0]=x;Q。rear+=1;}else{Q。elem[Q.rear]=x;Q.rear=(Q。rear+1)%MAXQSIZE;}Q。tag=1;returnOK;}StatusDeCQueue(CTagQueue&Q,ElemType&x)/*將隊列Q的隊到x,并返回OK;*/頭元素退隊

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案/*若失敗,則返回ERROR.{*/if(Q。front==Q。rear&&Q。tag==0)returnERROR;x=Q.elem[Q.front];Q.front=(Q。front+1)%MAXQSIZE;Q.tag=0;returnOK;}/**********【題目】假設將循環(huán)隊列定義為:以域變量rear和length分別指示循環(huán)隊列中隊尾元素的位置和內含元素的個數(shù).試給出此循環(huán)隊列的隊滿條件,并寫出相應的入隊列和出隊列的算法(在出隊列的算法中要返回隊頭元素)。本題的循環(huán)隊列CLenQueue的類型定義如下:typedefstruct{ElemTypeelem[MAXQSIZE];intlength;intrear;}CLenQueue;**********/StatusEnCQueue(CLenQueue&Q,ElemTypex)

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案/*將元素x加入隊列Q,并返回OK;*//*若失敗,則返回ERROR。*/{if(Q.length==MAXQSIZE)returnERROR;Q。rear=(Q。rear+1)%MAXQSIZE;Q。elem[Q.rear]=x;Q.length++;returnOK;}StatusDeCQueue(CLenQueue&Q,ElemType&x)/*將隊列Q的隊頭元素退隊到x,并返回OK;*//*若失敗,則返回ERROR。*/{if(Q.length==0)returnERROR;x=Q.elem[(Q。rear+MAXQSIZE—Q.length+1)%MAXQSIZE];Q.length-—;returnOK;}/**********【題目】已知k階斐波那契序列的定義為:f0=0,f1=0,…,fk-2=0,fk—1=1;

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案fn=fn—1+fn—2+…+fn—k,n=k,k+1,…試利用循環(huán)隊列編寫求k階斐波那契序列中第n+1項fn的算法。本題的循環(huán)隊列的類型定義如下:typedefstruct{ElemType*base;//存儲空間的基址intfront;//隊頭位標intrear;//隊尾位標,指示隊尾元素的下一位置intmaxSize;//最大長度}SqQueue;**********/longFib(intk,intn)/*求k階斐波那契序列的第n+1項fn*/{if(k<2||n<0)returnERROR;if(n〈k-1)return0;elseif(n==k—1)return1;else{SqQueueS;

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案S.base=(ElemType*)malloc((n+1)*sizeof(ElemType));S。base[k-1]=1;inti,j,sum;for(i=0;i〈k-1;i++)S。base[i]=0;for(i=k;i<n+1;i++){sum=0;for(j=i—k;j<=i;j++)sum+=S。base[j];S.base[i]=sum;}returnS.base[n];}}/**********【題目】設A=(a1,…,am)和B=(b1,…,bn)均為有序順序表,A’和B'分別為A和B中除去最大共同前綴后的子表(例如,A=(x,y,y,z,x,z),B=(x,y,y,z,y,x,x,z),則兩者中最大的共同前綴為(x,y,y,z),在兩表中除去最大共同前綴后的子表分別為A’=(x,z)和B’=(y,x,x,z))。若A'=B’=空表,則A=B;若A'=空表,而B’≠空表,或者兩者均不為空表,

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案且A’的首元小于B’的首元,則A〈B;否則較A和B大小的算法.(注意:在算法中,不要破壞原表和B,也不一定先求得A>B。試寫一個比AA’和B’才進行比較)。順序表類型定義如下:typedefstruct{ElemType*elem;intintintlength;size;increment;}SqList;**********/charCompare(SqListA,SqListB)/*比較順序表A和B,*//*返回'<’,若A〈B;*//*'=',若A=B;*//*'>',若A〉B*/{inti=0;while((i<=A.length-1)&&(i〈=B.length—1)&&(A。elem[i]==B.elem[i]))++i;if(i==A.length&&i==B.length)return'=';elseif(return'<’;i==A。length&&i!=B.length&&A.elem[i]〈B.elem[i])

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案elseif(i!=A。length&&i!=B。length&&A。elem[i]〈B。elem[i])return'〈';elseif(i==0&&A。elem[i]>B.elem[i])return’>';elsereturn'〈’;}/**********【題目】試寫一算法,實現(xiàn)順序表的就地逆置,即利用原表的存儲空間將線性表(a1,a2,…,an)逆置為(an,an—1,…,a1)。順序表類型定義如下:typedefstruct{ElemType*elem;intintintlength;size;increment;}SqList;**********/voidInverse(SqList&L){ElemTypetemp;if(L。elem!=NULL&&L.length!=1)

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案{for(inti=0;i<L。length/2;i++){temp=L。elem[i];L。elem[i]=L.elem[L。length—i-1];L.elem[L。length-i—1]=temp;}}}/**********【題目】試對一元稀疏多項式Pn(x)采用存儲量同多項式項數(shù)m成正比的順序存儲結構,編寫求Pn(x0)的算法(x0為給定值)。一元稀疏多項式的順序存儲結構typedefstruct{intcoef;//系數(shù)intexp;//指數(shù)}Term;:typedefstruct{Term*elem;//存儲空間基址intlength;//長度(項數(shù))}Poly;

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案**********/floatEvaluate(PolyP,floatx)/*P。elem[i]。coef存放/*P。elem[i]。exp存放ei(i=1,2,。.。,ai,*/*/m)/*本算法計算并返回多項式的值.不判別溢出。*//*入口時要求0≤e1〈e2<。對此再作驗證*/{..<em,算法內不floatresult=0;floatx_sum=1;inti,j;for(i=0;i〈P。length;i++){for(j=0;j<P。elem[i]。exp;j++)x_sum*=x;result+=(P。elem[i]。coef*x_sum);x_sum=1;}returnresult;}/**********【題目】假設有兩個集合A和B分別用兩個線性表LA和LB表示(即:線性表中的數(shù)據(jù)元素即為集合中的成員),

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案試寫一算法,求并集A=A∪B。順序表類型定義如下typedefstruct{ElemType*elem;intlength;//存儲空間的基址//當前長度intsize;//存儲容量intincrement;//空間不夠增加空間大小}SqList;//順序表可調用順序表的以下接口函數(shù):StatusInitList_Sq(SqList&L,intsize,intinc)intListLength_Sq(SqListL);//返回順序表L中元素個數(shù)StatusGetElem_Sq(SqListL,inti,ElemType&e);//用e返回順序表L中第i個元素的值intSearch_Sq(SqListL,ElemTypee);//在順序表L順序查找元素e,成功時返回該元素在表中第一次出現(xiàn)的位置,否則返回—1;//初始化順序表LStatusAppend_Sq(SqList&L,ElemTypee);//在順序表L表尾添加元素e**********/voidUnion(SqList&La,SqListLb){intcount=0;for(inti=0;i〈ListLength_Sq(Lb);i++)if(Search_Sq(La,Lb.elem[i])==—1)count++;ElemType*p;

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案p=(ElemType*)realloc(La.elem,La.size+count*sizeof(ElemType));if(p==NULL)return;La.elem=p;for(i=0;i〈ListLength_Sq(Lb);i++)if(Search_Sq(La,Lb。elem[i])==—1)Append_Sq(La,Lb。elem[i]);}/**********【題目】試寫一算法,實現(xiàn)鏈棧的判空操作.鏈棧的類型定義為:typedefstructLSNode{ElemTypedata;//數(shù)據(jù)域structLSNode*next;//指針域}LSNode,*LStack;//結點和鏈棧類型***********/StatusStackEmpty_L(LStackS)/*對鏈棧S判空.若S是空棧,則返回TRUE;否則返回FALSE*/{if(S==NULL||S—>next==S)returnTRUE;returnFALSE;

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案}/**********【題目】試寫一算法,實現(xiàn)鏈棧的取棧頂元素操作。鏈棧的類型定義為:typedefstructLSNode{ElemTypedata;//數(shù)據(jù)域structLSNode*next;//指針域}LSNode,*LStack;//結點和鏈棧類型***********/StatusGetTop_L(LStackS,ElemType&e)/*取鏈棧S的棧頂元素到e,并返回OK;*//*若S是空棧,則失敗,返回ERROR。*/{if(S==NULL||S->next==S)returnERROR;e=S-〉data;returnOK;}/**********【題目】試寫一算法,實現(xiàn)鏈隊列的判空操作。鏈隊列的類型定義為:typedefstructLQNode{ElemTypedata;

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案structLQNode*next;}LQNode,*QueuePtr;//結點和結點指針類型typedefstruct{QueuePtrfront;//隊頭指針QueuePtrrear;//隊尾指針}LQueue;//鏈隊列類型***********/StatusQueueEmpty_LQ(LQueueQ)/*判定鏈隊列Q是否為空隊列.*//*若Q是空隊列,則返回TRUE,否則FALSE。*/{if(Q.front!=NULL||Q.front->next!=NULL)returnFALSE;returnTRUE;}/**********【題目】試寫一算法,實現(xiàn)鏈隊列的求隊列長度操作。鏈隊列的類型定義為:typedefstructLQNode{ElemTypedata;structLQNode*next;}LQNode,*QueuePtr;//結點和結點指針類型typedefstruct{

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案QueuePtrfront;//隊頭指針QueuePtrrear;//隊尾指針}LQueue;//鏈隊列類型***********/intQueueLength_LQ(LQueueQ)/*求鏈隊列Q的長度并返回其值*/{if(Q.front==NULL&&Q。front->next==NULL)return0;intlen=0;LQNode*p=Q。front;while(p!=NULL){p=p->next;len++;}returnlen;}/**********【題目】假設以帶頭結點的循環(huán)鏈表表示隊列,并且只設一個指針指向隊尾元素結點(注意不設頭指針),試編寫相應的隊列初始化、入隊列和出隊列的算法.帶頭結點循環(huán)鏈隊列CLQueue的類型定義為:

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案typedefstructLQNode{ElemTypedata;structLQNode*next;}LQNode,*CLQueue;**********/StatusInitCLQueue(CLQueue&rear)//初始化空隊列{rear=(CLQueue)malloc(sizeof(LQNode));if(!rear)returnFALSE;rear->next=rear;returnTRUE;}StatusEnCLQueue(CLQueue&rear,ElemTypex)//入隊{CLQueuehead,p;head=rear—>next;p=(CLQueue)malloc(sizeof(LQNode));if(!p)returnFALSE;p->data=x;p-〉next=head;rear—>next=p;rear=p;returnTRUE;

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案}StatusDeCLQueue(CLQueue&rear,ElemType&x)//出隊{CLQueuehead,p;head=rear—>next;if(head==rear)returnFALSE;p=head—〉next;//將欲刪除的隊x=p-〉data;點的值賦給xhead-〉next=p-〉next;//將原隊頭結點的后繼p—〉next賦值給頭結點后繼//頭結點頭結點暫存給p//將欲刪除的隊頭結free(p);returnTRUE;}/**********【題目】試寫一算法,實現(xiàn)帶頭結點單鏈表的判空操作。單鏈表的類型定義為:typedefstructLNode{ElemTypedata;structLNode*next;}LNode,*LinkList;//結點和結點指針類型***********/StatusListEmpty_L(LinkListL)/*判定帶頭結點單鏈表L是否為空鏈表。*/

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案/*若L是空鏈表,則返回TRUE,否則FALSE。*/{if(L==L-〉next||!L->next)returnTRUE;returnFALSE;}/**********【題目】試寫一算法,實現(xiàn)帶頭結點單鏈表的銷毀操作。單鏈表的類型定義為:typedefstructLNode{ElemTypedata;structLNode*next;}LNode,*LinkList;//結點和結點指針類型***********/StatusDestroyList_L(LinkList&L)/*銷毀帶頭結點單鏈表L,并返回OK。*/{if(L==L—〉next||!L—>next){free(L);returnOK;}LNode*p=L-〉next,*pt;

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案while(p!=NULL){pt=p—〉next;free(p);p=pt;}free(L);returnOK;}/**********【題目】試寫一算法,實現(xiàn)帶頭結點單鏈表的清空操作。單鏈表的類型定義為:typedefstructLNode{ElemTypedata;structLNode*next;}LNode,*LinkList;//結點和結點指針類型***********/StatusClearList_L(LinkList&L)/*將帶頭結點單鏈表L置為空表,并返回OK.*//*若L不是帶頭結點單鏈表,則返回ERROR。*/{if(L==NULL)returnERROR;

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案LNode*p=L—〉next,*pt;while(p!=NULL){pt=p-〉next;free(p);p=pt;}L—〉next=NULL;returnOK;}/**********【題目】試寫一算法,實現(xiàn)帶頭結點單鏈表的求表長度操作.單鏈表的類型定義為:typedefstructLNode{ElemTypedata;structLNode*next;}LNode,*LinkList;//結點和結點指針類型***********intListLength_L(LinkListL)/*求帶頭結點單鏈表L的長度,并返回長度值.*///*若L不是帶頭結點單鏈表,則返回—1。*/{if(L==NULL)return-1;

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案LinkListp=L->next;intcount=0;while(p!=NULL){count++;p=p—〉next;}returncount;}/**********【題目】試寫一算法,在帶頭結點單鏈表L插入第i元素e。帶頭結點單鏈表的類型定義為:typedefstructLNode{ElemTypedata;structLNode*next;}LNode,*LinkList;**********/StatusInsert_L(LinkListL,inti,ElemTypee)/*在帶頭結點單鏈表L插入第i元素e,并返回OK。*//*若參數(shù)不合理,則返回ERROR.{*/if(i<0)returnERROR;intcount=0;

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案LinkListp=L;while(p!=NULL&&count〈i—1){p=p—>next;count++;}if(!p||count〉i—1)returnERROR;//這步很重要LinkListptr;ptr=(LNode*)malloc(sizeof(LNode));ptr—〉data=e;ptr—>next=p->next;p->next=ptr;returnOK;}/**********【題目】試寫一算法,在帶頭結點單鏈表刪除第i元素到e。帶頭結點單鏈表的類型定義為:typedefstructLNode{ElemTypedata;structLNode*next;}LNode,*LinkList;**********/StatusDelete_L(LinkListL,inti,ElemType&e)

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案/*在帶頭結點單鏈表L刪除第i元素到e,并返回OK。*//*若參數(shù)不合理,則返回ERROR.{*/if(i<0)returnERROR;intcount=0;LinkListp=L,pt;while(p!=NULL&&count<i—1){p=p—〉next;count++;}if(p—>next==NULL||count〉i-1)returnERROR;//這步很重要pt=p->next;p-〉next=p—〉next—>next;e=pt—〉data;free(pt);returnOK;}/**********【題目】試寫一算法,在帶頭結點單鏈表的第i元素起的所有元素從鏈表移除,并構成一個帶頭結點的新鏈表。帶頭結點單鏈表的類型定義為:typedefstructLNode{

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案ElemTypedata;structLNode*next;}LNode,*LinkList;**********StatusSplit_L(LinkListL,LinkList&Li,inti)L的第i元素起的所有元素*//*移除,并構成帶頭結點鏈表/*若參數(shù)不合理,則Li為NULL,返回//*在帶頭結點單鏈表Li,返回OK。*/ERROR。*/{intcount=0;LinkListp=L,ptr;while(p!=NULL&&count<i-1){p=p—〉next;count++;}//P指向第i-1號元素if(i<0||p==NULL||count〉i—1||p->next==NULL){Li=NULL;returnERROR;//查錯}ptr=(LinkList)malloc(sizeof(LNode));if(ptr==NULL)//為新鏈表開辟儲存空間returnERROR;

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案Li=ptr;Li->next=p-〉next;p—〉next=NULL;returnOK;}/**********【題目】試寫一算法,在帶頭結點單鏈表刪除第i元素起的所有元素。帶頭結點單鏈表的類型定義為:typedefstructLNode{ElemTypedata;structLNode*next;}LNode,*LinkList;**********/StatusCut_L(LinkListL,inti)/*在帶頭結點單鏈表L刪除第i元素起的所有元素,并返回OK。*//*若參數(shù)不合理,則返回ERROR。*/{intcount=0;LinkListp=L,pt;while(p!=NULL&&count〈i-1){p=p—>next;//P指向第i-1號元素

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案count++;}if(i<=0||p==NULL||count>i-1||p->next==NULL){returnERROR;//查錯}if(i==1){free(L->next);L—>next=NULL;returnOK;}pt=p-〉next;//pt指向將第i號元素p->next=NULL;while(pt!=NULL){p=pt—〉next;free(pt=p;}pt);returnOK;}/**********

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案【題目】試寫一算法,刪除帶頭結點單鏈表中所有值為x的元素,并釋放被刪結點空間。單鏈表類型定義如下:typedefstructLNode{ElemTypedata;structLNode*next;}LNode,*LinkList;**********/StatusDeleteX_L(LinkListL,ElemTypex)/*刪除帶頭結點單鏈表L中所有值為x的元素,*//*并釋放被刪結點空間,返回實際刪除的元素個數(shù).*/{intcount=0;LinkListp=L->next,pf=L,q;while(p!=NULL){if(p—〉data==x){q=p;p=p—>next;free(q);pf—〉next=p;count++;}

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案else{pf=p;p=p->next;}}returncount;}/**********【題目】試寫一算法,刪除帶頭結點單鏈表中所有值小于x的元素,并釋放被刪結點空間.單鏈表類型定義如下:typedefstructLNode{ElemTypedata;structLNode*next;}LNode,*LinkList;*****StatusDeleteSome_L(LinkListL,ElemTypex)L中所有值小于x的元素,*/*****//*刪除帶頭結點單鏈表/*并釋放被刪結點空間,返回實際刪除的元素個數(shù)。*/{intcount=0;LinkListp=L->next,pf=L,q;

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案while(p!=NULL){if(p—>data<x){q=p;p=p—〉next;free(q);pf->next=p;count++;}else{pf=p;p=p-〉next;}}returncount;}/**********【題目】試以順序表L的L。rcd[L。length+1]作為監(jiān)視哨,改寫教材3.2節(jié)中給出的升序直接插入排序算法。順序表的類型RcdSqList定義如下:

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案typedefstruct{KeyTypekey;。。。}RcdType;typedefstruct{RcdTypercd[MAXSIZE+1];//rcd[0]閑置intlength;}RcdSqList;**********/voidInsertSort(RcdSqList&L){inti,j;for(i=0;i〈L。length;i++)if(L.rcd[i+1].key〈L.rcd[i].key){L.rcd[L。length+1]。key=L.rcd[i+1].key;j=i+1;do{j-—;L。rcd[j+1]。key=L.rcd[j].key;}while(L.rcd[L。length+1].key<L.rcd[j—1]。key);//為什么是j-1?-———因為移到最后會有兩個相鄰且相同的數(shù),而目標L。rcd[j].key=L.rcd[L.length+1].key;//L。rcd[L.length+1]需移到左邊那個數(shù)(位置為[j]),判別條件為其需大于rcd[j-1]}//即當L.rcd[L。length+1].key>L.rcd[j-1].key時終止while()}

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案/**********【題目】如下所述,改寫教材1.3.2節(jié)例1-10的冒泡排序算法:將算法中用以起控制作用的布爾變量change改為一個整型變量,指示每一趟排序中進行交換的最后一個記錄的位置,并以它作為下一趟起泡排序循環(huán)終止的控制值.順序表的類型RcdSqList定義如下:typedefstruct{KeyTypekey;。。.}RcdType;typedefstruct{RcdTypercd[MAXSIZE+1];//rcd[0]閑置intlength;}RcdSqList;*****voidBubbleSort(RcdSqList&L)/*元素比較和交換必須調用如下定義的比較函數(shù)和交換函數(shù):*/*StatusLT(RedTypea,RedTypeb);比較:”〈”*/*****///*StatusGT(RedTypea,RedTypeb);比較:”>"*/*//*voidSwap(RedType&a,RedType&b);交換{inti=L。length—1;

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案intchange=i,j;for(;(i〉=1)&&change;i—-){change=0;for(j=1;j〈=i;j++){if(GT(L.rcd[j],L。rcd[j+1])){Swap(L.rcd[j],L。rcd[j+1]);change=j;}}i=change;}}/**********【題目】已知記錄序列L。rcd[1.。L.length]中的關鍵字各不相同,可按如下所述實現(xiàn)計數(shù)排序:另設數(shù)組c[1..n],對每個記錄a[i],統(tǒng)計序列中關鍵字比它小的記錄個數(shù)存于c[i],則c[i]=0的記錄必為關鍵字最小的記錄,然后依c[i]值的大小對序列中記錄進行重新排列。試編寫算法實現(xiàn)上述排序方法.順序表的類型RcdSqList定義如下:typedefstruct{KeyTypekey;。。。

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案}RcdType;typedefstruct{RcdTypercd[MAXSIZE+1];//rcd[0]閑置intlength;}RcdSqList;*******/voidCountSort(RcdSqList&L)***/*采用順序表存儲結構,在函數(shù)內自行定義計數(shù)數(shù)組c*/{int*c;c=(int*)malloc((L。length+1)*sizeof(int));//創(chuàng)建計數(shù)數(shù)組c,統(tǒng)計序列中關鍵字比其他大的個數(shù)KeyType*temp;temp=(KeyType*)malloc((L。length+1)*sizeof(KeyType));//創(chuàng)建臨時數(shù)組,根據(jù)c[i]的值直接插入inti,j;for(i=0;i〈L。length+1;i++)c[i]=0;//初始化C[i]for(i=1;i<L.length+1;i++)for(j=1;j<L。length+1;j++)if(L.rcd[i].key>L。rcd[j]。key)c[i]++;//統(tǒng)計序列中關鍵字比其他大的個數(shù),存入c[i]for(i=1;i〈L.length+1;i++)temp[c[i]+1]=L。rcd[i]。key;//根據(jù)c[i]的值直接插入對應位置

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案for(j=1;j〈L。length+1;j++)L。rcd[j]。key=temp[j];//把排序完的數(shù)據(jù)返回到原始序列}/**********【題目】已知某哈希表的裝載因子小于1,哈希函數(shù)H(key)為關鍵字(標識符)的第一個字母在字母表中的序號,處理沖突的方法為線性探測開放定址法。試編寫一個按第一個字母的順序輸出哈希表中所有關鍵字的算法。哈希表的類型HashTable定義如下:#defineSUCCESS1#defineUNSUCCESS0#defineDUPLICATE-1typedefcharStrKeyType[4];typedefstruct{StrKeyTypekey;//關鍵字項inttag;//標記0:空;1:有效;-1:已刪除void*any;//其他信息}RcdType;typedefstruct{RcdType*rcd;//存儲空間基址size;//哈希表容量count;//表中當前記錄個數(shù)intint

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案}HashTable;**********/voidPrintKeys(HashTableht,void(*print)(StrKeyType))/*依題意用print輸出關鍵字*/{intn,i;for(charc='A';c<=’Z';c++){n=(c—’%ht。size;i=n;A')while((n+1)%ht.size!=i){if(ht.rcd[n].tag!=-1&&ht.rcd[n]。key[0]==c)print(ht。rcd[n]。key);n=(n+1)%ht。size;}}}/**********目】假設哈希表長為m,哈希函數(shù)【題為H(x),用鏈地址法處理沖突。試編寫輸入一組關鍵字并建造哈希表的算法。哈希表的類型ChainHashTab定義如下:#defineNUM7#defineNULLKEY-1

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案#defineSUCCESS1#defineUNSUCCESS0#defineDUPLICATE-1typedefcharHKeyType;typedefstructHNode{HKeyTypedata;structHNode*next;}*HLink;typedefstruct{HLink*rcd;//指針存儲基址,動態(tài)分配數(shù)組intintcount;//當前表中含有的記錄個數(shù)size;//哈希表的當前容量}ChainHashTab;//鏈地址哈希表intHash(ChainHashTabH,HKeyTypek){//哈希函數(shù)returnk%H.size;}StatusCollision(ChainHashTabH,HLink&p){//求得下一個探查地址pif(p&&p->next){p=p-〉next;returnSUCCESS;}elsereturnUNSUCCESS;}**********/

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案intBuildHashTab(ChainHashTab&H,intn,HKeyTypees[])/*直接調用下列函數(shù)/*哈希函數(shù):*/*//*intHash(ChainHashTabH,HKeyTypek);**/ChainHashTabH,HLink&p);*//*沖突處理函數(shù):/*{intCollision(/inti=0,pos;boolflag=true;;HLinkp,pt;while(es[i]!=’\0’){p=(HNode*)malloc(sizeof(HNode));p—〉data=es[i];p—〉next=NULL;pos=Hash(H,es[i]);if(H.rcd[pos]==NULL)H。rcd[pos]=p;else{pt=H.rcd[pos];while(pt){if(pt—>data==p—〉data){flag=false;break;}pt=pt->next;}

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案if(flag){pt=H。rcd[pos];p->next=pt;H.rcd[pos]=p;}}i++;flag=true;}}/**********【題目】試編寫如下定義的遞歸函數(shù)的遞歸算法:g(m,n)=0g(m,n)=g(m—1,2n)+n當m>0,n>=0******intG(intm,intn)果m<0或n<0則返回—1*/當m=0,n〉=0****//*如{if(n<0||m<0)return—1;elseif(m==0)return0;elseif(m>0)

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案returnG(m-1,2*n)+n;}/**********【題目】試寫出求遞歸函數(shù)F(n)的遞歸算法:F(n)=n+1當n=0n/2)當n>0F(n)=nF(**********/intF(intn)/*如果n<0則返回—1*/{if(n<0)return-1;if(n==0)returnn+1;elsereturnn*F(n/2);}/**********【題目】求解平方根的迭代函數(shù)定義如下:e)=psqrt(A,p,e)=sqrt(A,(sqrt(A,p,當|p*p—A|<ep+A/p)/2,e)當|p*p-A|>=e

(完整)2016廣工AnyView數(shù)據(jù)結構第1-5章答案其中,p是A的近似平方根,e是結果允許誤差。試寫出相應的遞歸算法。**********/floatSqrt(floatA,floatp,floate){if(p*p-A〈e)returnp;elsereturnSqrt(A,(p+A/p)/2,e);}/**********【題目】已知Ackerman函數(shù)的定義如下:akm(m

溫馨提示

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

評論

0/150

提交評論