キュー(リングバッファ)
First In First Outのデータ構造です。
リングバッファ版は空き領域を埋めるためにずらす処理が不要となるため、通常の配列を使用した実装より高速です。
class Queue def initialize(maxsize) @maxsize = maxsize @front = 0 @rear = 0 @data = Array.new(maxsize) @size = 0 end def isFull? @size == @maxsize end def isEmpty? @size == 0 end def size @size end def enqueue(obj) unless self.isFull? @data [@rear % @maxsize] = obj @size += 1 @rear += 1 end end def dequeue unless self.isEmpty? obj = @data[@front % @maxsize] @data[@front % @maxsize] = nil @front += 1 @size -= 1 return obj end end def peek @data[(@front % @maxsize == @maxsize - 1)? 0: @front % @maxsize + 1] end def clear @maxsize.times{|i| @data[i] = nil } @front = 0 @rear = 0 @size = 0 end def print (@front...@rear).each{|i| printf "%s ", (@data[i % @maxsize])? @data[i % @maxsize].to_s: "nil"} puts end end
知識確認(out)→参考書確認(in)→実装(out)→動作確認・バグ取り
実装に1時間、動作確認バグ取りに1時間
次はリストですが、アルゴリズムとデータ構造を見ていると何種類かリストがあり、
知識が足りてない模様。
さすがに単方向リストは簡単だと思うがどうだろう。