1.
實驗目的
熟練掌握棧的基本操作,深入了解棧的特性,能在實際問題的背景下靈活運用他們,並加深對這種結構的理解。
2.實驗內容
設計乙個程式,演示用算符優先法對算術表示式求值的過程。以字串行的形式從終端輸入語法正確的、不含變數的整數表示式。利用教科書表3.1給出的算符優先關係,實現對算術四則運算混合運算表示式的求值,並仿照教科書的例子3-1演示在求值中運算子棧、運算數棧、輸入字元和主要操作的變化。
#include#include#define ok 1
#define error 0
#define stackincrement 5
#define stack_init_size 10
typedef char selemtype;
typedef int status;
typedef structsqstack;
char prior[7][7]=,,,
,,,};//定義算符之間優先關係的二維陣列
//構造乙個存放char型資料的空棧
status initstack(sqstack *s)
//入棧
status push(sqstack *s,selemtype e)
*s->top++ = e;
return ok;
}//出棧
status pop(sqstack *s,selemtype *e)
*e = *--s->top;
return ok;
}//得到棧頂元素
selemtype gettop(sqstack *s)
//確定輸入的字元如果是操作符的話判斷在二維陣列中的下標 若是數字的話就另外與操作符區分開 便於在輸入表示式時是入哪個棧
int index(char c)
}//判斷優先順序,返回大小 < > = !
char priority(char a,char b)
//簡單表示式求值
int reckon(int a,char theta,int b)
}//判斷是字元是否是數字
status isdigit(char ch)
//算術表示式求值
void getexpressionvalue()
for(int j=0;j':pop(&opnd,&b);
pop(&opnd,&a);
pop(&optr,&theta);
push(&opnd,reckon(a,theta,b));
break;//將結果入棧
case '=':pop(&optr,&theta);
c = getchar();
break;//說明括號相遇 刪除棧內括號即可
default:break;
}} }
pop(&opnd,&result);
printf("結果是:%d",result);
}main()
資料結構之 用C 實現算術表示式求值
基本功能 利用棧實現整數的加減乘除運算。使用方法 輸入表示式之後再輸入 表示表示式結束,如下圖 缺點 不能進行小數的運算 如下 include include include using namespace std define maxnum 50 class stack for number fl...
算術表示式求值(C語言棧)
題目描述 表示式計算是實現程式語言的基本問題之一,也是棧的應用的乙個典型例子。設計乙個程式,演示用運算子優先法對算數表示式求值的過程。基本要求 以字串行的形式從終端輸入語法正確的 不含變數的整數表示式。利用教科書表3.1給出的運算子優先關係,實現對算數四則混合運算表示式的求值,並仿照教科書的例3.1...
資料結構 實驗三 算術表示式求值演示
資料結構 實驗三 算術表示式求值演示 基本上已經ok了 測試用例 8 1 2 3 4 88 1 5 1024 4 8 1024 4 8 20 2 6 2 3 3 3 8 9 8 2 6 2 3 6 6 6 6 6 6 3 2 6 2 include include include using nam...