ruby_collections 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7398054d1b760aabc43207861265e55fe82b4f92
4
- data.tar.gz: 691f42570967b022e3f558f8e4713c0b036810c6
3
+ metadata.gz: c0462986d07093cf4ecca10470680ebbafcda8d9
4
+ data.tar.gz: f722323cd43f7b4d5f4abb4301dfd2fb9ae57fd5
5
5
  SHA512:
6
- metadata.gz: 6d23fc58a7e892a2b551745cc9a11c1a0071548a022aeb10b66b9691d9b7615a7cb7f240bc56c0f1c0ac9a4332b05b3d85fcade2acf75b331dc53ab249b5b65d
7
- data.tar.gz: 2c8bb1e27007067a9e83ae8950900d9a431261c81b612cfa709cbf80d28e3194196afacf4724aa0c9293ac50c82dc96a4a34985905efdfcba93ebbeee7711fc2
6
+ metadata.gz: 5a78827b01c0fd4fc5fd2908d5f668d35f341236dce3fbd5018ce652c332fe5da1976fa47d4c730e81fadd50109b1a787a8f1f87a6e9e04acd4bc9d2a83d300a
7
+ data.tar.gz: 96b622b4028421d8624f3536e9a2d36d6540f6b0de02a5f8b7ee387d7330e895508dcb5d2ded53ff82b058b6c41ebf430651ff2c670870e1bfc30667476d945a
data/README.md CHANGED
@@ -20,7 +20,7 @@ Or install it yourself as:
20
20
 
21
21
  ## Usage
22
22
 
23
- Supported Data Structures: Max Heap, Min Heap, Stack, LinkedList
23
+ Supported Data Structures: Max Heap, Min Heap, Stack, LinkedList, Deque
24
24
 
25
25
  ### RubyCollections::MaxHeap
26
26
 
@@ -72,7 +72,7 @@ list.size # => 0
72
72
 
73
73
  list.header # => ""
74
74
 
75
- list.isEmpty? # => true
75
+ list.empty? # => true
76
76
 
77
77
  list.add(1) # => 1 (number of elements in list)
78
78
 
@@ -98,6 +98,64 @@ list.get(1).getNext # => 12
98
98
 
