數(shù)據(jù)結(jié)構(gòu)魔王語言解釋c語言實(shí)現(xiàn)_第1頁
數(shù)據(jù)結(jié)構(gòu)魔王語言解釋c語言實(shí)現(xiàn)_第2頁
數(shù)據(jù)結(jié)構(gòu)魔王語言解釋c語言實(shí)現(xiàn)_第3頁
數(shù)據(jù)結(jié)構(gòu)魔王語言解釋c語言實(shí)現(xiàn)_第4頁
數(shù)據(jù)結(jié)構(gòu)魔王語言解釋c語言實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

[數(shù)據(jù)結(jié)構(gòu)]魔王語言解釋c語言實(shí)現(xiàn)[基本要求]

用下述兩條具體規(guī)則和上述規(guī)則形式(2)實(shí)現(xiàn)。設(shè)大寫字母表示魔王語言的詞匯;小寫字母表示人的語言詞匯;希臘字母表示可以用大寫字母或小寫字母代換的變量。魔王語言可含人的詞匯。

(1)B->tAdA

(2)A->sae

[測試數(shù)據(jù)]

B(ehnxgz)B解釋成tsaedsaeezegexenehetsaedsae【實(shí)現(xiàn)】將需要解釋的魔王語言當(dāng)成一個(gè)字符數(shù)組,入棧1。再依次出棧,入棧2,依次處理頂端字符,若是開括號(hào)逐一出棧入隊(duì)列,直至閉括號(hào)出棧。再逐一出隊(duì)列,按照規(guī)則2解釋,再重新入棧2。出棧2,按照規(guī)則1解釋。#include<stdio.h>#include<stdlib.h>#include<string.h>#include<malloc.h>typedefstructNode//節(jié)點(diǎn){chardata;structNode*next;}Node,*NodePtr;typedefstructStak //棧鏈表{NodePtrtop;NodePtrbot;intcount;}Stak;//初始化棧voidInitStak(Stak*ts) {ts->top=(NodePtr)malloc(sizeof(Node));if(NULL==ts->top){printf("分配失敗");exit(-1);}ts->bot=ts->top;ts->count=0;ts->top->next=NULL;}//入棧voidPush(Stak*S,chare) {NodePtrpnew=(NodePtr)malloc(sizeof(Node));pnew->data=e;pnew->next=S->top;S->top=pnew;S->count++;}//出棧charPop(Stak*S) {NodePtrp;if(S->bot==S->top){//空時(shí)返回1刪除失敗exit(1);}p=S->top;chare=p->data;S->top=S->top->next;free(p);S->count--;returne;}//打印棧voidprin(Stak*S){NodePtrp;p=S->top;while(p!=S->bot){printf("%c\n",p->data);p=p->next;}}boolEmptyStack(Stak*S)//判斷是否空棧{if(S->count==0)return1;return0;}typedefstructQNode //隊(duì)列節(jié)點(diǎn){chardata;structQNode*next;}QNode,*QNodePtr;typedefstructLinkQueue //隊(duì)列鏈表{QNodePtrfront,rear;}Queue;//隊(duì)列初始化voidInitQue(Queue*Q){QNodePtrp=(QNodePtr)malloc(sizeof(QNode)); //p為頭節(jié)點(diǎn)p->data=NULL;p->next=NULL;Q->front=p;Q->rear=p;}//入隊(duì)列voidEnQue(Queue*Q,chare){QNodePtrp=(QNodePtr)malloc(sizeof(QNode));p->data=e;p->next=NULL;Q->rear->next=p;Q->rear=p;}charDeQue(Queue*Q)//出隊(duì)列{QNodePtrp;charc;if(Q->front==Q->rear){//空時(shí)exit(1);}p=Q->front->next;c=Q->front->next->data;Q->front->next=p->next;if(p==Q->rear){Q->rear=Q->front;}free(p);returnc;}voidpri(Queue*Q)//打印隊(duì)列{QNodePtrp;p=Q->front;if(p!=NULL){while(p!=Q->rear){printf("%c",p->next->data);p=p->next;}}}boolEmptyQue(Queue*Q){if(Q->front==Q->rear)return1;return0;}voidReverse(charM[],Stak*S){inti;intlen=strlen(M);intl=0,r=0;for(i=0;i<len;i++){Push(S,M[i]);if(M[i]=='(')l++;if(M[i]==')')r++;}if(l!=r)exit(1);}voidEnA(Queue*Q)//規(guī)則1{EnQue(Q,'s');EnQue(Q,'a');EnQue(Q,'e');}voidEnB(Queue*Q)//規(guī)則1{EnQue(Q,'t');EnA(Q);EnQue(Q,'d');EnA(Q);}voidFpri(Queue*Q){charc;while(!EmptyQue(Q)){c=DeQue(Q);switch(c){case't':printf("天");break;case'd':printf("地");break;case's':printf("上");break;case'a':printf("一只");break;case'e':printf("鵝");break;case'z':printf("追");break;case'g':printf("趕");break;case'x':printf("下");break;case'n':printf("蛋");break;case'h':printf("恨");break;default:printf("Error");}}}voidTran(Stak*Sbe,Stak*Saf,Queue*Q){charc;chard;inti=0;while(Sbe->count!=0){c=Pop(Sbe);if(c==')')i=Saf->count;elseif(c=='('){intj=Saf->count;while(j>i){d=Pop(Saf);EnQue(Q,d);j--;}chare=Q->front->next->data;DeQue(Q);while(!EmptyQue(Q))//規(guī)則2{chardl=DeQue(Q);Push(Saf,e);Push(Saf,dl);}Push(Saf,e);}elsePush(Saf,c);}while(Saf->count>0){charen;en=Pop(Saf);if(en=='A')EnA(Q);elseif(en=='B')EnB(Q);elseEnQue(Q,en);}Fp

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論