鱼C论坛

 找回密码
 立即注册
查看: 2734|回复: 3

一个简单的栈完成中缀转后缀。。哪里不对。。。。。

[复制链接]
发表于 2016-3-30 13:07:00 | 显示全部楼层 |阅读模式
1鱼币
本帖最后由 mupa 于 2016-3-30 18:47 编辑
#include <iostream>
using namespace std;

class stack
{
        public:
                void clearstack();
                int isempty();
                int length();
                char gettop();
                int push(char);
                int pop(char*);
                int traverse();
        protected:
                char *top;
                char *base;
};

void stack::clearstack()
{
        top=base;
}

int stack::isempty()
{
        if(top==base)
        {
                return 1;
        }
        else
        {
                return 0;
        }
}

int stack::length()
{
        return top-base;
}

char stack::gettop()
{
        return *(top-1);
}

int stack::push(char c)
{
        *top=c;
        top++;
        return 1;
}

int stack::pop(char *x)
{
        *x=*--top;
        return 1;
}

int stack::traverse()
{
        if(top!=0)
        {
                cout<<*(--top);
        }
        return 1;
}

int main()
{
        stack s;
        char c,e;

        s.clearstack();
        cout<<"输入中缀表达式,#作结束标志:"<<endl;
        cin>>c;

        while(c != '#')
        {
                while(c>='0' && c<='9')
                {
                        cout<<c;
                        cin>>c;
                        if(c<'0'||c>'9')
                        {
                                cout<<" ";
                        }
                }

                if(')'==c)
                {
                        s.pop(&e);
                        while('('!=e)
                        {
                                cout<<e;
                                s.pop(&e);
                        }
                }
                else if('+'==c || '-'==c)
                {
                        if(!s.length())
                        {
                                s.push(c);
                        }
                        else
                        {
                                do
                                {
                                        s.pop(&e);
                                        if('('==e)
                                        {
                                                s.push(e);
                                        }
                                        else
                                        {
                                                cout<<e;
                                        }
                                }while(s.length() && '('!=e );
                                s.push(c);
                        }
                }
                else if('*'==c || '/'==c || '('==c)
                {
                        s.push(c);
                }
                else if('#'==c)
                {
                        break;
                }
                else
                {
                        cout<<"输入有误"<<endl;
                        return -1;
                }

                cin>>c;
        }
        
        while(s.length())
        {
                s.pop(&e);
                cout<<e;
        }
        return 0;
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-31 12:18:05 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-4-3 12:11:29 | 显示全部楼层
laikankan
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-5-27 09:53:49 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 03:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表