Class: Lista

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeLista



8
9
10
# File 'lib/alimento/lista.rb', line 8

def initialize()
  @head=@tail=nil
end

Instance Attribute Details

#headObject (readonly)

Returns the value of attribute head.



5
6
7
# File 'lib/alimento/lista.rb', line 5

def head
  @head
end

#tailObject (readonly)

Returns the value of attribute tail.



5
6
7
# File 'lib/alimento/lista.rb', line 5

def tail
  @tail
end

Instance Method Details

#[](index) ⇒ Object



98
99
100
101
102
103
104
105
106
# File 'lib/alimento/lista.rb', line 98

def [] (index)
  i=0
  aux=@head
  while i<index&&aux!=nil do
    i+=1
    aux=aux.next_
  end
  aux      
end

#add_back(dato) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/alimento/lista.rb', line 12

def add_back(dato)
  if dato.instance_of?Alimento
    node=Nodo.new(dato,nil,nil)

    @head=node if @head.nil?
    node.prev_=@tail unless @tail.nil?
    @tail.next_=node unless @tail.nil?
    @tail=node
  end
  if dato.instance_of?Array
    i=0
    while i<dato.length do
      node=Nodo.new(dato[i],nil,nil)

      @head=node if @head.nil?
      node.prev_=@tail unless @tail.nil?
      @tail.next_=node unless @tail.nil?
      @tail=node
      i+=1
    end
  end
end

#add_front(dato) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/alimento/lista.rb', line 35

def add_front(dato)
  if dato.instance_of?Alimento 
    node=Nodo.new(dato,nil,nil)
  
    @tail = node if @tail.nil?
    node.next_ = @head unless @head.nil?
    @head.prev_ = node unless @head.nil?    
    @head = node
  end
  if dato.instance_of?Array
    i=0
    while i<dato.length do
      @tail = node if @tail.nil?
      node.next_ = @head unless @head.nil?
      @head.prev_ = node unless @head.nil?   
      @head = node
      i+=1
    end     
  end
end

#eachObject



108
109
110
111
112
113
114
# File 'lib/alimento/lista.rb', line 108

def each
  aux=@head
  while aux!=nil do
    yield aux.dato
    aux=aux.next_
  end
end

#mostrarObject



88
89
90
91
92
93
94
95
96
# File 'lib/alimento/lista.rb', line 88

def mostrar
  str= ""
  aux=@head
  while aux!=nil do
    str+="\t"+aux.dato.to_s+"\n"
    aux=aux.next_
  end
  str
end

#pop_backObject



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/alimento/lista.rb', line 56

def pop_back
  if (@tail==@head)&&(@tail==nil)
    return nil
  elsif @tail==@head
    aux=@tail.dup
    @tail=@head=nil
    return aux
  else 
    aux=@tail.dup
    @tail=@tail.prev_
    @tail.next_=nil
    aux.prev_=nil
    return aux
  end
end

#pop_frontObject



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/alimento/lista.rb', line 72

def pop_front
  if (@tail==@head)&&(@tail==nil)
    return nil
  elsif @tail==@head
    aux=@head.dup
    @head=@tail=nil
    return aux
  else
    aux=@head.dup
    @head=@head.next_
    @head.prev_=nil
    aux.next_=nil
    return aux
  end
end