云南大學軟件學院數(shù)據(jù)結構實驗3
《云南大學軟件學院數(shù)據(jù)結構實驗3》由會員分享,可在線閱讀,更多相關《云南大學軟件學院數(shù)據(jù)結構實驗3(11頁珍藏版)》請在裝配圖網(wǎng)上搜索。
云南大學軟件學院 數(shù)據(jù)結構實驗報告 實驗難度: A □ B □ C □ 序號 學號 姓名 成績 指導教師 (簽名) 學 期: 2017秋季學期 任課教師: 實驗題目: 組員及組長: 承擔工作: 聯(lián)系電話: 電子郵件: 完成提交時間: 年 月 日 一、【實驗構思(Conceive)】(10%) (本部分應包括:描述實驗實現(xiàn)的基本思路,包括所用到的離散數(shù)學、工程數(shù)學、程序設計等相關知識,對問題進行概要性地分析) 魔王語言的解釋規(guī)則: 大寫字母表示魔王語言的詞匯,小寫字母表示人的詞匯語言,魔王語言中可以包含括號,魔王語言的產(chǎn)生式規(guī)則在程序中給定,當接收用戶輸入的合法的魔王語言時,通過調用魔王語言翻譯函數(shù)來實現(xiàn)翻譯。 在 A 的基礎上,(根據(jù)產(chǎn)生式)自定義規(guī)則,將一段魔王的話翻譯為有意義的人類語言(中文):輸入wasjg,則魔王語言解釋為“我愛數(shù)據(jù)結構”。 運用了離散數(shù)學的一些基本知識及程序設計知識。 二、【實驗設計(Design)】(20%) (本部分應包括:抽象數(shù)據(jù)類型的定義和基本操作說明,程序包含的模塊以及各模塊間的調用關系,關鍵算法偽碼描述及程序流程圖等,如有界面則需包括界面設計,功能說明等) //---------------抽象數(shù)據(jù)類型的定義------------------// #define STACK_INIT_SIZE 50 #define STACKINCREMENT 10 #define OVERLOW -2 #define ERROR -1 typedef struct { char *base; //順序棧的棧底指針 int top; //順序棧的棧頂 int size; //棧元素空間的大小 }SqStack; //結構體類型順序棧 typedef struct { char *base; int front; int rear; }SqQueue; //結構體類型隊列 //---------------各個模塊功能的描述------------------// void Init_SqStack(SqStack &s) //初始化順序桟 void Push_SqStack(SqStack &s, char c) //壓入數(shù)據(jù) int Pop_SqStack(SqStack &s, char &e) //出桟 char GetTop_SqStack(SqStack s)//或得棧頂 int IsEmpty_SqStack(SqStack s)//判斷是否空棧 void Init_SqQueue(SqQueue &q)//初始化 void En_SqQueue(SqQueue &q, char c)//進隊列 int De_SqQueue(SqQueue &q, char &e) //出隊列 void Translate(char c) //打印字符 void Reverse(char str[],char strtmp[])//將字符串反向 int Execute(char ch[], SqStack &s, SqQueue &q)//魔王語言操作 調用關系: 三、【實現(xiàn)(Implement)】(30%) (本部分應包括:抽象數(shù)據(jù)類型各操作的具體實現(xiàn)代碼、 關鍵操作的具體算法實現(xiàn)、 函數(shù)實現(xiàn),主程序實現(xiàn)等,并給出關鍵算法的時間復雜度分析。如有界面則需包括界面的關鍵實現(xiàn)方法等。) 主程序模塊: int main() { char ch[100]; char ch1[100]; char ch2[100]; char e; //********************************************************英文解密 printf("請輸入魔王語言:"); gets(ch); SqStack s; SqQueue q; Init_SqStack(s); Init_SqQueue(q); if(Execute(ch,s,q) == 1) { while(De_SqQueue(q,e) == 1) { Translate(e); } } else printf("輸入的括號不匹配!"); //左括號比右括號多,不匹配 //********************************************************中文解密 printf("\n"); printf("請輸入魔王語言:"); gets(ch1); Init_SqStack(s); Init_SqQueue(q); Reverse(ch1,ch2); { for(int i=0;ch2[i]!=\0;i++) Push_SqStack(s,ch2[i]); while(Pop_SqStack(s,e) == 1) { switch(e) { casew: printf("我"); break; casea: printf("愛"); break; cases: printf("數(shù)據(jù)"); break; casej: printf("結"); break; caseg: printf("構"); break; } } } return 0; } 其他函數(shù)實現(xiàn)代碼見七、【代碼】部分。 時間復雜復分析:o(n)。 四、【測試結果(Testing)】(10%) (本部分應包括:對實驗的測試結果,應具體列出每次測試所輸入的數(shù)據(jù)以及輸出的數(shù)據(jù),并對測試結果進行分析,可附截圖) 輸入的魔王語言為:B(ehnxgz)B 翻譯的結果為: tsaedsaeezegexenehetsaedsae 錯誤模式:括號匹配錯誤提示。 輸入的魔王語言為:wasjg 翻譯為漢語的結果為: 我愛數(shù)據(jù)結構 結論:此程序能夠按照給定的翻譯規(guī)則解釋魔王語言。 五、【實驗總結】(10%) (本部分應包括:自己在實驗中完成的任務,及存在的問題,所完成實驗過程中的具體經(jīng)驗總結、心得) 問題關鍵: 1.棧的初始化,入棧出棧操作,棧為空的判斷條件,隊列的初始化,入隊和出隊操作,隊列為空的判斷。以及隊列中最后一個元素被刪除后尾指針的修改。 2.主函數(shù)的操作。由于隊列和棧的操作始終為同一個,所以在主函數(shù)中,采用指針函數(shù)的調用,確保操作在同一個隊列和棧上。 3.一些細節(jié)處理,比如數(shù)組操作等。 4.另在查閱資料時候發(fā)現(xiàn):將魔王語言作為一個字符串讀入進來,首先檢查括號是否匹配,如果不匹配就無法解釋。如果匹配,然后將字符串從尾到頭依次壓入棧S中,將棧S中的內(nèi)容依次彈出壓入棧S2中,直至遇到右括號,將其壓入棧S1中,并將棧S2彈出依次壓入棧S1中,直至遇到左括號壓入棧S1中,這樣棧S1中存放的內(nèi)容就是匹配的第一個內(nèi)重括號,將棧S1棧頂元素左括號彈出,將左括號下面的那個元素保存在e1變量中,然后將其他元素彈出依次壓入棧S3中,在將e1與棧S3中依次彈出的元素壓入棧S2中,重復這個過程,直至將魔王語言中所有的括號都處理完為止,所以這個思路可以處理多重括號嵌套的問題。 六、思考題或【項目運作描述(Operate)】(10%) (注:選擇C難度的才需要填寫“項目運作描述”,其他難度的只需完成思考題) (項目運作描述應包括:項目的成本效益分析,應用效果等的分析。) 1.棧:特點就是一個先進后出的結構。 主要用途:函數(shù)調用和返回,數(shù)字轉字符,表達式求值,走迷宮等等。在CPU內(nèi)部棧主要是用來進行子程序調用和返回,中斷時數(shù)據(jù)保存和返回。在編程語言中:主要用來進行函數(shù)的調用和返回。可以說在計算機中,只要數(shù)據(jù)的保存滿足先進后出的原理,都優(yōu)先考慮使用棧,所以棧是計算機中不可缺的機制。 隊列:特點就是一個先進先出的結構。只要滿足數(shù)據(jù)的先進先出原理就可以使用隊列。 2. 可以采用順序存儲結構和鏈式存儲結構,因為他們都是線性表,就像一排站在一條線上的人,位置關系是一個挨一個的,這樣的順序不會改變,而改變點都在頭或者尾,仍然保持形態(tài)不變的。 七、【代碼】(10%) (本部分應包括:完整的代碼及充分的注釋。 注意紙質的實驗報告無需包括此部分。格式統(tǒng)一為,字體: Georgia , 行距: 固定行距12,字號: 小五) #include- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- 云南大學 軟件 學院 數(shù)據(jù)結構 實驗
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學習交流,未經(jīng)上傳用戶書面授權,請勿作他用。
鏈接地址:http://kudomayuko.com/p-11057749.html