C語言數(shù)據(jù)結(jié)構(gòu)課程設計_第1頁
C語言數(shù)據(jù)結(jié)構(gòu)課程設計_第2頁
C語言數(shù)據(jù)結(jié)構(gòu)課程設計_第3頁
全文預覽已結(jié)束

下載本文檔

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

文檔簡介

《魔王語言》實驗報告、【問題描述】:有一個魔王總是使用自己的一種非常精煉而抽象的語言講話,沒人能聽得懂,但他的語言總是可以解釋成人能聽得懂的語言,因為他的語言是以下兩種規(guī)則逐步抽象上去的:a(1)ap1p2-pm(06162??0n)06n6n—1^0610在這兩種形式中,從左到右均表示解釋。試寫一個魔王語言折解釋系統(tǒng),把他的話解釋成人能聽得懂的話?;疽螅河孟率鰞蓷l規(guī)則實現(xiàn)。設大寫字母表示魔王語言的詞匯;小寫字母表示人的語言詞匯;希臘字母表示可以用大寫字母或小寫字母代替的變量。魔王語言可含人的詞匯。B-tAdAA—sae【基本要求】用下列兩條具體規(guī)則和上述規(guī)則形式(2)實現(xiàn)。設大寫字母表示魔王語言,小寫字母表示人的語言詞匯,希臘字母表示可以用大寫字母或小寫字母代替的變量。魔王語言可包含人的詞匯,例如:B—tAdAA—sae【選做內(nèi)容】代換變量的數(shù)目不限,則在程序開始運行時首先讀入一組第一種形式的規(guī)則,而不是吧規(guī)則固定在程序中(第二種規(guī)則只能固定在程序中)。二、程序設計的基本思想,原理和算法描述:以一維數(shù)組lan[i]表示魔王語言.魔王語言由用戶輸入,初始保存在lan[i]中.魔王語言與人類語言的規(guī)則一手動輸入,規(guī)則二固定在程序中.實現(xiàn)過程:A:初始,魔王語言接收后存放在lan[i]中.B:初次遍歷數(shù)組,將數(shù)組中括號內(nèi)的元素從左到右入棧;C:棧中棧頂元素依次出棧,依次處理棧頂元素。D:如果棧頂元素為左括號,則flag=1,套用規(guī)則二;若棧頂元素為右括號,則flag=0,套用規(guī)則一。括號內(nèi)元素存入數(shù)組中,再將數(shù)組逆置,套用規(guī)則一輸出。1:設定棧的抽象數(shù)據(jù)類型定義:ADTstack{數(shù)據(jù)對象:D={ai|aiECharSet,i=1,2,…,n,n>=0}數(shù)據(jù)關系:R1={<ai-1,ai>|ai-1,aiED,i=2,…,n}基本操作:initstack(&s)操作結(jié)果:構(gòu)造一個空棧S.push(&s,e)初始條件:棧s已存在.操作結(jié)果:在棧s的棧頂插入新的棧頂元素e.pop(&s,&e)初始條件:棧s已存在.操作結(jié)果:刪除s的棧頂元素,并以e返回其值.}ADTstack3:本程序包含四個模塊:主函數(shù)模塊.元素入棧處理模塊.翻譯大寫處理模塊.翻譯括號內(nèi)元素模塊。各模塊之間調(diào)用關系:主函數(shù)模塊(元素入棧處理模塊;翻譯模塊(翻譯括號內(nèi)元素處理模塊;}}三、我的源代碼:#include<stdio.h>#include<iostream>#include<string.h>#include<stdlib.h>#include<malloc.h>#defineOK1#defineOVERFLOW-1#definestatusint#defineelemtypechar#defineSTACK_INIT_SIZE100#defineSTACKINCREAMENT10#definemaxn10010typedefstruct{elemtype*base;elemtype*top;intstacksize;}Sqstack;statusInit(Sqstack*S){S->base=(elemtype*)malloc(STACK_INIT_SIZE*sizeof(elemtype));if(!S->base)exit(OVERFLOW);S->top=S->base;S->stacksize=STACK_INIT_SIZE;returnOK;}statusPop(Sqstack*S,elemtype*e)//刪除棧頂元素,并用e返回其值;{if(S->top==S->base)return0;*e=*--S->top;return*e;}statusPush(Sqstack*S,elemtypee)//插入棧頂元素{if(S->top-S->base>=S->stacksize){S->base=(elemtype*)realloc(S->base,(S->stacksize+STACKINCREAMENT)*sizeof(elemtype));if(!S->base)exit(OVERFLOW);S->top=S->base+S->stacksize;S->stacksize+=STACKINCREAMENT;}*S->top++=e;returnOK;}intmain(){Sqstacks;Init(&s);//建立棧;chara[maxn],b[maxn],lan[maxn],f[maxn],d[maxn];charc1,c2,c3;printf("請輸入規(guī)則一:\n");scanf("%c->%s”,&c1,a);//printf("%c->%s\n”,c1,a);getchar();scanf("%c->%s”,&c2,b);//printf("%c->%s\n”,c2,b);getchar();intlen_a=strlen(a);intlen_b=strlen(b);intf_len=0;for(inti=0;i<len_a;i++){if(a[i]==c2)for(intj=0;j<len_b;j++)f[f_len++]=b[j];elseif(a[i]!=c2)f[f_len++]=a[i];}printf("請輸入魔王語言:\n");gets(lan);//輸入intlen_lan=strlen(lan);for(inti=len_lan-1;i>=0;i--)//將魔王語言從右往左進棧;{Push(&s,lan[i]);}chare;intflag=0;intd_len=0;printf("翻譯后的語言為:");for(inti=0;i<len_lan;i++){Pop(&s,&e);//逐一取出棧頂元素進行處理;if(flag==1){d[d_len++]=e;}if(e==c1&&flag==0)printf("%s”,f);elseif(e==c2&&flag==0)printf("%s”,b);elseif(e=='('&&flag==0){c3=lan[i+1];flag=1;}elseif(e==')'){flag=0;for(intj=d_len-2;j>=0

溫馨提示

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

評論

0/150

提交評論