Class: List

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/p6/list.rb

Overview

Una lista de nodos doblemente enlazada

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeList

Constructor de la clase Lista



10
11
12
13
14
# File 'lib/p6/list.rb', line 10

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

Instance Attribute Details

#headObject

Returns the value of attribute head.



7
8
9
# File 'lib/p6/list.rb', line 7

def head
  @head
end

#sizeObject

Returns the value of attribute size.



7
8
9
# File 'lib/p6/list.rb', line 7

def size
  @size
end

#tailObject

Returns the value of attribute tail.



7
8
9
# File 'lib/p6/list.rb', line 7

def tail
  @tail
end

Instance Method Details

#[](i) ⇒ Object



108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/p6/list.rb', line 108

def [](i)
  if i.is_a?Integer
    if i == 0
      return @head.value
    elsif i == (@size - 1)
      return @tail.value
    elsif i < @size - 1 && i > 0
      puntero = @head
      i.times{puntero = puntero.next}
      return puntero.value
    else 
      return nil
    end
  end
end

#eachObject

Método each



100
101
102
103
104
105
106
# File 'lib/p6/list.rb', line 100

def each
  puntero = @head
  while(puntero != nil)
    yield puntero.value
    puntero = puntero.next
  end
end

#emptyObject

Devuelve vacío si la lista está vacía



91
92
93
94
95
96
97
# File 'lib/p6/list.rb', line 91

def empty()
  if(@size == 0)
    return true
  else
    return false
  end
end

#insert(item) ⇒ Object

Inserta un elemento por la cabeza



33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/p6/list.rb', line 33

def insert(item)
  item = Node.new(item, nil, nil)
  if(empty)
    @head = item
    item.prev = nil
  else
    @tail.next = item
    item.prev = @tail
  end

  @tail = item
  item.next = nil
  @size += 1
end

#insert_many(array) ⇒ Object

Inserta un vector de elementos



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/p6/list.rb', line 49

def insert_many(array)
  array.each do |item|
    item = Node.new(item,nil,nil)
    if(empty)
      @head = item
      item.prev = nil
    else
      @tail.next = item
      item.prev = @tail
    end

    @tail = item
    item.next = nil
    @size += 1
  end
end

#pop_headObject

Elimina el elemento de la cabeza



67
68
69
70
71
72
73
74
75
76
# File 'lib/p6/list.rb', line 67

def pop_head()
  if(empty)
    puts "Lista vacía"
  else
    aux = @head
    @head.next.prev = nil
    @head = @head.next
    @size -= 1
  end
end

#pop_tailObject

Elimina el elemento de la cola



79
80
81
82
83
84
85
86
87
88
# File 'lib/p6/list.rb', line 79

def pop_tail()
  if(empty)
    puts "Lista vacía"
  else
    aux = @tail
    @tail.prev.next = nil
    @tail = @tail.prev
    @size -= 1
  end
end

#push(item) ⇒ Object

Inserta un alimento por la cola



17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/p6/list.rb', line 17

def push(item)
  item = Node.new(item, nil, nil)
  if(empty)
    @tail = item
    item.next = nil
  else 
    head.prev = item
    item.next = @head
  end

  @head = item
  item.prev = nil
  @size += 1
end

#to_sObject



124
125
126
127
128
129
130
131
132
# File 'lib/p6/list.rb', line 124

def to_s
  nodo = @head
  cadena =""
  while (nodo != nil)
    cadena =cadena + nodo.value.to_s
    nodo = nodo.next
  end
  return cadena
end