数据结构实验之栈与队列二:一般算术表达式转换成后缀式

来源:互联网 发布:linux lcd驱动移植 编辑:程序博客网 时间:2024/06/06 17:35

数据结构实验之栈与队列二:一般算术表达式转换成后缀式

Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic

Problem Description

对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。

Input

输入一个算术表达式,以‘#’字符作为结束标志。

Output

输出该表达式转换所得到的后缀式。

Example Input

a*b+(c-d/e)*f#

Example Output

ab*cde/-f*+

Hint

Author

 

#include <iostream>#include<stdio.h>#include <stdlib.h>#include <string>using namespace std;#define maxsize 10000#define numsize 10000typedef char element;typedef int status;typedef struct{    element *top;    element *base;    int stacksize;}sqstack;status initstack(sqstack &s){    s.base=(element *)malloc(maxsize * sizeof(element));    if(!s.base)return -1;    s.top=s.base;    s.stacksize=maxsize;    return 0;}void clearstack(sqstack &s){    s.top=s.base;}void push(sqstack &s,element e){    if(s.top-s.base>=s.stacksize)    {        s.base=(element *)realloc(s.base,maxsize+numsize*sizeof(element));        s.top=s.base+maxsize;        s.stacksize+=numsize;    }    *(s.top)=e;    s.top++;}void pop(sqstack &s){    s.top--;}element get(sqstack &s){    element e;    e=*(s.top-1);    return e;}status emptystack(sqstack &s){    if(s.base==s.top)        return 1;    else        return 0;}int cmp(element c){    if(c=='+'||c=='-')        return 1;    else if(c=='*'||c=='/')        return 2;    else if(c=='(')        return 3;    else if(c==')')        return 4;    else return 0;}void putstack(sqstack &s){    while(s.top>s.base)    {        printf("%c",*(s.top-1));        s.top--;    }}void hou(sqstack &s,char c){    if(c<='z'&&c>='a')        printf("%c",c);    else    {        if(emptystack(s))            push(s,c);        else        {            if(cmp(c)>cmp(get(s)))            {                if(c==')')                {                    while(get(s)!='(')                    {                        printf("%c",get(s));                        pop(s);                    }                    pop(s);                }                else                    push(s,c);            }            else            {                if(get(s)=='(')                {                    push(s,c);                }                else                {                    printf("%c",get(s));                    s.top--;                    push(s,c);                }            }        }    }}int main(){    sqstack s;    initstack(s);    element c;    while(~scanf("%c",&c)&&c!='#')    {        hou(s,c);    }    putstack(s);    return 0;}
阅读全文
0 0
原创粉丝点击