《《作業(yè)答案》PPT課件.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《《作業(yè)答案》PPT課件.ppt(14頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、if語(yǔ)句不能用作循環(huán)語(yǔ)句: for或while用于循環(huán)語(yǔ)句。,if(;i+) ,1. 簡(jiǎn)述下列算法的功能: 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á)式中可以包含三種括號(hào):圓括號(hào)“)”和“(”、方括號(hào)“”和“”和花括號(hào)“”和“”,而且這三種括號(hào)可以按任意的次序嵌套使用(如:()。編寫判別給定表達(dá)式中所包含是否正確配對(duì)出現(xiàn)的算法(已知表達(dá)式已存入數(shù)據(jù)元素為字符的順序表中)。,Stat
2、us AllBrackets_Test(char *str) /用str代表表達(dá)式,判別表達(dá)式中三種括號(hào)是否匹配 .,Status AllBrackets_Test(char *str) /判別表達(dá)式中三種括號(hào)是否匹配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ì)列中的元素都能得到利用,則需要設(shè)置一個(gè)標(biāo)志域tag,并以tag的值為0或1來(lái)區(qū)分
3、尾指針和頭指針值相同時(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的值來(lái)判斷隊(duì)列的狀態(tài)。),分析:當(dāng)循環(huán)隊(duì)列容量較小而隊(duì)列中每個(gè)元素占的空間較多時(shí),此種表示方法可以節(jié)約較多的存儲(chǔ)空間,較有價(jià)值。,Status
4、 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); while(c=getchar()!=) Push(S,c)
5、;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)度,試編寫算法,輸出對(duì)這n節(jié)車廂進(jìn)行調(diào)度的操作(即入棧或出棧操作)序列,以使所有的軟席車廂都被調(diào)到硬席車廂之前。 提示:void Train_arrange(char *train) /這里用字符串train表示火車, 字符H表示硬席,S表示軟席,設(shè)兩個(gè)指針p和q,其中,p指向字符串train,q指
6、向一個(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 ,