資料結構課程設計 魔王語言解釋

2021-08-25 23:37:57 字數 2171 閱讀 9774

[問題描述]

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

(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 能比較...