《資料結構與演算法統計》
實驗報告
專業:班級:
學號:姓名:
一、 實驗目的
1. 學習使用c++實現棧的儲存結構;.通過程式設計、上機除錯,進一步理解棧的基本概念;
2. 鍛鍊獨立程式設計與思考的能力,提公升實踐能力。
二、 實驗內容
簡單計算器。
請按照四則運算加、減、乘、除、冪(^)和括號的優先關係和慣例,編寫計算器程式。要求:
③ 從鍵盤輸入乙個完整的表示式,以回車作為表示式輸入結束的標誌。
④ 輸入表示式中的數值均為大於等於零的整數。中間的計算過程如果出現小數也只取整。
例如,輸入:4+2*5輸出:14
輸入:(4+2)*(2-10輸出:-48
三、 程式設計
1、概要設計
為實現上述功能,應該使用兩個棧,分別寄存運算元和運算子。為此需要棧的抽象資料結構。
⑴ 棧的抽象資料型別定義如下:
adt stack
資料關係:
r1 =
基本操作:
initstack1(sqstack1 &s)
操作結果:建立乙個空棧s,以儲存運算子
initstack2(sqstack2 &s)
操作結果:建立乙個空棧s,以儲存運算元
push1(sqstack1 &s,char e)
初始條件:棧s已存在
操作結果:插入運算子e作為新的棧頂元素
push2(sqstack2 &s,int e)
初始條件:棧s已存在
操作結果:插入運算元e作為新的棧頂元素
precede(char d,char c)
初始條件:d,c為運算子
操作結果:若d優先順序大於c,返回》;若d優先順序小於c,返回<;若d優先順序等於c,返回=;
gettop1(sqstack1 &s)
初始條件:棧s已存在且非空
操作結果:用e返回寄存運算子棧s的棧頂元素
gettop2(sqstack2 &s)
初始條件:棧s已存在且非空
操作結果:用e返回寄存運算元棧s的棧頂元素
pop1(sqstack1 &s,char &e)
初始條件:棧s已存在且非空
操作結果:刪除寄存運算子棧s的棧頂元素
pop2(sqstack2 &s,int &e)
初始條件:棧s已存在且非空
操作結果:刪除寄存運算元棧s的棧頂元素
operate(int a,char theta,int b)
初始條件:a,b為整數,theta為運算子
操作結果:返回a與b運算的結果
yunsuan()
初始條件:輸入合法的表示式
操作結果:返回表示式的值
}adt stack
⑵主程式流程
呼叫yunsuan()函式計算表示式的值,輸出,在螢幕上列印出來。
⑶各模組的呼叫關係
先由主函式呼叫計算求值模組;再由求值模組呼叫棧構造模組,表示式轉換模組及表示式求值模組,計算並返回表示式的值;最後由主函式在螢幕上輸出表示式的結果。
⑷流程圖
2、詳細設計
⑴資料型別設計
typedef struct sqstack1;//定義運算子棧資料型別
typedef struct sqstack2; //定義運算元棧資料型別
⑵操作演算法設計
int initstack1(sqstack1 &s) //構造運算子棧
int initstack2(sqstack2 &s)//構造運算元棧
char gettop1(sqstack1 &s)//取得運算子棧棧頂元素
e=*(
return e;
}int gettop2(sqstack2 &s) //取得運算元棧棧頂元素
e=*(
return e;
}int push1(sqstack1 &s,char e)//插入元素e作為運算子棧棧頂元素
*return 1;
}int push2(sqstack2 &s,int e)//插入元素e作為運算元棧棧頂元素
*return 1;
}int pop1(sqstack1 &s,char &e)//刪除運算子棧棧頂元素,並用e返回
e=*return 1;
}int pop2(sqstack2 &s,int &e)//刪除運算子棧棧頂元素,並用e返回
e=*return 1;
}char precede(char d,char c)//判斷d與c的優先順序
{switch(c)
{case'+':switch(d)
case'+':return '>';break;
case'-':return '>';break;
case'*':return '>';break;
case'/':return '>';break;
case'^':return '>';break;
case'(':return '<';break;
case')':return '>';break;
case'=':return '<';break;
case'-':switch(d)
case'+':return '>';break;
case'-':return '>';break;
case'*':return '>';break;
case'/':return '>';break;
case'^':return '>';break;
case'(':return '<';break;
case')':return '>';break;
case'=':return '<';break;
case'*':switch(d)
case'+':return '<';break;
case'-':return '<';break;
case'*':return '>';break;
case'/':return '>';break;
case'^':return '>';break;
case'(':return '<';break;
case')':return '>';break;
case'=':return '<';break;
case'/':switch(d)
case'+':return '<';break;
case'-':return '<';break;
case'*':return '>';break;
case'/':return '>';break;
case'^':return '>';break;
case'(':return '<';break;
case')':return '>';break;
case'=':return '<';break;
case'^':switch(d)
case'+':return '<';break;
case'-':return '<';break;
case'*':return '<';break;
case'/':return '<';break;
case'^':return '>';break;
case'(':return '<';break;
case')':return '>';break;
case'=':return '<';break;
case'(':switch(d)
case'+':return '<';break;
case'-':return '<';break;
case'*':return '<';break;
case'/':return '<';break;
case'^':return '<';break;
case'(':return '<';break;
case'=':return '<';break;
case')':switch(d)
資料結構實驗二
實驗二線性表的建立及基本操作方法實現 實驗專案 完成線性表的基本運算,從而了解線性表的基本特徵,基本運算演算法 一 實驗目的 1.理解和掌握線性表的型別定義方法。2.掌握順序表中的基本運算,包括順序表的建立 元素的新增 刪除,判空及判滿等基本操作。3.掌握鍊錶中的基本運算,包括結點的定義,鍊錶的建立...
資料結構實驗二題目
資料結構實驗報告 實驗名稱 實驗2 棧和佇列 學生姓名 班級 班內序號 學號 日期 2013年11月8日 1 實驗要求 實驗目的 進一步掌握指標 模板類 異常處理的使用 掌握棧的操作的實現方法 掌握佇列的操作的實現方法 學習使用棧解決實際問題的能力 學習使用佇列解決實際問題的能力 實驗內容 根據棧和...
資料結構實驗
資訊23 2120502060 古碧野一 實驗題目 建立乙個線性表,實現線性表的建立,插入,刪除和遍歷 二.實驗目的和要求 實驗目的 熟練掌握線性表的基本操作在順序儲存結構上的實現。實驗要求 用c語言編寫源程式,並除錯通過,測試正確。三.主要儀器裝置 windows xp操作平台,visual c ...