棧應用 表示式求值

2021-06-23 00:57:39 字數 1444 閱讀 4247

#include#include#define length 100						//初始分配棧的長度

#define add_len 10 //棧長增量

typedef struct //定義字元棧

sqstack;

void initstack(sqstack &s); //初始化乙個棧

void push(sqstack &s,int e); //e進入棧頂

void pop(sqstack &s,int &m); //棧頂元素出棧

int gettop(sqstack &s); //獲得棧頂元素

int in(int c,char arr); //判斷c是否是在運算子陣列中從而判定是否是運算子

char precede(char x,char y); //比較x,y的優先順序

int operate(int a,int theta,int b); //將a,b進行theta運算

void main()

;//初始化運算子陣列

int a,b,c,theta,n;

printf("please input the expression and use '#' to end up:\n");

c=getchar();

initstack(optr);

push(optr,'#');

initstack(opnd);

while(c!='#'||gettop(optr)!='#')

}else

switch(precede(gettop(optr),c))

}printf("the value of the expression is:%d\n",gettop(opnd));

}void initstack(sqstack &s)

s.top=s.base;

s.stacksize=length;

}void push(sqstack &s,int e)

s.top=s.base+s.stacksize;

s.stacksize+=add_len;

} *s.top++=e;

} void pop(sqstack &s,int &m)

m=*--s.top;

}int gettop(sqstack &s)

return *(s.top-1);

}int in(int c,char arr)

char precede(char x,char y)

if(x=='*'||x=='/')

if(x=='(')

if(x==')')

return '>';

if(x=='#') }

int operate(int a,int theta,int b)

棧應用 表示式求值

include stdafx.h include using namespace std const int explenght 20 const int stack init size 20 const int stack incrment 10 templateclass stack stack...

表示式求值 棧的應用

表示式求值 西西設計的機械人卡多掌握了加減法運算以後,最近又學會了一些簡單的函式求值,比如,它 知道函式min 20,23 的值是20 add 10,98 的值是108等等。經過訓練,西西設計的機械人卡多 甚至會計算一種巢狀的更複雜的表示式。假設表示式可以簡單定義為 1.乙個正的十進位制數 x 是乙...

棧的應用 表示式求值

include include include define true 1 define flase 0 define ok 1 define error 0 define overflow 1 define stack size 100 define stackincrement 10 typed...