Class: List

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
Lista.rb

Overview

La clase List proporcionar los métodos necesarios para trabajar con una lista doblemente enlazada.

Author:

  • Yeray Expósito García

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeList

Metodo que permite declarar e inicializar las variables de instancia.



9
10
11
12
13
# File 'Lista.rb', line 9

def initialize
   @tail=nil
   @head=nil
   @sz=0
end

Instance Attribute Details

#headObject (readonly)

Returns the value of attribute head



6
7
8
# File 'Lista.rb', line 6

def head
  @head
end

#szObject (readonly)

Returns the value of attribute sz



6
7
8
# File 'Lista.rb', line 6

def sz
  @sz
end

#tailObject (readonly)

Returns the value of attribute tail



6
7
8
# File 'Lista.rb', line 6

def tail
  @tail
end

Instance Method Details

#eachObject

El método each genera elementos sucesivos de la lista doblemente enlazada. Es necesario para poder emplear los diferentes métodos de recorrido que ofrece Enumerable.



17
18
19
20
21
22
23
# File 'Lista.rb', line 17

def each
   var=@head
   for num in (0..@sz-1)
         yield var.value
         var=var.next
      end
end

#extract_head!Object

El método extract_head! se encarga de extraer el nodo que actualmente está en el head de la lista doblemente enlazada.

Returns:

  • extraer Variable que contiene el nodo que ha sido extraído del head de la lista.



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'Lista.rb', line 69

def extract_head!
	extraer=@head
	
	if(sz>0)
       @head= head.next
       
       if head.nil?
          @tail=nil
       else
          @head.prev=nil
       end
          
       extraer.next=nil
       extraer.prev=nil
	   @sz= @sz-1
	end
    extraer
end

#extract_tail!Object

El método extract_tail! se encarga de extraer el nodo que actualmente está en la cola de la lista doblemente enlazada.

Returns:

  • extraer Variable que contiene el nodo que ha sido extraído de la cola de la lista.



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'Lista.rb', line 91

def extract_tail!
	extraer=@tail
	
	if(sz>0)
       @tail= tail.prev
       
       if tail.nil?
          @head=nil
       else
          @tail.next=nil
       end
          
       extraer.next=nil
       extraer.prev=nil
	   @sz= @sz-1
	end
    extraer
end

#insert_head!(val) ⇒ Object

El método insert_head! se encarga de introducir un nodo por el head de la lista doblemente enlazada.

Parameters:

  • val

    Representa el valor que contendrá el nodo a insertar en el head de la lista doblemente enlazada.

Returns:

  • @sz Variable de instancia que indica el tamaño actual de la lista tras la inserción.



54
55
56
57
58
59
60
61
62
63
64
# File 'Lista.rb', line 54

def insert_head!(val)
	if(@sz==0)
	   @head=Node.new(val,nil,nil)
	   @tail= head
	   @sz= @sz+1
	else
	   @head.prev=Node.new(val,head,nil)
	   @head= head.prev
	   @sz= @sz+1
    end
end

#insert_string!(val_string) ⇒ Object

El método insert_string! se encarga de introducir (a través del head) una cadena de elementos en la lista doblemente enlazada.

Parameters:

  • val_string

    Representa el vector que contiene la cadena de elementos a insertar



28
29
30
31
32
# File 'Lista.rb', line 28

def insert_string!(val_string)
for num in (0..val_string.length-1)
      insert_head!(val_string[num])
   end
end

#insert_tail!(val) ⇒ Object

El método insert_tail! se encarga de introducir un nodo por la cola de la lista doblemente enlazada.

Parameters:

  • val

    Representa el valor que contendrá el nodo a insertar en la cola de la lista doblemente enlazada.

Returns:

  • @sz Variable de instancia que indica el tamaño actual de la lista tras la inserción.



38
39
40
41
42
43
44
45
46
47
48
# File 'Lista.rb', line 38

def insert_tail!(val)
	if(@sz==0)
	   @tail=Node.new(val,nil,nil)
	   @head= tail
	   @sz= @sz+1
	else
	   @tail.next=Node.new(val,nil,tail)
	   @tail= tail.next
	   @sz= @sz+1
    end
end

#to_sstring

El método to_s se encarga de formatear la salida cuando intentamos visualizar un objeto

Returns:

  • (string)

    En el que se representan las variables de instancia del objeto.



113
114
115
116
117
118
119
# File 'Lista.rb', line 113

def to_s
	if(sz>0)
	   "(size=#{sz} ==> head=#{head.value} tail=#{tail.value})"
	else
       "La lista está vacía."
    end
end