「アルゴリズムとデータ構造」の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
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 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。