《《作業(yè)答案》PPT課件.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《《作業(yè)答案》PPT課件.ppt(14頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、if語句不能用作循環(huán)語句: for或while用于循環(huán)語句。,if(;;i++) ,1. 簡述下列算法的功能: status algo(Stack S) int i,n,A255; n=0; while(!StackEmpty(S)) n++;Pop(S,An); for(i=1;i<=n;i++) Push(S,Ai); ,功能:將棧中的元素倒置放置。,2.假設(shè)一個(gè)算術(shù)表達(dá)式中可以包含三種括號:圓括號“)”和“(”、方括號“”和“”和花括號“”和“”,而且這三種括號可以按任意的次序嵌套使用(如:()。編寫判別給定表達(dá)式中所包含是否正確配對出現(xiàn)的算法(已知表達(dá)式已存入數(shù)據(jù)元素為字符的順序
2、表中)。,Status AllBrackets_Test(char *str) //用str代表表達(dá)式,判別表達(dá)式中三種括號是否匹配 ..,Status AllBrackets_Test(char *str) //判別表達(dá)式中三種括號是否匹配InitStack(S);for(p=str;*p;p++)if(*p==(||*p==||*p==) push(S,*p);else if(*p==)||*p==||*p==)if(StackEmpty(S)) return ERROR;pop(S,c);if(*p==)//AllBrackets_Test,3.如果希望循環(huán)隊(duì)列中的元素都能得到利用,則需
3、要設(shè)置一個(gè)標(biāo)志域tag,并以tag的值為0或1來區(qū)分尾指針和頭指針值相同時(shí)的隊(duì)列狀態(tài)是“空”還是“滿”。試編寫與此結(jié)構(gòu)相應(yīng)的入隊(duì)列和出隊(duì)列的算法,并從時(shí)間和空間角度討論和不設(shè)標(biāo)志這兩種方法的使用范圍(如當(dāng)循環(huán)隊(duì)列容量較小而隊(duì)列中每個(gè)元素占的空間較多時(shí),哪一種方法較好)。 (提示:將標(biāo)志的初值置“0”。一旦元素入隊(duì)列使得rear=front時(shí),需要置tag為“1”:反之,一旦元素出隊(duì)列使得rear=front時(shí),需要置tag為“0”,以便使得下一次進(jìn)入隊(duì)列或出隊(duì)列操作時(shí),此時(shí)front=rear,根據(jù)tag的值來判斷隊(duì)列的狀態(tài)。),分析:當(dāng)循環(huán)隊(duì)列容量較小而隊(duì)列中每個(gè)元素占的空間較多時(shí),此種表示
4、方法可以節(jié)約較多的存儲空間,較有價(jià)值。,Status EnCyQueue(CyQueue //隊(duì)列滿//EnCyQueue,Status DeCyQueue(CyQueue //DeCyQueue,4.假設(shè)稱正讀和反讀都相同的字符序列為“回文”,例如,abba和abcba回文,abcde和ababab不是回文。試寫一個(gè)算法判別讀入的一個(gè)以為結(jié)束符的字符序列是否是“回文”。 int Palindrome_Test() //判別輸入的字符串是否回文序列,是則返回1,否則返回0..,Status Palindrome_Test() //檢查是否回文 InitStack(S);InitQueue(Q)
5、; while((c=getchar()!=) Push(S,c);EnQueue(Q,c); //同時(shí)使用棧和隊(duì)列兩種結(jié)構(gòu) while(!StackEmpty(S)) Pop(S,a);DeQueue(Q,b)); if(a!=b) return ERROR; return OK; ,5. 假設(shè)如題1所述火車調(diào)度站的入口處有n節(jié)硬席或軟席車廂(分別以H和S表示)等待調(diào)度,試編寫算法,輸出對這n節(jié)車廂進(jìn)行調(diào)度的操作(即入棧或出棧操作)序列,以使所有的軟席車廂都被調(diào)到硬席車廂之前。 提示:void Train_arrange(char *train) //這里用字符串train表示火車, 字符
6、H表示硬席,S表示軟席,設(shè)兩個(gè)指針p和q,其中,p指向字符串train,q指向一個(gè)新的字符串,用于存放排序后的結(jié)果。,void Train_arrange(char *train) char *p,*q; p=train;q=newtrain; 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,6. 假設(shè)將循環(huán)隊(duì)列定義為:以域變量rear和length分別指示循環(huán)隊(duì)列中隊(duì)尾元素的位置和內(nèi)含元素的個(gè)數(shù)。試給出此循環(huán)隊(duì)列滿的條件,并寫出相應(yīng)的入隊(duì)列和出隊(duì)列的算法(在出隊(duì)列的算法中要返回隊(duì)頭元素)。(提示:rear不是指向隊(duì)尾元素的下一個(gè)位置,而是指向隊(duì)尾元素;隊(duì)列的隊(duì)頭指針head=(Q.rear-Q.length+1)%MAXSIZE),Status EnCyQueue(CyQueue ,隊(duì)滿的條件:length=MAXSIZE,Status DeCyQueue(CyQueue ,