[問題描述]
有乙個魔王總是使用自己的一種非常精練而抽象的語言講話,沒人能聽的懂。但他的語言是可以逐步解釋**能懂得語言的,因為他的語言是由以下兩種形式的規則由人的語言逐 步抽象上去的:
(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...