99
99
  ```
100
100
 
101
+ ### RubyCollections::Deque
102
+
103
+ ```ruby
104
+
105
+ list = RubyCollections::Deque.new
106
+
107
+ list.size # => 0
108
+
109
+ list.head # => nil
110
+
111
+ list.empty? # => true
112
+
113
+ list.add(2) # => 1 (number of elements in list), list: [2]
114
+
115
+ list.add(1) # => 2 (number of elements in list), list: [1,2]
116
+
117
+ list.to_s # => "[1, 2]"
118
+
119
+ # add 3 at index 1
120
+
121
+ list.add(3,1) # => 3 (number of elements in list), list: [1, 3, 2]
122
+
123
+ # add 5 at first postion
124
+
125
+ list.add_first(5) # list: [5, 1, 3, 2]
126
+
127
+ # see tail element
128
+
129
+ list.tail # => 2
130
+
131
+ #add 6 at last position
132
+
133
+ list.add_last(6) # list: [5, 1, 3, 2, 6]
134
+
135
+ list.size # => 5
136
+
137
+ # get element at index 2
138
+
139
+ list.get(2) # => 3
140
+
141
+ # set element at index 1 to 10
142
+
143
+ list.set(1, 10) # list; [5, 10, 3, 2, 6]
144
+
145
+ # remove element at index 2
146
+
147
+ list.remove(2) # list: [5, 10, 2, 6]
148
+
149
+ # remove first element
150
+
151
+ list.remove_first # list: [10, 2, 6]
152
+
153
+ # remove last element
154
+
155
+ list.remove_last # list: [10, 2]
156
+
157
+ ```
158
+
101
159
  ## Development
102
160
 
103
161
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -1,4 +1,5 @@
1
1
  require "ruby_collections/max_heap"
2
2
  require "ruby_collections/min_heap"
3
3
  require "ruby_collections/stack"
4
- require "ruby_collections/linked_list"
4
+ require "ruby_collections/linked_list"
5
+ require "ruby_collections/deque"
@@ -0,0 +1,131 @@
1
+ require 'securerandom'
2
+ module RubyCollections
3
+ class Deque
4
+
5
+ def initialize
6
+ @hash = {size: 0, front: {data: nil, next: :rear, prev: nil},
7
+ rear: {data: nil, next: nil, prev: :front}}
8
+ end
9
+
10
+ def empty?
11
+ size.zero?
12
+ end
13
+
14
+ def size
15
+ hash[:size]
16
+ end
17
+
18
+ def head
19
+ hash[front[:next]][:data]
20
+ end
21
+
22
+ def tail
23
+ hash[rear[:prev]][:data]
24
+ end
25
+
26
+ def add(data, index = 0)
27
+ return nil if index > size
28
+ if index == 0 then add_first(data) and return end
29
+ setNext(getNode(index-1), data) if index > 0 and index < size
30
+ hash[:size] += 1
31
+ end
32
+
33
+ def add_first(data)
34
+ setNext(:front, data)
35
+ hash[:size] += 1
36
+ end
37
+
38
+ def add_last(data)
39
+ setPrev(:rear, data)
40
+ hash[:size] += 1
41
+ end
42
+
43
+ def get(index)
44
+ return nil if index >= size
45
+ hash[getNode(index)][:data]
46
+ end
47
+
48
+ def set(index, data)
49
+ return nil if index >= size
50
+ hash[getNode(index)][:data] = data
51
+ end
52
+
53
+ def remove(index)
54
+ return nil if index >= size or index < 0
55
+ node_id = getNode(index)
56
+ hash[getNext(node_id)][:prev] = getPrev(node_id)
57
+ hash[getPrev(node_id)][:next] = getNext(node_id)
58
+ hash.delete(node_id)
59
+ hash[:size] -= 1
60
+ end
61
+
62
+ def remove_first
63
+ return nil if empty?
64
+ remove(0)
65
+ end
66
+
67
+ def remove_last
68
+ return nil if empty?
69
+ node_id = getPrev(:rear)
70
+ prev_id = getPrev(node_id)
71
+ hash[prev_id][:next] = :rear
72
+ rear[:prev] = prev_id
73
+ hash.delete(node_id)
74
+ hash[:size] -= 1
75
+ end
76
+
77
+ def to_s
78
+ return "" if empty?
79
+ data = []
80
+ node_id = :front
81
+ size.times do
82
+ node_id = getNext(node_id)
83
+ data << hash[node_id][:data]
84
+ end
85
+ return data.to_s
86
+ end
87
+
88
+ private
89
+
90
+ def hash
91
+ @hash
92
+ end
93
+
94
+ def front
95
+ hash[:front]
96
+ end
97
+
98
+ def rear
99
+ hash[:rear]
100
+ end
101
+
102
+ def setNext(node_id, data)
103
+ uuid = SecureRandom.uuid
104
+ hash[uuid] = {data: data, next: getNext(node_id), prev: node_id}
105
+ hash[getNext(node_id)][:prev] = uuid
106
+ hash[node_id][:next] = uuid
107
+ end
108
+
109
+ def setPrev(node_id, data)
110
+ uuid = SecureRandom.uuid
111
+ hash[uuid] = {data: data, next: node_id, prev: getPrev(node_id)}
112
+ hash[getPrev(node_id)][:next] = uuid
113
+ hash[node_id][:prev] = uuid
114
+ end
115
+
116
+ def getNext(node_id)
117
+ hash[node_id][:next]
118
+ end
119
+
120
+ def getPrev(node_id)
121
+ hash[node_id][:prev]
122
+ end
123
+
124
+ def getNode(index)
125
+ node = front[:next]
126
+ index.times {node = getNext(node)}
127
+ return node
128
+ end
129
+
130
+ end
131
+ end
@@ -1,3 +1,3 @@
1
1
  module RubyCollections
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_collections
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vikash Vikram
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-04-08 00:00:00.000000000 Z
11
+ date: 2015-04-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -58,6 +58,7 @@ files:
58
58
  - bin/setup
59
59
  - lib/ruby_collections.rb
60
60
  - lib/ruby_collections/collections.rb
61
+ - lib/ruby_collections/deque.rb
61
62
  - lib/ruby_collections/linked_list.rb
62
63
  - lib/ruby_collections/max_heap.rb
63
64
  - lib/ruby_collections/min_heap.rb