[問題描述]
有乙個魔王總是使用自己的一種非常精練而又抽象的語言講話,沒有人能聽得懂,但他的語言是可以逐步解釋**能聽懂的語言,因為他的語言是由以下兩種形式的規則由人的語言逐步抽象上去的:
(1) α -> β1β2…βm
(2)(θδ1δ2…δn)->θδnθδn-1… θδ1θ
在這兩種形式中,從左到右均表示解釋。試寫乙個魔王語言的解釋系統,把他的話解釋**能聽得懂的話。
[基本要求]
用下述兩條具體規則和上述規則形式(2)實現。設大寫字母表示魔王語言的詞彙;小寫字母表示人的語言詞彙;希臘字母表示可以用大寫字母或小寫字母代換的變數。魔王語言可含人的詞彙。
(1)b -> tada
(2)a -> sae
[測試資料]
b(ehnxgz)b解釋成tsaedsaeezegexenehetsaedsae
解題思路:
將魔王語言作為乙個字串讀入進來,首先檢查括號是否匹配,如果不匹配就無法解釋。如果匹配,然後將字串從尾到頭依次壓入棧s中,將棧s中的內容依次彈出壓入棧s2中,直至遇到右括號,將其壓入棧s1中,並將棧s2彈出依次壓入棧s1中,直至遇到左括號壓入棧s1中,這樣棧s1中存放的內容就是匹配的第乙個內重括號,將棧s1棧頂元素左括號彈出,將左括號下面的那個元素儲存在e1變數中,然後將其他元素彈出依次壓入棧s3中,在將e1與棧s3中依次彈出的元素壓入棧s2中,重複這個過程,直至將魔王語言中所有的括號都處理完為止,所以這個思路可以處理多重括號巢狀的問題。。
完整的實現**如下:
#include "iostream"
#include "string"
using namespace std;
class sqstack //使用鍊錶實現棧類
;node *top,*base;
public:
sqstack();
virtual ~sqstack();
bool push(char e);
bool pop(char &e);
bool stackempty();
};//棧的基本操作
sqstack::sqstack()
sqstack::~sqstack()
bool sqstack::push(char e) //壓棧操作
}bool sqstack::pop(char &e) //出棧操作
}bool sqstack::stackempty() //判斷是否為空棧
class sqqueue //使用鍊錶實現佇列類
;node *head,*last;
public:
sqqueue();
virtual ~sqqueue();
bool enqueue(char e);
bool dequeue(char &e);
bool queueempty();
void outqueue();
void enqueue_a();
void enqueue_b();
};//佇列的基本操作
sqqueue::sqqueue()
sqqueue::~sqqueue()
bool sqqueue::enqueue(char e) //入佇列
}bool sqqueue::dequeue(char &e) //出佇列
}void sqqueue::outqueue() //輸出佇列中的資料
return true;
}void push_and_pop(sqstack &s1,sqstack &s2) //處理規則2
while(!s3.stackempty())
s2.push(e1);
} }}int main(void)
{ char e;
bool flag;
sqstack s,s1,s2;
sqqueue q;
sqstack();
sqqueue();
flag=read_language(s); //讀入魔王語言
if(!flag)
{ cout<
執行結果如下:
一重括號:
多重括號:
括號不匹配:
資料結構 魔王語言解釋
一 需求分析 1 有乙個魔王總是使用自己的一種非常精煉而抽象的語言講話,沒有人能聽得懂,但他的語言是可以逐步解釋 能聽懂的語言,因為他的語言是由以下兩種形式的規則由人的語言逐步抽象上去的 1 1 2 m 2 1 2 n n n 1 1 在這兩種形式中,從左到右均表示解釋。試寫乙個魔王語言的解釋系統,...
資料結構課程設計
資料結構課程設計 include define n 30 include include includeusing namespace std struct node typedef node phone,mingzi node hashnumble node hashname int hash1 ...
資料結構課程設計
小明是乙個計算機專業top student 祝賀他畢業了。並準備到銀行參加工作。上班第一天,經理叫他編制乙個實現乙個活期儲蓄處理程式,算作考查。上班第一天,一定要給領導乙個好印象,小明二話沒說,就答應了。現要你是小明了,請完成如下題目功能。儲戶開戶 銷戶 存入 支出活動頻繁,系統設計要求 1 能比較...