2015年1月12日月曜日

150112

Ruby


「アルゴリズムとデータ構造」のRuby版。

リストのなかのデータのサーチと削除。

# -*- coding: cp932 -*-

class TagListNode
  attr_reader :data
  attr_accessor :prev, :next
  def initialize(data)
    @data = data
    @prev = nil
    @next = nil
  end
end

buf = nil
firstnode = nil
lastnode = nil
while buf != 0
  printf("整数を入力してください(0を入力すると終了):")
  buf = gets().to_i
  if buf != 0
  # 新しいノードを作成
  newnode = TagListNode.new(buf)
  newnode.next = nil
    if lastnode != nil
      # すでにあるリストの末尾に新しいノードをつなげる
      lastnode.next = newnode
      newnode.prev = lastnode
      lastnode = newnode
    else # これが最初の要素だった場合
      firstnode = lastnode = newnode
      newnode.prev = nil
    end
  end
end

buf = nil
while buf != 0
  printf("検索する値を入力してください:")
  buf = gets().to_i
  thisnode = firstnode
  # 最初に入力した値のなかから検索し,見つかったら削除
  while thisnode != nil
    if thisnode.data == buf
      printf("入力された値のなかに%dが見つかりました。ノードを削除します。\n", buf)
      if thisnode.prev != nil
        thisnode.prev.next = thisnode.next
      else
        firstnode = thisnode.next
      end
      if thisnode.next != nil
        thisnode.next.prev = thisnode.prev
      else
        lastnode = thisnode.prev
      end
      break
    end
    thisnode = thisnode.next
  end
  if thisnode == nil
    printf("%dは入力されていないか,あるいはすでに削除されています。\n", buf)
  end
end

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。