zoukankan      html  css  js  c++  java
  • 【计蒜课】【数据结构】【栈的复习】

    #include <stdio.h>

    #include <stdlib.h>

    #include <ctype.h>

    #define ERROR 0

    #define OK 1

    typedef struct Stack {

        int *elements;

        int max_size, top_index;

    } Stack;

    void init(Stack *s,int length) {

        s->elements = (int *)malloc(sizeof(int) * length);

        s->max_size = length;

        s->top_index = -1;

    }

    int push(Stack *s,int element) {

        if (s->top_index >= s->max_size - 1) {

            return ERROR;

        }

        s->top_index++;

        s->elements[s->top_index] = element;

        return OK;    

    }

    int pop(Stack *s) {

        if (s->top_index < 0) {

            return ERROR;

        }

        s->top_index--;

        return OK;

    }

    int top(Stack *s) {

        return s->elements[s->top_index];  

    }

    int empty(Stack *s) {

        if (s->top_index < 0) {

            return 1;

        } else {

            return 0;

        }   

    }

    int precede(char a,char b) {

        if(a=='*' || a=='/'){

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

                return 0;

            else

                return 1;

            

        }

        else

            return 0;

    }

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

        if (theta == '+') {

            return a + b;

        }

        if(theta == '-'){

            return b - a;

        }

        if(theta == '/'){

            return b / a;

        }

        else {

            return a * b;

        }

    }

    void calc(Stack *numbers, Stack *operators) {

        int a=top(numbers);

        pop(numbers);

        int b=top(numbers);

        pop(numbers);

        push(numbers,operate(top(operators),a,b));

        pop(operators);  

    }

    void clear(Stack *s) {

        free(s->elements);

        free(s);   

    }

    int main() {

        int m;

        scanf("%d",&m);

        Stack *numbers=(Stack*)malloc(sizeof(Stack));

        init(numbers,m);

        Stack *operators=(Stack*)malloc(sizeof(Stack));

        init(operators,m);

        char *buffer=(char*)malloc(sizeof(char)*(m+1));

        scanf("%s",buffer);

        int i=0;

        while(i<m){

            if(isdigit(buffer[i])){

                push(numbers,buffer[i]-'0');

                i++;

            }else{

                if(empty(operators) || precede(buffer[i],top(operators))){

                    push(operators,buffer[i]);

                    i++;

                }

                else{

                    calc(numbers,operators);

                }

            }

        }

        while(!empty(operators)){

            calc(numbers,operators);

        }

        printf("%d ",top(numbers));

        clear(numbers);

        clear(operators);

        free(buffer);

        return 0;

    }

  • 相关阅读:
    《Spring_Four》第二次作业 基于Jsoup的大学生考试信息展示系统开题报告
    《Spring_Four》第一次作业:团队亮相
    4.11jsp
    4.7jsp
    3.17jsp
    3.24jsp
    3.10jsp
    3.4软件测试
    回文串
    博客园第二次作业
  • 原文地址:https://www.cnblogs.com/P201821430045/p/12106648.html
Copyright © 2011-2022 走看看