Class: Dll

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/dieta/dll.rb

Overview

Clase lista doblemente enlazada

Author:

  • alu0100880625

Defined Under Namespace

Classes: Node

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeDll

Método que instancia un objeto de la clase (una lista vacia con head y tail inicializados a nil)



10
11
12
13
# File 'lib/dieta/dll.rb', line 10

def initialize
	@head=nil
	@tail=nil
end

Instance Attribute Details

#headNode (readonly)

struct que almacena el nodo anterior (:prev), el dato del actual (:value) y el nodo siguiente (:next) al inicio

Returns:

  • (Node)

    the current value of head



5
6
7
# File 'lib/dieta/dll.rb', line 5

def head
  @head
end

#tailNode (readonly)

struct que almacena el nodo anterior (:prev), el dato del actual (:value) y el nodo siguiente (:next) al final

Returns:

  • (Node)

    the current value of tail



5
6
7
# File 'lib/dieta/dll.rb', line 5

def tail
  @tail
end

Instance Method Details

#eachObject

Método necesario para el módulo Enumerable



65
66
67
68
69
70
71
# File 'lib/dieta/dll.rb', line 65

def each
	aux=@head
	while(aux!=nil)
		yield aux[:data]
		aux=aux[:next]
	end
end

#extract_backData

Método que extrae un dato de la lista por el final

Returns:

  • (Data)

    dato extraido



54
55
56
57
58
59
60
61
62
63
# File 'lib/dieta/dll.rb', line 54

def extract_back
	aux=@tail[:data]
	@tail=@tail[:prev]
	if(@ŧail==nil)
		@head=nil
	else
		@tail[:prev]=nil
	end
	aux
end

#extract_frontData

Método que extrae un dato de la lista por el inicio

Returns:

  • (Data)

    dato extraido



42
43
44
45
46
47
48
49
50
51
# File 'lib/dieta/dll.rb', line 42

def extract_front
	aux=@head[:data]
	@head=@head[:next]
	if(@head==nil)
		@tail=nil
	else
		@head[:prev]=nil
	end
	aux
end

#insert_back(data) ⇒ Object

Método que crea un nodo que contenga el dato y lo inserta en la lista por el final

Parameters:

  • data (Data)

    dato que se desea insertar



29
30
31
32
33
34
35
36
37
38
39
# File 'lib/dieta/dll.rb', line 29

def insert_back(data)
	if(@tail==nil)
		aux=Node.new(nil,data,nil)
		@tail=aux
		@head=aux
	else
		aux=Node.new(@tail,data,nil)
		@tail[:next]=aux
		@tail=aux
	end
end

#insert_front(data) ⇒ Object

Método que crea un nodo que contenga el dato y lo inserta en la lista por el inicio

Parameters:

  • data (Data)

    dato que se desea insertar



16
17
18
19
20
21
22
23
24
25
26
# File 'lib/dieta/dll.rb', line 16

def insert_front(data)
	if(@head==nil)
		aux=Node.new(nil,data,nil)
		@head=aux
		@tail=aux
	else
		aux=Node.new(nil,data,@head)
		@head[:prev]=aux
		@head=aux
	end
end