資料結構實驗二

2022-09-20 09:03:05 字數 4015 閱讀 2231

《資料結構與演算法統計》

實驗報告

專業:班級:

學號:姓名:

一、 實驗目的

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 ...