广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 3295 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
醉饮寒霜
个人头像
个人文章 个人相簿 个人日记 个人地图
小有名气
级别: 小有名气 该用户目前不上站
推文 x0 鲜花 x28
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x0
[C/C++][求助] 堆叠问题
请问板上的高手大大~~~
怎么使用C++来写出两个堆叠计算中序式的程式
一 ..

访客只能看到部份内容,免费 加入会员 或由脸书 Google 可以看到全部内容



<醉饮寒霜@ Mychat 之原着创作,版权所有。>
献花 x0 回到顶端 [楼 主] From:台湾中华电信 | Posted:2007-12-04 20:54 |
daviddr
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x0 鲜花 x7
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

用一个堆叠写出后序式!? 可否看看程式?
难道.. 中序式里已经用括弧括出各 operator 优先权了吗?


献花 x0 回到顶端 [1 楼] From:台湾中华 | Posted:2008-05-26 02:37 |
daviddr
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x0 鲜花 x7
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

复制程式
template <class T, int N=512> struct Stack
{
    T   d[N];      //资料项
    int n;         //元素个数  
    Stack()        { n = 0; }
    void push (T x){ d[n++] = x; }
    T pop()        { return d[--n]; } 
    T& operator*() { return d[n-1]; }
    T& operator[] (int i) { return d[i]; }
};

double calculate (Stack<char>& s)
{
    Stack<double> v;
    char c; double d;

    for (int i=0; i<s.n; i++) 
    {
        c = s[i];
        if (Ɔ'<=c && c<=Ə') { 
            v.push (c-Ɔ'); 
            continue; 
        }
        d = v.pop();
        switch (c) {
           case'+': *v += d; break;
           case'-': *v -= d; break;
           case'*': *v *= d; break;
           case'/': *v /= d; break;
        }        
    }
    return *v;
}

void main()
{
    Stack<char> num, op;                   //num 放后序式, op 放运算符
    char c, pri[128], *p = "8*(1+9)-8/2";  //pri=运算元优先权
    int i=128;

    while (i--) pri[i] = 3;
    pri['*']= pri['/'] = 2; 
    pri['+']= pri['-'] = 1; 
    pri[')']= 0; 
    pri['(']= 5;
   
    for (;c=*p; c^')'? op.push(c): op.pop(), p++)     
        while (pri[c] <= pri[*op] && '('!=*op) 
            num.push (op.pop());        
    while (op.n > 0) num.push (op.pop());
    
    for (i=0; i<num.n; i++) cout<<num[i];   //印出 postfix
    cout <<endl <<calculate (num);          //印出运算结果
}


[ 此文章被daviddr在2008-05-28 18:18重新编辑 ]


献花 x0 回到顶端 [2 楼] From:台湾中华 | Posted:2008-05-28 18:11 |

首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.060815 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言