魔王語言解釋

2021-08-19 17:25:40 字數 1508 閱讀 6958

[問題描述]   

有乙個魔王總是使用自己的一種非常精練而抽象的語言講話,沒人能聽的懂。但他的語言是可以逐步解釋**能懂得語言的,因為他的語言是由以下兩種形式的規則由人的語言逐 步抽象上去的:    

(1)α->β1β2...βn 

(2)(θδ1δ2...δn)->θδnθδn-1...θδ1θ 

在這兩種形式中,從左到右均表示解釋;從右到左表示抽象。試寫乙個魔王解釋系統,把他的話解釋**能聽懂得話。 

[基本要求]    

用下述兩條具體規則和上述規則形式(2)實現。設大寫字母表示魔王語言的詞彙;小寫字    

母表示人的語言詞彙;希臘字母(a,b1,s,y1等)表示可以用大寫或小寫字母代換的變數。    

魔王語言可含人的詞彙。      

(1)b->tada       

(2)   a->sae    

[測試資料]      

b(einxgz)b    

解釋成     tsaedsaeezegexeneietsaedsae  

[實現提示]

將魔王的語言自右至左進棧,總是處理棧頂。若是開括號,則逐一出棧,將字母順序入佇列,直至閉括號出棧,並按規則要求逐一出佇列再處理後入棧。應首先實現棧和佇列的基本運算。

#include #include #define max_size 100

typedef char stackdata,queuedata;

typedef struct nodestacknode,queuenode;//棧和佇列結點定義是一樣的

typedef struct linkstacklinkstack;

typedef structlinkqueue;

void initstack(linkstack *s)//初始化棧

int push(linkstack *s,stackdata x) //入棧

int pop(linkstack *s,stackdata *x) //出棧

void initqueue(linkqueue *q) //初始化佇列

int enqueue(linkqueue *q,queuedata x)//進佇列

int dequeue(linkqueue *q,queuedata *x)//出佇列

int main(int argc, const char * argv)

for(int j=i-1;j>=0;j--) //陣列自右向左逐一進棧

push(&s,demon[j]);

while(pop(&s,&data))//出棧操作

dequeue(&q,&data); //出首元素

frontdata=data;

while(dequeue(&q, &data))

}else if(data==')')

{}//不列印左括號

else

printf("%c",data);

}return 0;

}

C語言魔王語言解釋

由於是小白,所以剛開始沒有用已有的出棧與入棧函式以及出佇列與入佇列函式,而是自己寫的。如果 不對的話,歡迎指正。include include include define stack init size 100 define stackincerement 10 棧的順序儲存表示 typedef ...

資料結構 魔王語言解釋

一 需求分析 1 有乙個魔王總是使用自己的一種非常精煉而抽象的語言講話,沒有人能聽得懂,但他的語言是可以逐步解釋 能聽懂的語言,因為他的語言是由以下兩種形式的規則由人的語言逐步抽象上去的 1 1 2 m 2 1 2 n n n 1 1 在這兩種形式中,從左到右均表示解釋。試寫乙個魔王語言的解釋系統,...

棧和佇列 魔王語言解釋

1 作業系統 windows 10 x64 1 首先實現棧和佇列的基本操作,棧和佇列都採用順序儲存結構,佇列通過取模形成迴圈佇列。class stack status push char a status pop char a class queue status enqueue char e st...