共计 2539 个字符,预计需要花费 7 分钟才能阅读完成。
download:Spark+ES+ClickHouse 构建 DMP 用户画像
include<iostream.h>
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 '<';break; | |
case '/':return '<';break; | |
case '(':return '<';break; | |
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 '*': | |
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 '/': | |
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 '(': | |
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 ')': | |
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<<"输出表达式的两头值及最终后果局限于 0~9 之间的个位数并以 #号结束"<<endl; | |
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<<GetTop(OPAN)<<endl; | |
return; |
}
正文完