Class: RubyCollections::Deque

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_collections/deque.rb

Instance Method Summary collapse

Constructor Details

#initializeDeque

Returns a new instance of Deque.



5
6
7
8
# File 'lib/ruby_collections/deque.rb', line 5

def initialize
  @hash = {size: 0, front: {data: nil, next: :rear, prev: nil}, 
          rear: {data: nil, next: nil, prev: :front}}
end

Instance Method Details

#add(data, index = 0) ⇒ Object



26
27
28
29
30
31
# File 'lib/ruby_collections/deque.rb', line 26

def add(data, index = 0)
  return nil if index > size
  if index == 0 then add_first(data) and return end
  setNext(getNode(index-1), data) if index > 0 and index < size
  hash[:size] += 1 
end

#add_first(data) ⇒ Object



33
34
35
36
# File 'lib/ruby_collections/deque.rb', line 33

def add_first(data)
  setNext(:front, data)
  hash[:size] += 1
end

#add_last(data) ⇒ Object



38
39
40
41
# File 'lib/ruby_collections/deque.rb', line 38

def add_last(data)
  setPrev(:rear, data)
  hash[:size] += 1
end

#empty?Boolean

Returns:

  • (Boolean)


10
11
12
# File 'lib/ruby_collections/deque.rb', line 10

def empty?
  size.zero?
end

#get(index) ⇒ Object



43
44
45
46
# File 'lib/ruby_collections/deque.rb', line 43

def get(index)
  return nil if index >= size
  hash[getNode(index)][:data]
end

#headObject



18
19
20
# File 'lib/ruby_collections/deque.rb', line 18

def head
  hash[front[:next]][:data]
end

#remove(index) ⇒ Object



53
54
55
56
57
58
59
60
# File 'lib/ruby_collections/deque.rb', line 53

def remove(index)
  return nil if index >= size or index < 0
  node_id = getNode(index)
  hash[getNext(node_id)][:prev] = getPrev(node_id)
  hash[getPrev(node_id)][:next] = getNext(node_id)
  hash.delete(node_id)
  hash[:size] -= 1
end

#remove_firstObject



62
63
64
65
# File 'lib/ruby_collections/deque.rb', line 62

def remove_first
  return nil if empty?
  remove(0)
end

#remove_lastObject



67
68
69
70
71
72
73
74
75
# File 'lib/ruby_collections/deque.rb', line 67

def remove_last
  return nil if empty?
  node_id = getPrev(:rear)
  prev_id = getPrev(node_id)
  hash[prev_id][:next] = :rear
  rear[:prev] = prev_id
  hash.delete(node_id)
  hash[:size] -= 1
end

#set(index, data) ⇒ Object



48
49
50
51
# File 'lib/ruby_collections/deque.rb', line 48

def set(index, data)
  return nil if index >= size
  hash[getNode(index)][:data] = data
end

#sizeObject



14
15
16
# File 'lib/ruby_collections/deque.rb', line 14

def size
  hash[:size]
end

#tailObject



22
23
24
# File 'lib/ruby_collections/deque.rb', line 22

def tail
  hash[rear[:prev]][:data]
end

#to_sObject



77
78
79
80
81
82
83
84
85
86
# File 'lib/ruby_collections/deque.rb', line 77

def to_s
  return "" if empty?
  data = []
  node_id = :front
  size.times do
    node_id = getNext(node_id)
    data << hash[node_id][:data]
  end
  return data.to_s
end