ruby gem algorithms使用
昨天在网上找ruby中栈的使用,我以为在标准库中有stack的实现,结果没有。在https://ruby-china.org/topics/18985 上找到一文章,介绍了algorithms, 于是安装,
sudo gem install algorithms
可惜不会使用,于是从https://rubygems.org/search?utf8=%E2%9C%93&query=excel
下载源码,再用7zip打开,再从测试文档中研究其使用方法,一用之下,发现真是爽呢。
这样,我就可以把数据结构中一些算法用ruby写出来了,比如括号匹配,比如转二进制。
或者进行"3+2*4"之类计算,多好。
象把8转为二进制的计算:
require 'algorithms'
def to2(num)
a=Containers::Stack.new
while(num !=0)
a.push(num % 2)
num /= 2
end
while(not a.empty?)
puts a.pop
end
end
to2(8)
当然,有更简单的方法,
下面是我写的检查括号是否匹配的程序:
require 'algorithms'
def is_ok(str)
a=Containers::Stack.new
str.each_char do |i|
if i == '(' or i=='[' or i=='{'
a.push(i)
elsif i==')' and a.next == '('
a.pop
elsif i==']' and a.next =='['
a.pop
elsif i=='}' and a.next =='{'
a.pop
elsif i==')' or i==']' or i=='}'
a.push(i)
end
end
if a.empty?
return true
else
return false
end
end
puts is_ok('((2+3)-(4-2)')
感觉,有了这样标准算法,真是幸福呀。