棧和佇列 魔王語言解釋

2021-10-10 04:56:09 字數 2124 閱讀 1175

1、作業系統: windows 10 x64

(1)首先實現棧和佇列的基本操作,棧和佇列都採用順序儲存結構,佇列通過取模形成迴圈佇列。

class stack

status push(char a)

status pop(char& a)

};

class queue

status enqueue(char e)

status dequeue(char& e)

};

(2)分析演算法:先通過字串將魔王語言儲存後,自右至左進棧,括號內字元自右至左入佇列進行處理後出佇列進棧。

(3)transform方法實現:傳入字元後,通過switch語句,輸出字母對應的文字。若為『a』或『b』則多次呼叫該函式。注意:在每一種可能性操作後,不要忘了break。

status transform(char a)

return ok;

}

(4)getwords方法實現:讀取字串後,從右至左字母依次入棧。

status getwords(stack &mowang)//自右至左進棧

return ok;

}

(5)dealwords方法實現:初始化flag=0。棧不為空時,第一步,判斷出棧字元e,若為『(』,下乙個字母出棧且做標記flag=1;若為『)』,做標記flag=2,注意:與』(『不同,由於要處理括號內字母,此時下乙個字母(括號外)先不進行出棧。第二步,若flag==0,即表示此時字母不在括號內,直接將此字母通過transform函式進行轉換;若flag為1,即字母在括號內,通過enqueue函式進入佇列中;若flag為2,即括號內字母讀取結束,此時將flag設回0,表示接下來字母不在括號內。按照轉換規則,括號內第乙個字母出隊,其餘字母依次出佇列。每次其餘字母入棧前第乙個字母先入棧,直至隊列為空,最後第乙個字母還需要再入棧一次。

status dealwords(stack& mowang, queue& kuohao)

if (e == ')')

if (flag==0)

if(flag==1)

if (flag == 2)//在括號內的字母 處理並進棧後再進行後面字母的統一出棧操作

mowang.push(c);//最後還要再進一次

} }return ok;

}

#define smaxsize 100

#define qmaxsize 100

#define ok 1

#define error 0

#define overflow -2

#includeusing namespace std;

typedef int status;

class stack

status push(char a)

status pop(char& a) };

class queue

status enqueue(char e)

status dequeue(char& e) };

status transform(char a)

return ok;

}status getwords(stack &mowang)//自右至左進棧

return ok;

}status dealwords(stack& mowang, queue& kuohao)

if (e == ')')

if (flag==0)

if(flag==1)

if (flag == 2)//在括號內的字母 處理並進棧後再進行後面字母的統一出棧操作

mowang.push(c);//最後還要再進一次

棧和佇列的應用 魔王語言

一 基本要求 用下述三條具體規則 實現。設大寫字母表示魔王語言的詞彙 小寫字母表示人的語言詞彙 希臘字母表示可以用大寫字母或小寫字母代換的變數。魔王語言可含人的詞彙。1 a sae a的規則可以自己定義,比如a abc 2 b tada b的規則也可以自己定義哈 3 1 2.n n n 1.1 二 ...

魔王語言解釋

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

C語言魔王語言解釋

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