ds_algo 0.0.3 → 0.0.4
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_struct/linked_list.rb +190 -83
- data/lib/data_struct/queue.rb +45 -0
- data/lib/data_struct/stack.rb +41 -0
- data/lib/ds_algo.rb +21 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e3c1d14669980be5c2cd68fe505c7b3aa8f3e4b8e300bb3ec8d428adaa631529
|
4
|
+
data.tar.gz: 805e016b98d8266edc71b45e4c0d143fbdda494d4df49595cd357d94be391968
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4a9064e64336177c063051a46abf14a170f12a066d354ad20f03b9b4bcb2b237439a5261390bd47c683f37a06b098d69b28017f19004dfa26cbf0d0bb58e6da
|
7
|
+
data.tar.gz: 4b77c762d047d4505bfa6f8c0bfd79518d1dfded2a74484df8daaaef781ec0b275a980dd76cc16333a62f2afdfa6e3d4f6d97ac0d79fd097ae8adc106ea09ba4
|
@@ -1,118 +1,225 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
# lib/data_struct/linked_list.rb
|
4
|
-
class SNode
|
5
|
-
attr_accessor :data, :next_val
|
6
|
-
def initialize(data, next_val = nil)
|
7
|
-
@data = data
|
8
|
-
@next_val = next_val
|
9
|
-
end
|
10
|
-
end
|
11
4
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
5
|
+
module LinkedList
|
6
|
+
class SinglyNode
|
7
|
+
attr_accessor :data, :next_val
|
8
|
+
def initialize(data, next_val = nil)
|
9
|
+
@data = data
|
10
|
+
@next_val = next_val
|
11
|
+
end
|
18
12
|
end
|
19
|
-
end
|
20
13
|
|
21
|
-
class
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
14
|
+
class DoublyNode
|
15
|
+
attr_accessor :data, :next_val, :pre_val
|
16
|
+
def initialize(data, pre_val = nil, next_val = nil)
|
17
|
+
@data = data
|
18
|
+
@next_val = next_val
|
19
|
+
@pre_val = pre_val
|
20
|
+
end
|
26
21
|
end
|
27
22
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
23
|
+
class Singly
|
24
|
+
attr_reader :head, :length
|
25
|
+
def initialize
|
26
|
+
@head = nil
|
27
|
+
@length = 0
|
28
|
+
end
|
29
|
+
|
30
|
+
def shift(val)
|
31
|
+
in_length
|
32
|
+
@head = SinglyNode.new val, @head
|
33
|
+
end
|
32
34
|
|
33
|
-
|
34
|
-
|
35
|
-
|
35
|
+
def push(val)
|
36
|
+
in_length
|
37
|
+
return @head = SinglyNode.new(val) if @head.nil?
|
36
38
|
|
37
|
-
|
38
|
-
|
39
|
-
|
39
|
+
node = @head
|
40
|
+
(@length - 2).times do
|
41
|
+
node = node.next_val
|
42
|
+
end
|
43
|
+
node.next_val = SinglyNode.new val
|
40
44
|
end
|
41
|
-
node.next_val = SNode.new val
|
42
|
-
end
|
43
45
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
46
|
+
def pop
|
47
|
+
node = @head
|
48
|
+
if @length.zero?
|
49
|
+
raise 'Error: List is empty'
|
50
|
+
else
|
51
|
+
de_length
|
52
|
+
(@length - 1).times do
|
53
|
+
node = node.next_val
|
54
|
+
end
|
55
|
+
node.next_val = nil
|
56
|
+
end
|
57
|
+
|
58
|
+
@head
|
59
|
+
end
|
60
|
+
|
61
|
+
def to_s
|
62
|
+
node = @head
|
63
|
+
str = ''
|
50
64
|
(@length - 1).times do
|
65
|
+
str += "#{node.data} "
|
51
66
|
node = node.next_val
|
52
67
|
end
|
53
|
-
|
68
|
+
str
|
54
69
|
end
|
55
70
|
|
56
|
-
|
57
|
-
|
71
|
+
def to_a
|
72
|
+
node = @head
|
73
|
+
arr = []
|
74
|
+
@length.times do
|
75
|
+
arr << node.data
|
76
|
+
node = node.next_val
|
77
|
+
end
|
78
|
+
arr
|
79
|
+
end
|
58
80
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
81
|
+
def each
|
82
|
+
node = @head
|
83
|
+
arr = []
|
84
|
+
@length.times do
|
85
|
+
arr << yield(node.data)
|
86
|
+
node = node.next_val
|
87
|
+
end
|
88
|
+
arr
|
65
89
|
end
|
66
|
-
str
|
67
|
-
end
|
68
90
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
91
|
+
def index(index_val)
|
92
|
+
raise 'index value higher than current length of list' if @length - 1 < index_val
|
93
|
+
|
94
|
+
node = @head
|
95
|
+
index_val.times do
|
96
|
+
node = node.next_val
|
97
|
+
end
|
98
|
+
node.data
|
75
99
|
end
|
76
|
-
arr
|
77
|
-
end
|
78
100
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
101
|
+
def index_of(val)
|
102
|
+
node = @head
|
103
|
+
@length.times do
|
104
|
+
return node.data if node.data == val
|
105
|
+
|
106
|
+
node = node.next_val
|
107
|
+
end
|
108
|
+
raise 'value not found'
|
85
109
|
end
|
86
|
-
arr
|
87
|
-
end
|
88
110
|
|
89
|
-
|
90
|
-
raise 'index value higher than current length of list' if @length - 1 < index_val
|
111
|
+
private
|
91
112
|
|
92
|
-
|
93
|
-
|
94
|
-
|
113
|
+
def in_length
|
114
|
+
@length += 1
|
115
|
+
end
|
116
|
+
|
117
|
+
def de_length
|
118
|
+
@length -= 1
|
95
119
|
end
|
96
|
-
node.data
|
97
120
|
end
|
98
121
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
122
|
+
class Doubly
|
123
|
+
attr_reader :head, :length
|
124
|
+
def initialize
|
125
|
+
@head = nil
|
126
|
+
@length = 0
|
127
|
+
end
|
128
|
+
|
129
|
+
def shift(val)
|
130
|
+
in_length
|
131
|
+
return @head = DoublyNode.new(val) if @head.nil?
|
103
132
|
|
104
|
-
|
133
|
+
new_head = DoublyNode.new val, nil, @head
|
134
|
+
@head.pre_val = new_head
|
135
|
+
@head = new_head
|
105
136
|
end
|
106
|
-
raise 'value not found'
|
107
|
-
end
|
108
137
|
|
109
|
-
|
138
|
+
def push(val)
|
139
|
+
in_length
|
140
|
+
return @head = DoublyNode.new(val) if @head.nil?
|
110
141
|
|
111
|
-
|
112
|
-
|
113
|
-
|
142
|
+
node = @head
|
143
|
+
(@length - 2).times do
|
144
|
+
node = node.next_val
|
145
|
+
end
|
146
|
+
node.next_val = DoublyNode.new val
|
147
|
+
node.next_val.pre_val = node
|
148
|
+
end
|
149
|
+
|
150
|
+
def pop
|
151
|
+
node = @head
|
152
|
+
if @length.zero?
|
153
|
+
raise 'Error: List is empty'
|
154
|
+
else
|
155
|
+
de_length
|
156
|
+
(@length - 1).times do
|
157
|
+
node = node.next_val
|
158
|
+
end
|
159
|
+
node.next_val = nil
|
160
|
+
end
|
161
|
+
|
162
|
+
@head
|
163
|
+
end
|
164
|
+
|
165
|
+
def to_s
|
166
|
+
node = @head
|
167
|
+
str = ''
|
168
|
+
(@length - 1).times do
|
169
|
+
str += "#{node.data} "
|
170
|
+
node = node.next_val
|
171
|
+
end
|
172
|
+
str
|
173
|
+
end
|
114
174
|
|
115
|
-
|
116
|
-
|
175
|
+
def to_a
|
176
|
+
node = @head
|
177
|
+
arr = []
|
178
|
+
@length.times do
|
179
|
+
arr << node.data
|
180
|
+
node = node.next_val
|
181
|
+
end
|
182
|
+
arr
|
183
|
+
end
|
184
|
+
|
185
|
+
def each
|
186
|
+
node = @head
|
187
|
+
arr = []
|
188
|
+
@length.times do
|
189
|
+
arr << yield(node.data)
|
190
|
+
node = node.next_val
|
191
|
+
end
|
192
|
+
arr
|
193
|
+
end
|
194
|
+
|
195
|
+
def index(index_val)
|
196
|
+
raise 'index value higher than current length of list' if @length - 1 < index_val
|
197
|
+
|
198
|
+
node = @head
|
199
|
+
index_val.times do
|
200
|
+
node = node.next_val
|
201
|
+
end
|
202
|
+
node.data
|
203
|
+
end
|
204
|
+
|
205
|
+
def index_of(val)
|
206
|
+
node = @head
|
207
|
+
@length.times do
|
208
|
+
return node.data if node.data == val
|
209
|
+
|
210
|
+
node = node.next_val
|
211
|
+
end
|
212
|
+
raise 'value not found'
|
213
|
+
end
|
214
|
+
|
215
|
+
private
|
216
|
+
|
217
|
+
def in_length
|
218
|
+
@length += 1
|
219
|
+
end
|
220
|
+
|
221
|
+
def de_length
|
222
|
+
@length -= 1
|
223
|
+
end
|
117
224
|
end
|
118
225
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Queue
|
4
|
+
attr_reader :length
|
5
|
+
def initialize
|
6
|
+
@queue = []
|
7
|
+
@length = 0
|
8
|
+
end
|
9
|
+
|
10
|
+
def in(val)
|
11
|
+
in_length
|
12
|
+
@queue.push val
|
13
|
+
end
|
14
|
+
|
15
|
+
def out
|
16
|
+
de_length
|
17
|
+
@queue.shift
|
18
|
+
end
|
19
|
+
|
20
|
+
def front
|
21
|
+
@queue[0]
|
22
|
+
end
|
23
|
+
|
24
|
+
def last
|
25
|
+
@queue[-1]
|
26
|
+
end
|
27
|
+
|
28
|
+
def empty?
|
29
|
+
@queue.empty?
|
30
|
+
end
|
31
|
+
|
32
|
+
def to_a
|
33
|
+
@queue
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def in_length
|
39
|
+
@length += 1
|
40
|
+
end
|
41
|
+
|
42
|
+
def de_length
|
43
|
+
@length -= 1
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Stack
|
4
|
+
attr_reader :length
|
5
|
+
def initialize
|
6
|
+
@stack = []
|
7
|
+
@length = 0
|
8
|
+
end
|
9
|
+
|
10
|
+
def push(val)
|
11
|
+
in_length
|
12
|
+
@stack.push val
|
13
|
+
end
|
14
|
+
|
15
|
+
def pop
|
16
|
+
de_length
|
17
|
+
@stack.pop
|
18
|
+
end
|
19
|
+
|
20
|
+
def top
|
21
|
+
@stack[-1]
|
22
|
+
end
|
23
|
+
|
24
|
+
def empty?
|
25
|
+
@stack.empty?
|
26
|
+
end
|
27
|
+
|
28
|
+
def to_a
|
29
|
+
@stack
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def in_length
|
35
|
+
@length += 1
|
36
|
+
end
|
37
|
+
|
38
|
+
def de_length
|
39
|
+
@length -= 1
|
40
|
+
end
|
41
|
+
end
|
data/lib/ds_algo.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class DsAlgo
|
4
|
+
def ds_eff?
|
5
|
+
puts '+-----------------------------------------------------------------------------------+'
|
6
|
+
puts '| Efficency table for DsAlgo |'
|
7
|
+
puts '| |'
|
8
|
+
puts '| B- Begining, M- Middle, E- End |'
|
9
|
+
puts '+-----------------------------------------------------------------------------------+'
|
10
|
+
puts '| Type | Indexing | Insert/Delete B| Insert/Delete E| Insert/Delete M |'
|
11
|
+
puts '+-----------------------------------------------------------------------------------+'
|
12
|
+
puts '|Linked list(S)| O(n) | O(1) | O(1) | search time+O(1) |'
|
13
|
+
puts '+-----------------------------------------------------------------------------------+'
|
14
|
+
puts '|Linked list(D)| O(n) | O(1) | O(1) | search time+O(1) |'
|
15
|
+
puts '+-----------------------------------------------------------------------------------+'
|
16
|
+
puts '| Stack | nil | nil | O(1) | nil |'
|
17
|
+
puts '+-----------------------------------------------------------------------------------+'
|
18
|
+
puts '| Queue | nil | O(1) | O(1) | nil |'
|
19
|
+
puts '+-----------------------------------------------------------------------------------+'
|
20
|
+
end
|
21
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ds_algo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- imhtapm
|
@@ -11,13 +11,16 @@ cert_chain: []
|
|
11
11
|
date: 2019-07-27 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: collection of data structures and algorithms for learning and to build
|
14
|
-
(under development
|
14
|
+
(under development)
|
15
15
|
email: imhtapm@gmail.com
|
16
16
|
executables: []
|
17
17
|
extensions: []
|
18
18
|
extra_rdoc_files: []
|
19
19
|
files:
|
20
20
|
- lib/data_struct/linked_list.rb
|
21
|
+
- lib/data_struct/queue.rb
|
22
|
+
- lib/data_struct/stack.rb
|
23
|
+
- lib/ds_algo.rb
|
21
24
|
homepage: https://rubygems.org/gems/ds_algo
|
22
25
|
licenses:
|
23
26
|
- MIT
|