1、需求分析
設計乙個程式,演示用算符優先法對算術表示式求值的過程。利用算符優先關係,實現對算術四則混合運算表示式的求值。
(1)輸入的形式:表示式,例如2*(3+4)
包含的運算子只能有'+' 、'-' 、'*' 、'/' 、'('、 ')';
(2)輸出的形式:運算結果,例如2*(3+4)=14;
(3)程式所能達到的功能:對表示式求值並輸出
2、系統設計
1、棧的抽象資料型別定義:
adt stack
資料關係:r1=
約定an端為棧頂,ai端為棧底
基本操作:
push(&s,e)
初始條件:棧s已存在
操作結果:插入元素e為新的棧頂元素
pop(&s,&e)
初始條件:棧s已存在且非空
操作結果:刪除s的棧頂元素,並用e返回其值
}adt stack
3、各個模組的主要功能:
*push(sc *s,char c):把字元壓棧
*push(sf *s,float f):把數值壓棧
*pop(sc *s):把字元退棧
*pop(sf *s):把數值退棧
operate(a,theta,b):根據theta對a和b進行'+' 、'-' 、'*' 、'/' 、'^'操作
in(test,*testop):若test為運算子則返回true,否則返回false
returnopord(op,*testop):若test為運算程式設計客棧符,則返回此運算子在陣列中的下標
precede(aop,bop):根據運算子優先順序表返回aop與bop之間的優先順序
evaluateexpression(*myexpression):用算符優先法對算術表示式求值
完整的程式**如下:
複製** **如下:
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"math.h"
#define true 1
#define false 0
#define opsetsize 8
typedef int status;
unsigned char prior[8][8] =
; typedef struct stackchar
sc; //stackchar型別的結點sc
typedef struct stackfloat
sf; //stackfloat型別的結點sf
sc *push(sc *s,char c) //sc型別的指標push,返回p
sf *程式設計客棧push(sf *s,float f) //sf型別的指標push,返回p
sc *pop(sc *s) //sc型別的指標pop
sf *pop(sf *s) //sf型別的指標pop
float operate(float a,unsigned char theta, float b) //計算函式operate }
char opset[opsetsize]=;
status in(char test,char *testop)
return find;
} status returnopord(char op,char *testop)
}char precede(char aop, char bop)
float evaluateexpression(char* myexpression)
; optr=push(optr,'#');
c=strcat(myexpression,dr);
strcpy(tempdata,"\0");//字串拷貝函式
while (*c!= '#' || optr->c!='#')
} else // 不是運算子則進棧
//switch
} } //while
return opnd->f;
} //evaluateexpression
int main(void)
測試結果如下:
本文標題: 資料結構課程設計-用棧實現表示式求值的方法詳解
本文位址:
資料結構課程設計 算術表示式求值
題目 編制乙個用算符優先法對算術表示式求值的程式 evaluate expression include include includeusing namespace std int a 7 7 存放運算子的優先順序,3為 2為 1為 bool isoperator char optr 判斷是否操作...
C 算術表示式的求值 資料結構課程設計
資料結構課程設計 算術表示式的求值1.在課程設計中提高學生的動手能力和程式設計能力 2.在課程設計中提高資料結構中理論知識 棧和二叉樹等知識 的應用。3.在課程設計中提高自己對各個方面知識的綜合能力。乙個算術表示式是由運算元 operand 運算子 operator 和界限符 delimiter 組...
表示式求值課程設計
下面 include include include include include include include includeusing namespace std define maxn 1000 using namespace std stacks 定義了乙個棧,char tempstr ...