ruby_structures 0.0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3010a5b7d4654d61386dc05018e491f62c5bd0aa
4
+ data.tar.gz: 7e9bab4d78a0ba383eec40ba4600d5429eaab75f
5
+ SHA512:
6
+ metadata.gz: 1faeaa2b732a4d0f05939c7e92bff5bb81d90e7941ebf6c00fc29e26157efcb848fc3bea643a92c785f4e6f5e7ef374bb915802de0e53bbae8d84d4144948ea0
7
+ data.tar.gz: f4a2e6d6885b2c5bc165cd7817913f94e677eddb69eec6bccee072403d0250d0728703ae2df24c415104fbea3b0bd18f889df2bef608d529983deb1f6c358b9d
@@ -0,0 +1,131 @@
1
+ class LinkedList
2
+ include Enumerable
3
+
4
+ def initialize(head=nil, tail=nil)
5
+ @head = Node.new
6
+ @tail = Node.new
7
+ @head.send(:next=, @tail)
8
+ @tail.send(:prev=, @head)
9
+ end
10
+
11
+ def to_a
12
+ self.reduce([]) {|arr, n| arr << n.send(:val)}
13
+ end
14
+
15
+ def to_s
16
+ return "LinkedList is empty" if self.empty?
17
+
18
+ vals = self.map { |n| n.send(:val) }
19
+ vals.join(' -> ')
20
+ end
21
+
22
+ def inspect
23
+ return "LinkedList is empty" if self.empty?
24
+
25
+ vals = self.map { |n| n.send(:val) }
26
+ vals.join(' -> ')
27
+ end
28
+
29
+ def empty?
30
+ @head.send(:next) == @tail
31
+ end
32
+
33
+ def first
34
+ first = @head.send(:next)
35
+ first == @tail ? nil : first
36
+ end
37
+
38
+ def last
39
+ last = @tail.send(:prev)
40
+ last == @head ? nil : last
41
+ end
42
+
43
+ def append(val=nil)
44
+ node = Node.new(val)
45
+ last = @tail.send(:prev)
46
+
47
+ last.send(:next=, node)
48
+ @tail.send(:prev=, node)
49
+
50
+ node.send(:prev=, last)
51
+ node.send(:next=, @tail)
52
+
53
+ node
54
+ end
55
+
56
+ def prepend(val=nil)
57
+ node = Node.new(val)
58
+ first = @head.send(:next)
59
+
60
+ first.send(:prev=, node)
61
+ @head.send(:next=, node)
62
+
63
+ node.send(:prev=, @head)
64
+ node.send(:next=, first)
65
+
66
+ node
67
+ end
68
+
69
+ def find(val)
70
+ self.each { |n| return node if n.send(:val) == val }
71
+ nil
72
+ end
73
+
74
+ def include(val)
75
+ self.each { |n| return true if n.send(:val) == val }
76
+ false
77
+ end
78
+
79
+ def remove(val)
80
+ node = self.find(val)
81
+ return nil if node.nil?
82
+
83
+ prev_node = node.send(:prev)
84
+ next_node = node.send(:next)
85
+
86
+ prev_node.send(:next=, next_node)
87
+ next_node.send(:prev=, prev_node)
88
+
89
+ node
90
+ end
91
+
92
+ def update(old_val, new_val)
93
+ node = self.find(old_val)
94
+ raise ArgumentError.new("Couldn't find Node with value=#{old_val}") if node.nil?
95
+
96
+ node.send(:val=, new_val)
97
+ node
98
+ end
99
+
100
+ def each(&prc)
101
+ current_node = @head.send(:next)
102
+ return self if current_node.nil?
103
+
104
+ while current_node != @tail
105
+ prc.call(current_node)
106
+ current_node = current_node.send(:next)
107
+ end
108
+
109
+ self
110
+ end
111
+ end
112
+
113
+ class Node
114
+ def initialize(val=nil, next_node=nil, prev_node=nil)
115
+ @val = val
116
+ @next = next_node
117
+ @prev = prev_node
118
+ end
119
+
120
+ def to_s
121
+ val
122
+ end
123
+
124
+ def inspect
125
+ val
126
+ end
127
+
128
+ private
129
+
130
+ attr_accessor :val, :next, :prev
131
+ end
@@ -0,0 +1,53 @@
1
+ class Queue
2
+ def initialize
3
+ @store = Array.new
4
+ end
5
+
6
+ def to_a
7
+ Array.new(@store)
8
+ end
9
+
10
+ def to_s
11
+ @store
12
+ end
13
+
14
+ def inspect
15
+ @store
16
+ end
17
+
18
+ def ==(other_queue)
19
+ @store == other_queue.send(:store)
20
+ end
21
+
22
+ def empty?
23
+ @store.empty?
24
+ end
25
+
26
+ def enqueue(el)
27
+ @store.push(el)
28
+ end
29
+
30
+ def <<(el)
31
+ @store << el
32
+ end
33
+
34
+ def dequeue
35
+ @store.shift
36
+ end
37
+
38
+ def peek
39
+ @store.first
40
+ end
41
+
42
+ def length
43
+ @store.length
44
+ end
45
+
46
+ def include?(el)
47
+ @store.include?(el)
48
+ end
49
+
50
+ private
51
+
52
+ attr_reader :store
53
+ end
@@ -0,0 +1,53 @@
1
+ class Stack
2
+ def initialize
3
+ @store = Array.new
4
+ end
5
+
6
+ def to_a
7
+ Array.new(@store)
8
+ end
9
+
10
+ def to_s
11
+ @store
12
+ end
13
+
14
+ def inspect
15
+ @store
16
+ end
17
+
18
+ def ==(other_stack)
19
+ @store == other_stack.send(:store)
20
+ end
21
+
22
+ def empty?
23
+ @store.empty?
24
+ end
25
+
26
+ def push(el)
27
+ @store.push(el)
28
+ end
29
+
30
+ def <<(el)
31
+ @store << el
32
+ end
33
+
34
+ def pop
35
+ @store.pop
36
+ end
37
+
38
+ def peek
39
+ @store.last
40
+ end
41
+
42
+ def length
43
+ @store.length
44
+ end
45
+
46
+ def include?(el)
47
+ @store.include?(el)
48
+ end
49
+
50
+ private
51
+
52
+ attr_reader :store
53
+ end
@@ -0,0 +1,3 @@
1
+ require 'data_structures/stack'
2
+ require 'data_structures/queue'
3
+ require 'data_structures/linked_list'
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby_structures
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Jason Numeroff
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-05-07 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Ruby implementations of a Stack, Queue and Linked List. More to come!
14
+ email: jnumeroff@hotmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/data_structures/linked_list.rb
20
+ - lib/data_structures/queue.rb
21
+ - lib/data_structures/stack.rb
22
+ - lib/ruby_structures.rb
23
+ homepage: https://github.com/Numie/DataStructures
24
+ licenses:
25
+ - MIT
26
+ metadata: {}
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubyforge_project:
43
+ rubygems_version: 2.5.1
44
+ signing_key:
45
+ specification_version: 4
46
+ summary: Ruby Data Structures
47
+ test_files: []