Class: List

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/prct06/lista.rb

Overview

Esta clase permite representar listas doblemente enlazadas. Su desarrollo ha sido dirigido por pruebas (TDD). Se han incluido el mixin Enumerable

Author

Sergio Ferrera de Diego (sergioferrera1296@gmail.com)

Copyright

Cretive Commons

License

Distributes under the same terms as Ruby

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeList

Método para asignar los datos de la lista

Parameters:

  • cola

    cola de la lista

  • cabeza

    cabeza de la lista

  • tam

    tamaño de la lista



21
22
23
24
25
26
27
# File 'lib/prct06/lista.rb', line 21

def initialize
	
   @cola=nil
   @cabeza=nil
   @tam=0
   
end

Instance Attribute Details

#cabezaObject (readonly)

Returns the value of attribute cabeza



14
15
16
# File 'lib/prct06/lista.rb', line 14

def cabeza
  @cabeza
end

#colaObject (readonly)

Returns the value of attribute cola



14
15
16
# File 'lib/prct06/lista.rb', line 14

def cola
  @cola
end

#tamObject (readonly)

Returns the value of attribute tam



14
15
16
# File 'lib/prct06/lista.rb', line 14

def tam
  @tam
end

Instance Method Details

#each {|temp = @cabeza| ... } ⇒ Object

Método para definir como recorrer los elementos de la lista

Yields:



30
31
32
33
34
35
36
37
# File 'lib/prct06/lista.rb', line 30

def each
    yield temp = @cabeza
    if tam!=0
        for i in (1 ..tam-1)
            yield temp = temp.prev
        end
    end
end

#introducir_en_cabeza!(valor) ⇒ Object

Método para introducir un nuevo elemento en la cabeza de lista

Parameters:

  • valor

    elemento a introducir



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/prct06/lista.rb', line 62

def introducir_en_cabeza!(valor)
    
    if(@tam==0)
        @cabeza=Node.new(valor,nil,nil)
        @cola= cabeza
        
        else
        @cabeza.next=Node.new(valor,cola,nil)
        @cabeza.next.prev= cabeza
        @cabeza= cabeza.next
        
    end
    
    @tam+=1
    
end

#introducir_en_cola!(valor) ⇒ Object

Método para introducir un nuevo elemento en la cola de lista

Parameters:

  • valor

    elemento a introducir



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/prct06/lista.rb', line 42

def introducir_en_cola!(valor)
    
    if(@tam==0)
        @cola=Node.new(valor,nil,nil)
        @cabeza= cola
        
        else
        @cola.prev=Node.new(valor,cola,nil)
        @cola.prev.next= cola
        @cola= cola.prev
        
    end
    
    @tam+=1
    
end

#introducir_string!(valor) ⇒ Object

Método para introducir un varios nuevos elementos provenientes de una cadena de caracteres en la cabeza de lista

Parameters:

  • cadena

    de caracteres que contiene los nuevos elementos a introducir



133
134
135
136
137
138
139
# File 'lib/prct06/lista.rb', line 133

def introducir_string!(valor)
    
    for num in (0..valor.length-1)
        introducir_en_cabeza!(valor[num])
    end
    
end

#quitar_cabeza!Object

Método para eliminar un elemento de la cabeza de lista



101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/prct06/lista.rb', line 101

def quitar_cabeza!
    
    temp=@cabeza
    
    if(tam>0)
        @cabeza= cabeza.prev
        if cabeza.nil?
            @cola=nil
            else
            @cabeza.next=nil
        end
        temp.next=nil
        temp.prev=nil
        @tam-=1
    end
    
    temp
    
end

#quitar_cola!Object

Método para eliminar un elemento de la cola de lista



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/prct06/lista.rb', line 80

def quitar_cola!
    
    temp=@cola
    
    if(tam>0)
        @cola= cola.next
        if cola.nil?
            @cabeza=nil
            else
            @cola.prev=nil
        end
        temp.next=nil
        temp.prev=nil
        @tam-=1
    end
    
    temp
    
end

#to_sObject

Método para definir la forma en la que mostrar los datos de la lista



122
123
124
125
126
127
128
# File 'lib/prct06/lista.rb', line 122

def to_s
    if(tam>0)
        "tamaño:#{tam} contenido:(#{cabeza.value} #{cola.value})"
        else
        "Sin valores almacenados."
    end
end