ruby_structures 2.0.0 → 2.1.0
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 +4 -4
- data/lib/data_structures/linked_list.rb +33 -1
- data/lib/data_structures/lru_cache.rb +36 -6
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f84ec7afcc16ae06a9e385352868871144f62937
|
4
|
+
data.tar.gz: 44ede61cd4466ccd6e54bc06b67231ecd7a3a293
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fccf6655d1f80ecf8d285e2b9598348d5d52ebee5d65170726d959daf08389ab93f19b3a951b279dd767424ead2cb55fd4e709654deb6af1c17f632496c89cb4
|
7
|
+
data.tar.gz: 080193de352085e39b1054a18080cb34d6692747910f6392c3210bed15701d9645754d4ae056b2e09411c00310f854c38cc19d3c7502d1222c7884fcd6470ad0
|
@@ -9,7 +9,7 @@ class LinkedList
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def to_a
|
12
|
-
self.reduce([]) {|arr, n| arr << n.send(:val)}
|
12
|
+
self.reduce([]) { |arr, n| arr << n.send(:val) }
|
13
13
|
end
|
14
14
|
|
15
15
|
def to_s
|
@@ -66,6 +66,38 @@ class LinkedList
|
|
66
66
|
node
|
67
67
|
end
|
68
68
|
|
69
|
+
def add_after_key(ref_key, key, val)
|
70
|
+
ref_node = self.find_by_key(ref_key)
|
71
|
+
raise ArgumentError.new("No Node found with key=#{ref_key}") if ref_node.nil?
|
72
|
+
|
73
|
+
node = LinkedListNode.new(key, val)
|
74
|
+
next_node = ref_node.send(:next)
|
75
|
+
|
76
|
+
node.send(:next=, next_node)
|
77
|
+
node.send(:prev=, ref_node)
|
78
|
+
|
79
|
+
ref_node.send(:next=, node)
|
80
|
+
next_node.send(:prev=, node)
|
81
|
+
|
82
|
+
node
|
83
|
+
end
|
84
|
+
|
85
|
+
def add_before_key(ref_key, key, val)
|
86
|
+
ref_node = self.find_by_key(ref_key)
|
87
|
+
raise ArgumentError.new("No Node found with key=#{ref_key}") if ref_node.nil?
|
88
|
+
|
89
|
+
node = LinkedListNode.new(key, val)
|
90
|
+
prev_node = ref_node.send(:prev)
|
91
|
+
|
92
|
+
node.send(:next=, ref_node)
|
93
|
+
node.send(:prev=, prev_node)
|
94
|
+
|
95
|
+
ref_node.send(:prev=, node)
|
96
|
+
prev_node.send(:next=, node)
|
97
|
+
|
98
|
+
node
|
99
|
+
end
|
100
|
+
|
69
101
|
def find_by_key(key)
|
70
102
|
self.each { |node| return node if node.send(:key) == key }
|
71
103
|
nil
|
@@ -36,12 +36,12 @@ class LRUCache
|
|
36
36
|
node = @linked_list.append(key, val)
|
37
37
|
@hash[key] = node
|
38
38
|
|
39
|
-
@size
|
40
|
-
if @size > @max_size
|
39
|
+
if @size == @max_size
|
41
40
|
first_node_key = @linked_list.first.send(:key)
|
42
41
|
@linked_list.remove(first_node_key)
|
43
42
|
@hash.delete(first_node_key)
|
44
|
-
|
43
|
+
else
|
44
|
+
@size += 1
|
45
45
|
end
|
46
46
|
|
47
47
|
node
|
@@ -51,12 +51,42 @@ class LRUCache
|
|
51
51
|
node = @linked_list.prepend(key, val)
|
52
52
|
@hash[key] = node
|
53
53
|
|
54
|
-
@size
|
55
|
-
if @size > @max_size
|
54
|
+
if @size == @max_size
|
56
55
|
last_node_key = @linked_list.last.send(:key)
|
57
56
|
@linked_list.remove(last_node_key)
|
58
57
|
@hash.delete(last_node_key)
|
59
|
-
|
58
|
+
else
|
59
|
+
@size += 1
|
60
|
+
end
|
61
|
+
|
62
|
+
node
|
63
|
+
end
|
64
|
+
|
65
|
+
def add_after_key(ref_key, key, val)
|
66
|
+
node = @linked_list.add_after_key(ref_key, key, val)
|
67
|
+
@hash[key] = node
|
68
|
+
|
69
|
+
if @size == @max_size
|
70
|
+
first_node_key = @linked_list.first.send(:key)
|
71
|
+
@linked_list.remove(first_node_key)
|
72
|
+
@hash.delete(first_node_key)
|
73
|
+
else
|
74
|
+
@size += 1
|
75
|
+
end
|
76
|
+
|
77
|
+
node
|
78
|
+
end
|
79
|
+
|
80
|
+
def add_before_key(ref_key, key, val)
|
81
|
+
node = @linked_list.add_before_key(ref_key, key, val)
|
82
|
+
@hash[key] = node
|
83
|
+
|
84
|
+
if @size == @max_size
|
85
|
+
last_node_key = @linked_list.last.send(:key)
|
86
|
+
@linked_list.remove(last_node_key)
|
87
|
+
@hash.delete(last_node_key)
|
88
|
+
else
|
89
|
+
@size += 1
|
60
90
|
end
|
61
91
|
|
62
92
|
node
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_structures
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Numeroff
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-05-
|
11
|
+
date: 2018-05-09 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Ruby implementations of a Stack, Queue, Linked List, Binary Tree and
|
14
14
|
LRU Cache. More to come!
|