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;

}