九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

數(shù)據(jù)結(jié)構(gòu)習(xí)題答案全部算法嚴(yán)蔚敏版

上傳人:沈*** 文檔編號(hào):69087181 上傳時(shí)間:2022-04-05 格式:DOC 頁數(shù):120 大小:246KB
收藏 版權(quán)申訴 舉報(bào) 下載
數(shù)據(jù)結(jié)構(gòu)習(xí)題答案全部算法嚴(yán)蔚敏版_第1頁
第1頁 / 共120頁
數(shù)據(jù)結(jié)構(gòu)習(xí)題答案全部算法嚴(yán)蔚敏版_第2頁
第2頁 / 共120頁
數(shù)據(jù)結(jié)構(gòu)習(xí)題答案全部算法嚴(yán)蔚敏版_第3頁
第3頁 / 共120頁

下載文檔到電腦,查找使用更方便

10 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《數(shù)據(jù)結(jié)構(gòu)習(xí)題答案全部算法嚴(yán)蔚敏版》由會(huì)員分享,可在線閱讀,更多相關(guān)《數(shù)據(jù)結(jié)構(gòu)習(xí)題答案全部算法嚴(yán)蔚敏版(120頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、數(shù)據(jù)結(jié)構(gòu)習(xí)題答案(全部算法)-嚴(yán)蔚敏版 第一章緒論1.16 void print_descending(int x,int y,int z)/按從大到小順序輸出三個(gè)數(shù)scanf(%d,%d,%d,&x,&y,&z);if(xy; /為表示交換的雙目運(yùn)算符,以下同if(yz;if(xy; /冒泡排序printf(%d %d %d,x,y,z);/print_descending 1.17 Status fib(int k,int m,int &f)/求k階斐波那契序列的第m項(xiàng)的值fint tempd;if(k2|m0) return ERROR; if(melse if (m=k-1 | m=k

2、) f=1;elsefor(i=0;i=k-2;i+) tempi=0;tempk-1=1;tempk=1; /初始化sum=1;j=0;for(i=k+1;i=m;i+,j+) /求出序列第k至第m個(gè)元素的值tempi=2*sum-tempj;f=tempm;return OK;/fib分析: k階斐波那契序列的第m項(xiàng)的值fm=fm-1+fm-2+.+fm-k=fm-1+fm-2+.+fm-k+fm-k-1-fm-k-1=2*fm-1-fm-k-1所以上述算法的時(shí)間復(fù)雜度僅為O(m). 如果采用遞歸設(shè)計(jì),將達(dá)到O(km). 即使采用暫存中間結(jié)果的方法,也將達(dá)到O(m2). 1.18 type

3、def structchar *sport;enummale,female gender;char schoolname; /校名為A,B,C,D或Echar *result;int score; resulttype; typedef structint malescore;int femalescore;int totalscore; scoretype; void summary(resulttype result )/求各校的男女總分和團(tuán)體總分,假設(shè)結(jié)果已經(jīng)儲(chǔ)存在result 數(shù)組中scoretype scoreMAXSIZE;i=0;while(resulti.sport!=NULL

4、)switch(resulti.schoolname)case A:score 0 .totalscore+=resulti.score;if(resulti.gender=0) score 0 .malescore+=resulti.score;else score 0 .femalescore+=resulti.score;break;case B:score 0 .totalscore+=resulti.score;if(resulti.gender=0) score 0 .malescore+=resulti.score;else score 0 .femalescore+=resul

5、ti.score;break;i+;for(i=0;i5;i+)printf(School %d:n,i);printf(Total score of male:%dn,scorei.malescore);printf(Total score of female:%dn,scorei.femalescore);printf(Total score of all:%dnn,scorei.totalscore);/summary 1.19 Status algo119(int aARRSIZE)/求i!*2i序列的值且不超過maxintlast=1;for(i=1;i=ARRSIZE;i+)ai-

6、1=last*2*i;if(ai-1/last)!=(2*i) reurn OVERFLOW;last=ai-1;return OK;/algo119分析:當(dāng)某一項(xiàng)的結(jié)果超過了maxint時(shí),它除以前面一項(xiàng)的商會(huì)發(fā)生異常. 1.20 void polyvalue()float temp;float *p=a;printf(Input number of terms:);scanf(%d,&n);printf(Input value of x:);scanf(%f,&x);printf(Input the %d coefficients from a0 to a%d:n,n+1,n);p=a;x

7、p=1;sum=0; /xp用于存放x的i次方for(i=0;i=n;i+)scanf(%f,&temp); sum+=xp*(temp);xp*=x;printf(Value is:%f,sum);/polyvalue第二章 線性表 2.10 Status DeleteK(SqList &a,int i,int k)/刪除線性表a中第i個(gè)元素起的k個(gè)元素if(i1|ka.length) return INFEASIBLE;for(count=1;i+count-1va.listsize) return ERROR;va.length+;for(i=va.length-1;va.elemix&

8、i=0;i-)va.elemi+1=va.elemi;va.elemi+1=x;return OK;/Insert_SqList 2.12 int ListComp(SqList A,SqList B)/比較字符表A和B,并用返回值表示結(jié)果,值為1,表示AB;值為-1,表示Afor(i=1;i=A.length&iB.elemi?1:-1;if(A.length=B.length) return 0;return A.lengthB.length?1:-1; /當(dāng)兩個(gè)字符表可以互相比較的部分完全相同時(shí),哪個(gè)較長,哪個(gè)就較大/ListComp 2.13 LNode* Locate(LinkLis

9、t L,int x)/鏈表上的元素查找,返回指針for(p=l-next;p&p-data!=x;p=p-next);return p;/Locate 2.14 int Length(LinkList L)/求鏈表的長度for(k=0,p=L;p-next;p=p-next,k+);return k;/Length 2.15 void ListConcat(LinkList ha,LinkList hb,LinkList &hc)/把鏈表hb接在ha后面形成鏈表hchc=ha;p=ha;while(p-next) p=p-next;p-next=hb;/ListConcat 2.16 見書后答

10、案. 2.17 Status Insert(LinkList &L,int i,int b)/在無頭結(jié)點(diǎn)鏈表L的第i個(gè)元素之前插入元素bp=L;q=(LinkList*)malloc(sizeof(LNode);q.data=b;if(i=1)q.next=p;L=q; /插入在鏈表頭部elsewhile(-i1) p=p-next;q-next=p-next;p-next=q; /插入在第i個(gè)元素的位置/Insert 2.18 Status Delete(LinkList &L,int i)/在無頭結(jié)點(diǎn)鏈表L中刪除第i個(gè)元素if(i=1) L=L-next; /刪除第一個(gè)元素elsep=L;

11、while(-i1) p=p-next;p-next=p-next-next; /刪除第i個(gè)元素/Delete 2.19 Status Delete_Between(Linklist &L,int mink,int maxk)/刪除元素遞增排列的鏈表L中值大于mink且小于maxk的所有元素p=L;while(p-next-datanext; /p是最后一個(gè)不大于mink的元素if(p-next) /如果還有比mink更大的元素q=p-next;while(q-datanext; /q是第一個(gè)不小于maxk的元素p-next=q;/Delete_Between 2.20 Status Dele

12、te_Equal(Linklist &L)/刪除元素遞增排列的鏈表L中所有值相同的元素p=L-next;q=p-next; /p,q指向相鄰兩元素while(p-next)if(p-data!=q-data)p=p-next;q=p-next; /當(dāng)相鄰兩元素不相等時(shí),p,q都向后推一步elsewhile(q-data=p-data) free(q);q=q-next; p-next=q;p=q;q=p-next; /當(dāng)相鄰元素相等時(shí)刪除多余元素/else/while/Delete_Equal 2.21 void reverse(SqList &A)/順序表的就地逆置for(i=1,j=A.l

13、ength;iJ;I+,J-)A.elemiA.elemj;/reverse 2.22 void LinkList_reverse(Linklist &L)/鏈表的就地逆置;為簡(jiǎn)化算法,假設(shè)表長大于2p=L-next;q=p-next;s=q-next;p-next=NULL;while(s-next)q-next=p;p=q;q=s;s=s-next; /把L的元素逐個(gè)插入新表表頭q-next=p;s-next=q;L-next=s;/LinkList_reverse分析:本算法的思想是,逐個(gè)地把L的當(dāng)前元素q插入新的鏈表頭部,p為新表表頭. 2.23 void merge1(LinkLis

14、t &A,LinkList &B,LinkList &C)/把鏈表A和B合并為C,A和B的元素間隔排列,且使用原存儲(chǔ)空間p=A-next;q=B-next;C=A;while(p&q)s=p-next;p-next=q; /將B的元素插入if(s)t=q-next;q-next=s; /如A非空,將A的元素插入p=s;q=t;/while/merge1 2.24 void reverse_merge(LinkList &A,LinkList &B,LinkList &C)/把元素遞增排列的鏈表A和B合并為C,且C中元素遞減排列,使用原空間pa=A-next;pb=B-next;pre=NULL

15、; /pa和pb分別指向A,B的當(dāng)前元素while(pa|pb)if(pa-datadata|!pb)pc=pa;q=pa-next;pa-next=pre;pa=q; /將A的元素插入新表elsepc=pb;q=pb-next;pb-next=pre;pb=q; /將B的元素插入新表pre=pc;C=A;A-next=pc; /構(gòu)造新表頭/reverse_merge分析:本算法的思想是,按從小到大的順序依次把A和B的元素插入新表的頭部pc處,最后處理A或B的剩余元素. 2.25 void SqList_Intersect(SqList A,SqList B,SqList &C)/求元素遞增排

16、列的線性表A和B的元素的交集并存入C中i=1;j=1;k=0;while(A.elemi&B.elemj)if(A.elemiif(A.elemiB.elemj) j+;if(A.elemi=B.elemj)C.elem+k=A.elemi; /當(dāng)發(fā)現(xiàn)了一個(gè)在A,B中都存在的元素,i+;j+; /就添加到C中/while/SqList_Intersect 2.26 void LinkList_Intersect(LinkList A,LinkList B,LinkList &C)/在鏈表結(jié)構(gòu)上重做上題p=A-next;q=B-next;pc=(LNode*)malloc(sizeof(LNod

17、e); C=pc;while(p&q)if(p-datadata) p=p-next;else if(p-dataq-data) q=q-next;elses=(LNode*)malloc(sizeof(LNode);s-data=p-data;pc-next=s;pc=s;p=p-next;q=q-next;/while/LinkList_Intersect 2.27 void SqList_Intersect_True(SqList &A,SqList B)/求元素遞增排列的線性表A和B的元素的交集并存回A中i=1;j=1;k=0;while(A.elemi&B.elemj)if(A.el

18、emielse if(A.elemiB.elemj) j+;else if(A.elemi!=A.elemk)A.elem+k=A.elemi; /當(dāng)發(fā)現(xiàn)了一個(gè)在A,B中都存在的元素i+;j+; /且C中沒有,就添加到C中else i+;j+;/whilewhile(A.elemk) A.elemk+=0;/SqList_Intersect_True 2.28 void LinkList_Intersect_True(LinkList &A,LinkList B)/在鏈表結(jié)構(gòu)上重做上題p=A-next;q=B-next;pc=A;while(p&q)if(p-datadata) p=p-nex

19、t;else if(p-dataq-data) q=q-next;else if(p-data!=pc-data)pc=pc-next;pc-data=p-data;p=p-next;q=q-next;/while/LinkList_Intersect_True 2.29 void SqList_Intersect_Delete(SqList &A,SqList B,SqList C) i=0;j=0;k=0;m=0; /i指示A中元素原來的位置,m為移動(dòng)后的位置while(iA.LENGTH&JC.elemk) k+;elsesame=B.elemj; /找到了相同元素samewhile(B

20、.elemj=same) j+;while(C.elemk=same) k+; /j,k后移到新的元素while(iA.LENGTH&A.ELEMIA.elemm+=A.elemi+; /需保留的元素移動(dòng)到新位置while(inext;q=C-next;r=A-next;while(p&q&r)if(p-datadata) p=p-next;else if(p-dataq-data) q=q-next;elseu=p-data; /確定待刪除元素uwhile(r-next-datanext; /確定最后一個(gè)小于u的元素指針rif(r-next-data=u)s=r-next;while(s-d

21、ata=u)t=s;s=s-next;free(t); /確定第一個(gè)大于u的元素指針s/whiler-next=s; /刪除r和s之間的元素/ifwhile(p-data=u) p=p-next;while(q-data=u) q=q-next;/else/while/LinkList_Intersect_Delete 2.31 Status Delete_Pre(CiLNode *s)/刪除單循環(huán)鏈表中結(jié)點(diǎn)s的直接前驅(qū)p=s;while(p-next-next!=s) p=p-next; /找到s的前驅(qū)的前驅(qū)pp-next=s;return OK;/Delete_Pre 2.32 Statu

22、s DuLNode_Pre(DuLinkList &L)/完成雙向循環(huán)鏈表結(jié)點(diǎn)的pre域for(p=L;!p-next-pre;p=p-next) p-next-pre=p;return OK;/DuLNode_Pre 2.33 Status LinkList_Divide(LinkList &L,CiList &A,CiList &B,CiList &C)/把單鏈表L的元素按類型分為三個(gè)循環(huán)鏈表.CiList為帶頭結(jié)點(diǎn)的單循環(huán)鏈表類型.s=L-next;A=(CiList*)malloc(sizeof(CiLNode);p=A;B=(CiList*)malloc(sizeof(CiLNode

23、);q=B;C=(CiList*)malloc(sizeof(CiLNode);r=C; /建立頭結(jié)點(diǎn)while(s)if(isalphabet(s-data)p-next=s;p=s;else if(isdigit(s-data)q-next=s;q=s;elser-next=s;r=s;/whilep-next=A;q-next=B;r-next=C; /完成循環(huán)鏈表/LinkList_Divide 2.34 void Print_XorLinkedList(XorLinkedList L)/從左向右輸出異或鏈表的元素值p=L.left;pre=NULL;while(p)printf(%d

24、,p-data);q=XorP(p-LRPtr,pre);pre=p;p=q; /任何一個(gè)結(jié)點(diǎn)的LRPtr域值與其左結(jié)點(diǎn)指針進(jìn)行異或運(yùn)算即得到其右結(jié)點(diǎn)指針/Print_XorLinkedList 2.35 Status Insert_XorLinkedList(XorLinkedList &L,int x,int i)/在異或鏈表L的第i個(gè)元素前插入元素xp=L.left;pre=NULL;r=(XorNode*)malloc(sizeof(XorNode);r-data=x;if(i=1) /當(dāng)插入點(diǎn)在最左邊的情況p-LRPtr=XorP(p.LRPtr,r);r-LRPtr=p;L.lef

25、t=r;return OK;j=1;q=p-LRPtr; /當(dāng)插入點(diǎn)在中間的情況while(+jLRPtr,pre);pre=p;p=q;/while /在p,q兩結(jié)點(diǎn)之間插入if(!q) return INFEASIBLE; /i不可以超過表長p-LRPtr=XorP(XorP(p-LRPtr,q),r);q-LRPtr=XorP(XorP(q-LRPtr,p),r);r-LRPtr=XorP(p,q); /修改指針return OK;/Insert_XorLinkedList 2.36 Status Delete_XorLinkedList(XorlinkedList &L,int i)/

26、刪除異或鏈表L的第i個(gè)元素p=L.left;pre=NULL;if(i=1) /刪除最左結(jié)點(diǎn)的情況q=p-LRPtr;q-LRPtr=XorP(q-LRPtr,p);L.left=q;free(p);return OK;j=1;q=p-LRPtr;while(+jLRPtr,pre);pre=p;p=q;/while /找到待刪結(jié)點(diǎn)qif(!q) return INFEASIBLE; /i不可以超過表長if(L.right=q) /q為最右結(jié)點(diǎn)的情況p-LRPtr=XorP(p-LRPtr,q);L.right=p;free(q);return OK;r=XorP(q-LRPtr,p); /q

27、為中間結(jié)點(diǎn)的情況,此時(shí)p,r分別為其左右結(jié)點(diǎn)p-LRPtr=XorP(XorP(p-LRPtr,q),r);r-LRPtr=XorP(XorP(r-LRPtr,q),p); /修改指針free(q);return OK;/Delete_XorLinkedList 2.37 void OEReform(DuLinkedList &L)/按1,3,5,.4,2的順序重排雙向循環(huán)鏈表L中的所有結(jié)點(diǎn)p=L.next;while(p-next!=L&p-next-next!=L)p-next=p-next-next;p=p-next; /此時(shí)p指向最后一個(gè)奇數(shù)結(jié)點(diǎn)if(p-next=L) p-next=

28、L-pre-pre;else p-next=l-pre;p=p-next; /此時(shí)p指向最后一個(gè)偶數(shù)結(jié)點(diǎn)while(p-pre-pre!=L)p-next=p-pre-pre;p=p-next;p-next=L; /按題目要求調(diào)整了next鏈的結(jié)構(gòu),此時(shí)pre鏈仍為原狀for(p=L;p-next!=L;p=p-next) p-next-pre=p;L-pre=p; /調(diào)整pre鏈的結(jié)構(gòu),同2.32方法/OEReform分析:next鏈和pre鏈的調(diào)整只能分開進(jìn)行.如同時(shí)進(jìn)行調(diào)整的話,必須使用堆棧保存偶數(shù)結(jié)點(diǎn)的指針,否則將會(huì)破壞鏈表結(jié)構(gòu),造成結(jié)點(diǎn)丟失. 2.38 DuLNode * Locat

29、e_DuList(DuLinkedList &L,int x)/帶freq域的雙向循環(huán)鏈表上的查找p=L.next;while(p.data!=x&p!=L) p=p-next;if(p=L) return NULL; /沒找到p-freq+;q=p-pre;while(q-freqfreq&p!=L) q=q-pre; /查找插入位置if(q!=p-pre)p-pre-next=p-next;p-next-pre=p-pre;q-next-pre=p;p-next=q-next;q-next=p;p-pre=q; /調(diào)整位置return p;/Locate_DuList 2.39 float

30、 GetValue_SqPoly(SqPoly P,int x0)/求升冪順序存儲(chǔ)的稀疏多項(xiàng)式的值PolyTerm *q;xp=1;q=P.data;sum=0;ex=0;while(q-coef)while(exexp) xp*=x0;sum+=q-coef*xp;q+;return sum;/GetValue_SqPoly 2.40 void Subtract_SqPoly(SqPoly P1,SqPoly P2,SqPoly &P3)/求稀疏多項(xiàng)式P1減P2的差式P3PolyTerm *p,*q,*r;Create_SqPoly(P3); /建立空多項(xiàng)式P3p=P1.data;q=P2.

31、data;r=P3.data;while(p-coef&q-coef)if(p-expexp)r-coef=p-coef;r-exp=p-exp;p+;r+;else if(p-expexp)r-coef=-q-coef;r-exp=q-exp;q+;r+;elseif(p-coef-q-coef)!=0) /只有同次項(xiàng)相減不為零時(shí)才需要存入P3中r-coef=p-coef-q-coef;r-exp=p-exp;r+;/ifp+;q+;/else/whilewhile(p-coef) /處理P1或P2的剩余項(xiàng)r-coef=p-coef;r-exp=p-exp;p+;r+;while(q-coe

32、f)r-coef=-q-coef;r-exp=q-exp;q+;r+;/Subtract_SqPoly 2.41 void QiuDao_LinkedPoly(LinkedPoly &L)/對(duì)有頭結(jié)點(diǎn)循環(huán)鏈表結(jié)構(gòu)存儲(chǔ)的稀疏多項(xiàng)式L求導(dǎo)p=L-next;if(!p-data.exp)L-next=p-next;p=p-next; /跳過常數(shù)項(xiàng)while(p!=L)p-data.coef*=p-data.exp-;/對(duì)每一項(xiàng)求導(dǎo)p=p-next;/QiuDao_LinkedPoly 2.42 void Divide_LinkedPoly(LinkedPoly &L,&A,&B)/把循環(huán)鏈表存儲(chǔ)的稀

33、疏多項(xiàng)式L拆成只含奇次項(xiàng)的A和只含偶次項(xiàng)的Bp=L-next;A=(PolyNode*)malloc(sizeof(PolyNode);B=(PolyNode*)malloc(sizeof(PolyNode);pa=A;pb=B;while(p!=L)if(p-data.exp!=2*(p-data.exp/2)pa-next=p;pa=p;elsepb-next=p;pb=p;p=p-next;/whilepa-next=A;pb-next=B; /Divide_LinkedPoly第三章 棧與隊(duì)列 3.15 typedef structElemtype *base2;Elemtype *t

34、op2;BDStacktype; /雙向棧類型 Status Init_Stack(BDStacktype &tws,int m)/初始化一個(gè)大小為m的雙向棧twstws.base0=(Elemtype*)malloc(sizeof(Elemtype);tws.base1=tws.base0+m;tws.top0=tws.base0;tws.top1=tws.base1;return OK;/Init_Stack Status push(BDStacktype &tws,int i,Elemtype x)/x入棧,i=0表示低端棧,i=1表示高端棧if(tws.top0tws.top1) re

35、turn OVERFLOW; /注意此時(shí)的棧滿條件if(i=0) *tws.top0+=x;else if(i=1) *tws.top1-=x;else return ERROR;return OK;/push Status pop(BDStacktype &tws,int i,Elemtype &x)/x出棧,i=0表示低端棧,i=1表示高端棧if(i=0)if(tws.top0=tws.base0) return OVERFLOW;x=*-tws.top0;else if(i=1)if(tws.top1=tws.base1) return OVERFLOW;x=*+tws.top1;els

36、e return ERROR;return OK;/pop 3.16 void Train_arrange(char *train)/這里用字符串train表示火車,H表示硬席,S表示軟席p=train;q=train;InitStack(s);while(*p)if(*p=H) push(s,*p); /把H存入棧中else *(q+)=*p; /把S調(diào)到前部p+;while(!StackEmpty(s)pop(s,c);*(q+)=c; /把H接在后部/Train_arrange 3.17 int IsReverse()/判斷輸入的字符串中&前和&后部分是否為逆串,是則返回1,否則返回0I

37、nitStack(s);while(e=getchar()!=&)if(e=) return 0;/不允許在&之前出現(xiàn)push(s,e); while( (e=getchar()!=)if(StackEmpty(s) return 0;pop(s,c);if(e!=c) return 0;if(!StackEmpty(s) return 0;return 1;/IsReverse 3.18 Status Bracket_Test(char *str)/判別表達(dá)式中小括號(hào)是否匹配count=0;for(p=str;*p;p+)if(*p=() count+;else if(*p=) count-

38、;if (count1)if(gx-1y=old)gx-1y=color;EnQueue(Q,x-1,y); /修改左鄰點(diǎn)的顏色if(y1)if(gxy-1=old)gxy-1=color;EnQueue(Q,x,y-1); /修改上鄰點(diǎn)的顏色if(xM)if(gx+1y=old)gx+1y=color;EnQueue(Q,x+1,y); /修改右鄰點(diǎn)的顏色if(y=0) s=0;else if(m0&n=0) s=n+g(m-1,2*n);else return ERROR;return OK;/g 3.25 Status F_recursive(int n,int &s)/遞歸算法if(n

39、0) return ERROR;if(n=0) s=n+1;elseF_recurve(n/2,r);s=n*r;return OK;/F_recursive Status F_nonrecursive(int n,int s)/非遞歸算法if(n0) return ERROR;if(n=0) s=n+1;elseInitStack(s); /s的元素類型為struct int a;int b;while(n!=0)a=n;b=n/2;push(s,a,b);n=b;/whiles=1;while(!StackEmpty(s)pop(s,t);s*=t.a;/whilereturn OK;/F

40、_nonrecursive 3.26 float Sqrt_recursive(float A,float p,float e)/求平方根的遞歸算法if(abs(p2-A)=e)p=(p+A/p)/2;return p;/Sqrt_nonrecursive 3.27 這一題的所有算法以及棧的變化過程請(qǐng)參見數(shù)據(jù)結(jié)構(gòu)(pascal版),作者不再詳細(xì)寫出. 3.28 void InitCiQueue(CiQueue &Q)/初始化循環(huán)鏈表表示的隊(duì)列QQ=(CiLNode*)malloc(sizeof(CiLNode);Q-next=Q;/InitCiQueue void EnCiQueue(CiQu

41、eue &Q,int x)/把元素x插入循環(huán)鏈表表示的隊(duì)列Q,Q指向隊(duì)尾元素,Q-next指向頭結(jié)點(diǎn),Q-next-next指向隊(duì)頭元素p=(CiLNode*)malloc(sizeof(CiLNode);p-data=x;p-next=Q-next; /直接把p加在Q的后面Q-next=p;Q=p; /修改尾指針 Status DeCiQueue(CiQueue &Q,int x)/從循環(huán)鏈表表示的隊(duì)列Q頭部刪除元素xif(Q=Q-next) return INFEASIBLE; /隊(duì)列已空p=Q-next-next;x=p-data;Q-next-next=p-next;free(p);r

42、eturn OK;/DeCiQueue 3.29 Status EnCyQueue(CyQueue &Q,int x)/帶tag域的循環(huán)隊(duì)列入隊(duì)算法if(Q.front=Q.rear&Q.tag=1) /tag域的值為0表示空,1表示滿return OVERFLOW;Q.baseQ.rear=x;Q.rear=(Q.rear+1)%MAXSIZE;if(Q.front=Q.rear) Q.tag=1; /隊(duì)列滿/EnCyQueue Status DeCyQueue(CyQueue &Q,int &x)/帶tag域的循環(huán)隊(duì)列出隊(duì)算法if(Q.front=Q.rear&Q.tag=0) retur

43、n INFEASIBLE;Q.front=(Q.front+1)%MAXSIZE;x=Q.baseQ.front;if(Q.front=Q.rear) Q.tag=1; /隊(duì)列空return OK;/DeCyQueue分析:當(dāng)循環(huán)隊(duì)列容量較小而隊(duì)列中每個(gè)元素占的空間較多時(shí),此種表示方法可以節(jié)約較多的存儲(chǔ)空間,較有價(jià)值. 3.30 Status EnCyQueue(CyQueue &Q,int x)/帶length域的循環(huán)隊(duì)列入隊(duì)算法if(Q.length=MAXSIZE) return OVERFLOW;Q.rear=(Q.rear+1)%MAXSIZE;Q.baseQ.rear=x;Q.le

44、ngth+;return OK;/EnCyQueue Status DeCyQueue(CyQueue &Q,int &x)/帶length域的循環(huán)隊(duì)列出隊(duì)算法if(Q.length=0) return INFEASIBLE;head=(Q.rear-Q.length+1)%MAXSIZE; /詳見書后注釋x=Q.basehead;Q.length-;/DeCyQueue 3.31 int Palindrome_Test()/判別輸入的字符串是否回文序列,是則返回1,否則返回0InitStack(S);InitQueue(Q);while(c=getchar()!=)Push(S,c);EnQ

45、ueue(Q,c); /同時(shí)使用棧和隊(duì)列兩種結(jié)構(gòu)while(!StackEmpty(S)Pop(S,a);DeQueue(Q,b);if(a!=b) return ERROR;return OK;/Palindrome_Test 3.32 void GetFib_CyQueue(int k,int n)/求k階斐波那契序列的前n+1項(xiàng)InitCyQueue(Q); /其MAXSIZE設(shè)置為kfor(i=0;iQ.basek-1=1; /給前k項(xiàng)賦初值for(i=0;ifor(i=k;i=avr) /根據(jù)x的值決定插入在隊(duì)頭還是隊(duì)尾Q.baseQ.rear=x;Q.rear=(Q.rear+1)%MAXSIZE; /插入在隊(duì)尾elseQ.front=(Q.front-1)%MAXSIZE;Q.baseQ.front=x; /插入在隊(duì)頭return OK;/EnDQueue Status DeDQueue(DQueue &Q,int &x)/輸出受限的雙端隊(duì)列的出隊(duì)操作if(Q.front=Q.rear) return INFEASIBLE; /隊(duì)列空x=Q.baseQ.front;Q.front=(Q.front+1)%MAXSIZE;return OK;/DeDQueue 3.34 void Train_Rearran

展開閱讀全文
溫馨提示:
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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!