关闭

cal.stack

48人阅读 评论(0) 收藏 举报

#define MAX 100

 

struct operand

{

    int data[MAX];

    int top;

};

 

struct operator_ch

{

    int top;

    char data[MAX];

};

 

 

typedef struct operand OPND;

typedef struct operator_ch OPCH;

 

void init_OPND_stack(OPND *stack)

{

stack->top = -1;

}

 

void init_OPCH_stack(OPCH *stack)

{

stack->top = -1;

}

 

void is_empty_OPND(OPND *stack)

{

if(stack->top == -1)

{

return -1;

}

 

return 0;

}

 

void is_empty_OPCH(OPCH *stack)

{

if(stack->top == -1)

{

return -1;

}

 

return 0;

}

 

int get_OPND_top(OPND *stack)

{

if(is_empty_OPND(stack) == -1)

{

return -1;

}

 

return stack->data[stack->top];

}

 

int get_OPCH_top(OPCH *stack)

{

if(is_empty_OPCH(stack) == -1)

{

return -1;

}

 

return stack->data[stack->top];

}

 

int push_OPND(OPND *stack, int num)

{

    stack->data[++(stack->top)] = num;

}

 

int push_OPCH(OPND *stack, char ch)

{

    stack->data[++(stack->top)] = ch;

}

 

int pop_OPND(OPND *stack)

{

if(is_empty_OPND(stack) == -1)

{

return -1;

}

    

int num = stack->data[stack->top];

 

(stack->top)--;

 

return num;

}

 

char pop_OPCH(OPCH *stack)

{

if(is_empty_OPCH(stack) == -1)

{

return -1;

}

    

char ch = stack->data[stack->top];

 

(stack->top)--;

 

return ch;

}

 

int get_priority(char ch)

{

if(ch == '+' || ch == '-')

{

return 1;

}

 

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

{

return 2;

}

}

 

int compare_priority(char op_ch, char ch)

{

if(get_priority(op_ch) > get_priority(ch))

{

return 1;

}

return -1;

}

 

int count(int num1, int num2, char ch)

{

    int result;

 

switch(ch)

{

case '+':

{

            result = a + b;

break;

}

 

case '-':

{

result = a - b;

break;

}

case '*':

{

result = a * b;

break;

}

case '-':

{

result = a / b;

break;

}

}

 

return result;

}

 

int main()

{

    char ch;

char op_ch;

 

while((ch = getchar()) != '\n')

{

        if(ch >= '0' && ch <= '9')

{

            push_stack1();

}

 

if(ch == '+' || ch == '-' || ch == '*' || ch == '/')

{

op_ch = pop_stack2();

if(compare(op_ch,ch) > 0)

{

push_stack2(ch);

}

else

{

count(a,b,op_ch);

}

}

}

return 0;

}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:17174次
    • 积分:1512
    • 等级:
    • 排名:千里之外
    • 原创:132篇
    • 转载:16篇
    • 译文:6篇
    • 评论:0条
    阅读排行
    评论排行