キュー(リングバッファ)

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時間

次はリストですが、アルゴリズムとデータ構造を見ていると何種類かリストがあり、
知識が足りてない模様。
さすがに単方向リストは簡単だと思うがどうだろう。