栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

中缀表达式转后缀表达式(个位数四则运算,C语言)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

中缀表达式转后缀表达式(个位数四则运算,C语言)

#include
#include
struct stack{
    char *data;
    int top;
    int maxSize;
};
struct stack *createStack(int maxsize){
    struct stack *s;
    s=(struct stack *)malloc(sizeof(struct stack));
    s->data=(char *)malloc(sizeof(char)*maxsize);
    s->top=-1;
    s->maxSize=maxsize;
    return s;
}
int isFull(struct stack *s){
    return s->top==s->maxSize-1;
}
int isEmpty(struct stack *s){
    return s->top==-1;
}
void push(struct stack *s,char ch){
    if(isFull(s)){
        printf("stack is fulln");
        return;
    }
    s->data[++s->top]=ch;
}
char pop(struct stack *s){
    if(isEmpty(s)){
        printf("stack is emptyn");
        exit(-1);
    }
    return s->data[s->top--];
}
struct queue{
    char *data;
    int front,rear;
    int size;
    int maxsize;
};
struct queue *create(int maxSize){
    struct queue *q;
    q=(struct queue *)malloc(sizeof(struct queue));
    q->data=(char *)malloc(sizeof(char)*maxSize);
    q->front=q->rear=0;
    q->size=0;
    q->maxsize=maxSize;
    return q;
}
void inqueue(struct queue *q,char ch){
    if(q->size==q->maxsize){
        printf("queue is fulln");
        return;
    }
    q->data[q->rear++]=ch;
    if(q->rear==q->maxsize){
        q->rear=0;
    }
    q->size++;
}
char dequeue(struct queue *q){
    if(q->size==0){
        printf("queue is emptyn");
        exit(-1);
    }
    char temp = q->data[q->front++];
    if(q->front==q->maxsize){
        q->front=0;
    }
    q->size--;
    return temp;
}
void PrintQueue(struct queue *q){
    int temp=q->front;
    for(int i=0;isize;i++){
        printf("%ct",q->data[temp++]);
        temp=temp%q->maxsize;
    }
}
int no_priority(int map[4][4],char ch1,char ch2){
    int i,j;
    switch(ch1){
        case '+':i=0;break;
        case '-':i=1;break;
        case '*':i=2;break;
        case '/':i=3;break;
        default:printf("error.");
    }
    switch(ch2){
        case '+':j=0;break;
        case '-':j=1;break;
        case '*':j=2;break;
        case '/':j=3;break;
        default:printf("error.");
    }
    return map[i][j];
}
int main(){
    int map[4][4]={
    1,1,1,1,
    1,1,1,1,
    0,0,1,1,
    0,0,1,1,
    };
    struct stack *s;
    int n=20;
    s=createStack(n);
    char str[n];
    printf("请输入中缀表达式:");
    scanf("%s",str);
    struct queue *q;
    q=create(n);
    int k=0;
    while(str[k]!=''){
        if(str[k]>=48&&str[k]<=57){
            inqueue(q,str[k]);
        }else if(isEmpty(s)||str[k]=='('){
            push(s,str[k]);
        }else if(str[k]==')'){
            char ch=pop(s);
            while(ch!='('){
                inqueue(q,ch);
                ch=pop(s);
            }
        }else{
            while(!isEmpty(s)&&s->data[s->top]!='('&&no_priority(map,str[k],s->data[s->top])){
                char ch=pop(s);
                inqueue(q,ch);
            }
            push(s,str[k]);
        }
        k++;
    }
    while(!isEmpty(s)){
        char ch=pop(s);
        inqueue(q,ch);
    }
    printf("后缀表达式:n");
    PrintQueue(q);
    return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/384328.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号