Class: RubyCollections::Deque
- Inherits:
-
Object
- Object
- RubyCollections::Deque
- Defined in:
- lib/ruby_collections/deque.rb
Instance Method Summary collapse
- #add(data, index = 0) ⇒ Object
- #add_first(data) ⇒ Object
- #add_last(data) ⇒ Object
- #empty? ⇒ Boolean
- #get(index) ⇒ Object
- #head ⇒ Object
-
#initialize ⇒ Deque
constructor
TODO: implement iterator TODO: implement to_a.
- #remove(index) ⇒ Object
- #remove_first ⇒ Object
- #remove_last ⇒ Object
- #set(index, data) ⇒ Object
- #size ⇒ Object
- #tail ⇒ Object
- #to_s ⇒ Object
Constructor Details
#initialize ⇒ Deque
TODO: implement iterator TODO: implement to_a
8 9 10 11 |
# File 'lib/ruby_collections/deque.rb', line 8 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
29 30 31 32 33 34 |
# File 'lib/ruby_collections/deque.rb', line 29 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
36 37 38 39 |
# File 'lib/ruby_collections/deque.rb', line 36 def add_first(data) setNext(:front, data) hash[:size] += 1 end |
#add_last(data) ⇒ Object
41 42 43 44 |
# File 'lib/ruby_collections/deque.rb', line 41 def add_last(data) setPrev(:rear, data) hash[:size] += 1 end |
#empty? ⇒ Boolean
13 14 15 |
# File 'lib/ruby_collections/deque.rb', line 13 def empty? size.zero? end |
#get(index) ⇒ Object
46 47 48 49 |
# File 'lib/ruby_collections/deque.rb', line 46 def get(index) return nil if index >= size hash[getNode(index)][:data] end |
#head ⇒ Object
21 22 23 |
# File 'lib/ruby_collections/deque.rb', line 21 def head hash[front[:next]][:data] end |
#remove(index) ⇒ Object
56 57 58 59 60 61 62 63 |
# File 'lib/ruby_collections/deque.rb', line 56 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_first ⇒ Object
65 66 67 68 |
# File 'lib/ruby_collections/deque.rb', line 65 def remove_first return nil if empty? remove(0) end |
#remove_last ⇒ Object
70 71 72 73 74 75 76 77 78 |
# File 'lib/ruby_collections/deque.rb', line 70 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
51 52 53 54 |
# File 'lib/ruby_collections/deque.rb', line 51 def set(index, data) return nil if index >= size hash[getNode(index)][:data] = data end |
#size ⇒ Object
17 18 19 |
# File 'lib/ruby_collections/deque.rb', line 17 def size hash[:size] end |
#tail ⇒ Object
25 26 27 |
# File 'lib/ruby_collections/deque.rb', line 25 def tail hash[rear[:prev]][:data] end |
#to_s ⇒ Object
80 81 82 83 84 85 86 87 88 89 |
# File 'lib/ruby_collections/deque.rb', line 80 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 |