スタック

Rubyアルゴリズムの勉強してます。 元ネタはプログラミングコンテスト攻略のためのアルゴリズムとデータ構造です。

class Stack
    def initialize
        @top = 0
        @ary = []
    end

    def push(x)
        @top += 1
        @ary[@top] = x
    end

    def pop
        @top -= 1
        @ary[@top + 1]
    end

    def dump
        puts @ary.join(" ")
    end
end

def main
    stack = Stack.new
    while s = gets do
        s = s.chomp
        if s == "+"
            a = stack.pop
            b = stack.pop
            stack.push a + b
        elsif s == "-"
            b = stack.pop
            a = stack.pop
            stack.push a - b
        elsif s == "*"
            a = stack.pop
            b = stack.pop
            stack.push a * b
        else
            stack.push s.to_i
        end
    end
    stack.pop
end

puts main