廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 3297 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為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.053816 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言