java字符串表达式求值利用栈_C++利用链栈实现表达式求值

#include

typedef int Status;

typedef char Cstack;

#define OK 1

#define ERROR 0

typedef struct StackNode

{

Cstack data;

struct StackNode *next;

}StackNode,*LinkStack;

Status InitStack(LinkStack &S)

{

S=NULL;

return OK;

}

Status Push(LinkStack &S,Cstack e)

{

StackNode *p;

p=new StackNode;

p->data=e;

p->next=S;

S=p;

return OK;

}

Status Pop(LinkStack &S,Cstack &e)

{

StackNode *p;

if(S==NULL) return ERROR;

e=S->data;

p=S;

S=S->next;

delete p;

return OK;

}

Cstack GetTop(LinkStack S)

{

if(S!=NULL)

return S->data;

}

Status In(Cstack ch)

{

cin>>ch;

if(ch=='+')

return OK;

else if(ch=='-')

return OK;

else if(ch=='*')

return OK;

else if(ch=='/')

return OK;

else if(ch=='#')

return OK;

else

return ERROR;

}

Cstack Precede(Cstack t1,Cstack t2)

{

switch(t1)

{

case '+':

switch(t2)

{

case '+':return '>';break;

case '-':return '>';break;

case '*':return '

case '/':return '

case '(':return '

case ')':return '>';break;

case '#':return '>';break;

}

break;

case '-':

switch(t2)

{

case '+':return '>';break;

case '-':return '>';break;

case '*':return '

case '/':return '

case '(':return '

case ')':return '>';break;

case '#':return '>';break;

}

break;

case '*':

switch(t2)

{

case '+':return '>';break;

case '-':return '>';break;

case '*':return '>';break;

case '/':return '>';break;

case '(':return '

case ')':return '>';break;

case '#':return '>';break;

}

break;

case '/':

switch(t2)

{

case '+':return '>';break;

case '-':return '>';break;

case '*':return '>';break;

case '/':return '>';break;

case '(':return '

case ')':return '>';break;

case '#':return '>';break;

}

break;

case '(':

switch(t2)

{

case '+':return '

case '-':return '

case '*':return '

case '/':return '

case '(':return '

case ')':return '=';break;

case '#':return '>';break;

}

break;

case ')':

switch(t2)

{

case '+':return '>';break;

case '-':return '>';break;

case '*':return '>';break;

case '/':return '>';break;

case '(':return '=';break;

case ')':return '>';break;

case '#':return '>';break;

}

break;

case '#':

return '=';

break;

}

}

Cstack Operator(Cstack t1,Cstack t2,Cstack t3)

{

t1=t1-48;

t3=t3=48;

int c;

switch(t2)

{

case '+':

c=t1+t2+48;

return c;

break;

case '-':

c=t1-t2+48;

return c;

break;

case '*':

c=t1*t2+48;

return c;

break;

case '/':

c=t1/t2+48;

return c;

break;

}

}

void main()

{

LinkStack OPTR,OPAN;

Cstack cha1,cha2,x,cha,thea;

InitStack(OPTR);

InitStack(OPAN);

Push(OPTR,'#');

cout<

while(cha!='#'||GetTop(OPTR)!='#')

{

cin>>cha;

if(!In(cha))

Push(OPAN,cha);

else

switch(Precede(GetTop(OPTR),cha))

{

case '

Push(OPTR,cha);

cin>>cha;

break;

case '>':

Pop(OPTR,thea);

Pop(OPAN,cha1);

Pop(OPAN,cha2);

Push(OPAN,(cha1,thea,cha2));

break;

case '=':

Pop(OPTR,x);

break;

}

}

cout<

return;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值