廣東工業(yè)大學(xué)數(shù)據(jù)結(jié)構(gòu)Aniview系統(tǒng)第三章參考答案.pdf

上傳人:小** 文檔編號:13302881 上傳時間:2020-06-13 格式:PDF 頁數(shù):12 大?。?15.34KB
收藏 版權(quán)申訴 舉報 下載
廣東工業(yè)大學(xué)數(shù)據(jù)結(jié)構(gòu)Aniview系統(tǒng)第三章參考答案.pdf_第1頁
第1頁 / 共12頁
廣東工業(yè)大學(xué)數(shù)據(jù)結(jié)構(gòu)Aniview系統(tǒng)第三章參考答案.pdf_第2頁
第2頁 / 共12頁
廣東工業(yè)大學(xué)數(shù)據(jù)結(jié)構(gòu)Aniview系統(tǒng)第三章參考答案.pdf_第3頁
第3頁 / 共12頁

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

5 積分

下載資源

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

資源描述:

《廣東工業(yè)大學(xué)數(shù)據(jù)結(jié)構(gòu)Aniview系統(tǒng)第三章參考答案.pdf》由會員分享,可在線閱讀,更多相關(guān)《廣東工業(yè)大學(xué)數(shù)據(jù)結(jié)構(gòu)Aniview系統(tǒng)第三章參考答案.pdf(12頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、廣東工業(yè)大學(xué)數(shù)據(jù)結(jié)構(gòu)Aniview第三章參考答案◆3 .1 7③試寫一個算法,識別依次讀入的一個以@為結(jié)束符的字符序列是否為形如序列1 /*若str是屬該模式的字符序列,*//*則返回TRUE,否則返回FALSE */ Stack是一個已實現(xiàn)的棧。可使用的相關(guān)類型和函數(shù):typedef char SElemType; //棧Stack的元素類型Status InitStack(Stack Status Push(Stack Status Pop(Stack Status StackEmpty(Stack s);Status GetTop(Stack s, SElemType Status ma

2、tch(char *str)/*若str是屬該模式的字符序列,*//*則返回TRUE,否則返回FALSE */{ Stack S; int i;SElemType e;InitStack(S);for(i=0 ;str[i]!=i++){ Push(S,str[i]); }for(i=i+1 ;!StackEmpty(S)i++){ Pop(S,e);if(e!=str[i]){ return FALSE;}}if(StackEmpty(S)} } 3 .1 8②試寫一個判別表達(dá)式中開、閉括號是否配對出現(xiàn)的算法。實現(xiàn)下列函數(shù):Status MatchCheck(SqList exp);/*順序

3、表exp表示表達(dá)式;*//*若exp中的括號配對,則返回TRUE,否則返回FALSE *//*注:本函數(shù)不使用棧*/順序表類型定義如下:typedef struct {ElemType *elem;int length;int listsize; } SqList; //順序表Status MatchCheck(SqList exp)/*順序表exp表示表達(dá)式;*//*若exp中的括號配對,則返回TRUE,否則返回FALSE *//*注:本函數(shù)不使用棧*///exp里面是純括號,純小括號{ int l=0 ,i;for(i=0 ;i

4、]==(){ l++;} if(exp.elem[i]==)){l--;if(l0 ) return FALSE;//有左,沒右else return TRUE;} ◆3 .1 9④假設(shè)一個算術(shù)表達(dá)式中可以包含三種括號:圓括號"("和")",方括號"["和"]"和花括號"{"和"}",且這三種括號可按任意的次序嵌套使用(如:…[…{…}…[…]…]…[…]…(…)…)。編寫判別給定表達(dá)式中所含括號是否正確配對出現(xiàn)的算法(已知表達(dá)式已存入數(shù)據(jù)元素為字符的順序表中)。實現(xiàn)下列函數(shù):Status MatchCheck(SqList exp);/*順序表exp表示表達(dá)式;*//*若exp中的括號配對,

5、則返回TRUE,否則返回FALSE */順序表類型定義如下:typedef struct { ElemType *elem;int length;int listsize;} SqList; //順序表Stack是一個已實現(xiàn)的棧??墒褂玫南嚓P(guān)類型和函數(shù):typedef char SElemType; //棧Stack的元素類型Status InitStack(Stack Status Push(Stack Status Pop(Stack Status StackEmpty(Stack s);Status GetTop(Stack s, SElemType Status MatchCheck(

6、SqList exp)/*順序表exp表示表達(dá)式;*//*若exp中的括號配對,則返回TRUE,否則返回FALSE */{ int i;Stack S;ElemType l;InitStack(S);for(i=0 ;i

7、Pop(S,l);switch(l){ //有左括號匹配,但是括號不匹配case (:if(exp.elem[i]!=)) return FALSE;break;case [:if(exp.elem[i]!=]) return FALSE;break;case {:if(exp.elem[i]!=}) return FALSE;}}}} if(StackEmpty(S)) return TRUE;else return FALSE;//左括號多余}3 .2 0③假設(shè)以二維數(shù)組g(1 ..m,1 ..n)表示一個圖像區(qū)域,g[i,j]表示該區(qū)域中點(i,j)所具顏色,其值為從0到k的整數(shù)。編寫算

8、法置換點(i0 ,j0 )所在區(qū)域的顏色。約定和(i0 ,j0 )同色的上、下、左、右的鄰接點為同色區(qū)域的點。 實現(xiàn)下列函數(shù):void ChangeColor(GTYPE g, int m, int n,char c, int i0 , int j0 );/*在g[1 ..m][1 ..n]中,將元素g[i0 ][j0 ] *//*所在的同色區(qū)域的顏色置換為顏色c */表示圖像區(qū)域的類型定義如下:typedef char GTYPE[m+1 ][n+1 ];Stack是一個已實現(xiàn)的棧??墒褂玫南嚓P(guān)類型和函數(shù):typedef int SElemType; //棧Stack的元素類型Status

9、StackInit(Stack Status Push(Stack Status Pop(Stack Status StackEmpty(Stack s);Status GetTop(Stack s, SElemType void ChangeColor(GTYPE g, int m, int n,char c, int i0 , int j0 )/*在g[1 ..m][1 ..n]中,將元素g[i0 ][j0 ] *//*所在的同色區(qū)域的顏色置換為顏色c */{ Stack S;int x,y,di=1 ;//di代表東北西南四個方向char color;StackInit(S,(m+1 )

10、*(n+1 ));x=i0 ;y=j0 ;if(x<=0 ||ym||y>n) exit(OVERFLOW);color=g[x][y]; //總體的思路是,從g[i0 ][j0 ]開始//對每個符合所求的元素的依次找東北西南,//即先找當(dāng)前元素的東邊,沒有找北邊,若北有,向北走一步,//再找(走到的那個元素)的東邊,依次類推//直到最后一個元素東北西南都被找過了,就回退//用Pop(S,di)為指導(dǎo)方向,找一些(因在某些元素北西南方)而被遺漏了的元素//此時,因為原來遍歷的元素已經(jīng)被標(biāo)記成c,即某些元素的(東北西)已不再是所找元素//因此,可以如愿走(某些元素的(北西南)方向do{ //如果

11、是所找的那個符號需要進(jìn)行的操作if(x>0 g[x][y]=c;y++;Push(S,di);}else //如果不是所找的那個符號需要進(jìn)行的操作{ Pop(S,di); //第一步,先退一步回到原來位置switch(di){ case 1 :y--;break;case 2 :x--; break;case 3 :y++; break;case 4 : x++;break;}di++; //第二步,換一個方向走下一個位置 if(di=a/* if m<0 or n<0 then return -1 . */ int G(int m, int n)/* if m<0 or n<0 then r

12、eturn -1 . */{ if(m<0 ||n0 實現(xiàn)下列函數(shù):int F(int n);/* if n<0 then return -1 . */int F(int n)/* if n<0 then return -1 . */{ if(nnext=rear;if(!front||!rear) exit(OVERFLOW);return OK; //需要return OK} Status EnCLQueue(CLQueue p=(CLQueue)malloc(sizeof(LNode));p->data=x;p->next=rear->next;//先讓p新開的節(jié)點指向頭結(jié)點 rear-

13、>next=p;rear=p;return OK;}Status DeCLQueue(CLQueue CLQueue p=front->next;if(front==rear) return ERROR;x=p->data;front->next=p->next;free(p); return OK;}3 .2 9③如果希望循環(huán)隊列中的元素都能得到利用,則需設(shè)置一個標(biāo)志域tag,并以tag的值為0或1來區(qū)分,尾指針和頭指針值相同時的隊列狀態(tài)是"空"還是"滿"。試編寫與此結(jié)構(gòu)相應(yīng)的入隊列和出隊列的算法,并從時間和空間角度討論設(shè)標(biāo)志和不設(shè)標(biāo)志這兩種方法的使用范圍(比如,當(dāng)循環(huán)隊列容量較小而隊列中每

14、個元素占的空間較多時,那一種方法 較好?)。實現(xiàn)下列函數(shù):Status EnCQueue(CTagQueue Status DeCQueue(CTagQueue 本題的循環(huán)隊列CTagQueue的類型定義如下:typedef char QElemType;typedef struct {QElemType elem[MAXQSIZE];int tag;int front;int rear; } CTagQueue;Status EnCQueue(CTagQueue }else{ Q.elem[Q.rear]=x;Q.rear=(Q.rear+1 )%MAXQSIZE;}return OK;}S

15、tatus DeCQueue(CTagQueue } else{ x=Q.elem[Q.front];Q.front=(Q.front+1 )%MAXQSIZE;} //當(dāng)指針前移時,原來的front位置就空了return OK; //不需其他操作}◆3 .3 0②假設(shè)將循環(huán)隊列定義為:以域變量rear和length分別指示循環(huán)隊列中隊尾元素的位置和內(nèi)含元素的個數(shù)。試給出此循環(huán)隊列的隊滿條件,并 寫出相應(yīng)的入隊列和出隊列的算法(在出隊列的算法中要返回隊頭元素)。實現(xiàn)下列函數(shù):Status EnCQueue(CLenQueue Status DeCQueue(CLenQueue 本題的循環(huán)隊列C

16、LenQueue的類型定義如下:typedef char QElemType;typedef struct {QElemType elem[MAXQSIZE];int length;int rear; } CLenQueue;Status EnCQueue(CLenQueue }else{ Q.elem[(Q.rear+1 )%MAXQSIZE]=x;Q.rear=(Q.rear+1 )%MAXQSIZE; //有可能加到MAXQSIZEQ.length++;}return OK;}Status DeCQueue(CLenQueue if(Q.length==0 ) { return ERRO

17、R;}else{ if((front=Q.rear-Q.length+1 )<0 ){ front=MAXQSIZE+front; }x=Q.elem[front];front=(front+1 )%MAXQSIZE;//有可能加到MAXQSIZEQ.length--;} //當(dāng)指針前移時,原來的front位置就空了return OK; //不需其他操作}◆3 .3 1③假設(shè)稱正讀和反讀都相同的字符序列為"回文",例如,abba和abcba是回文,abcde 和ababab則不是回文。試寫一個算法判別讀入的一個以@為結(jié)束符的字符序列是否是"回文"。實現(xiàn)下列函數(shù):Status Palindrom

18、e(char *word);/*利用棧和隊列判定字符序列word是否是回文*/可使用棧Stack和隊列Queue及其下列操作:Status InitStack(Stack Status Push(Stack Status Pop(Stack Status StackEmpty(Stack S); Status InitQueue(Queue Status EnQueue(Queue Status DeQueue(Queue Status QueueEmpty(Queue Q); Status Palindrome(char *word)/*利用棧和隊列判定字符序列word是否是回文*/{ Stack S;Queue Q;char s,q;InitStack(S);InitQueue(Q);while(*word!=@){ Push(S,*word);EnQueue(Q,*word);word++;} while(!StackEmpty(S)){ Pop(S,s);DeQueue(Q,q);if(s!=q){ return FALSE;}}return TRUE;}

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

相關(guān)資源

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

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

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


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