LinkedList kavramına gerek java gerekse c# örneklerinde değindik.Her kavramın farklı dillerde nasıl gerçekleştirildiğini göstermek açısından ve diğer diller ile kıyaslanarak pekiştirmek için ruby dili için örnek kod parçacığını ekliyorum.LinkedList hangi dilde olursa olsun mantık aynıdır.Kendisinden önceki ve sonraki nesnenin hangisi olduğu bilgisini tutar.Link ile birbirine bağlıdırlar.Ruby içerisinde linkedlist olayını kullanmak isteyenler için güzel bir örnek..Umarım yararlı olur..
CODE:
class LinkedList
include Enumerable
def initialize
@first = Node.new nil
@last = Node.new nil
@first.next = @last
@last.prev = @first
@size = 0
end
def addLast(object)
node = Node.new(object)
node.next = @last
node.prev = @last.prev
@last.prev.next = node
@last.prev = node
@size += 1
end
def addFirst(object)
node = Node.new(object)
node.prev = @first
node.next = @first.next
@first.next.prev = node
@first.next = node
@size += 1
end
def last
if @size <= 0
raise "Listede nesne bulunmuyor"
end
return @last.prev.object
end
def first
if @size <= 0
raise "Listede nesne bulunmuyor"
end
return @first.next.object
end
def removeLast
if @size <= 0
raise "Listede nesne bulunmuyor"
end
node = @last.prev
node.prev.next = @last
@last.prev = node.prev
@size -= 1
return node.object
end
def removeFirst
if @size <= 0
raise "Listede nesne bulurnmuy"
end
node = @first.next
node.next.prev = @first
@first.next = node.next
@size -= 1
return node.object
end
def size
return @size
end
def each
node = @first.next
while node != @last
yield node.object
node = node.next
end
end
def reverse_each
node = @last
loop do
yield node.object
node = node.prev
if ! node
break
end
end
end
class Node
attr_reader :object
attr_reader :prev
attr_reader :next
attr_writer :next
attr_writer :prev
def initialize(object)
@object = object
end
def dump(io)
io.puts "===== #{self} ====="
io.puts "Object: #{@object}"
io.puts "Prev: #{@prev}"
io.puts "Next: #{@next}"
end
end
end
Kolay gelsin..
Oguzz
oguz@thecoders.net
7 Aralik 2007 18:21