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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 82c505780e91d3c5d225f980a86ca89b808ee40b69a87e83abcc8f6df49705d3
4
- data.tar.gz: a20a2f40bb4379a27f93ba4159e3b4cb50edc0f1a2e607980fb71b3199e0d0f2
3
+ metadata.gz: e3c1d14669980be5c2cd68fe505c7b3aa8f3e4b8e300bb3ec8d428adaa631529
4
+ data.tar.gz: 805e016b98d8266edc71b45e4c0d143fbdda494d4df49595cd357d94be391968
5
5
  SHA512:
6
- metadata.gz: 45c27cdc89faabf7be5361e4fb465c5723744829b2029fc1144197e5fae04f27a922f1492f771b523b94c8f95285ffcdc19fd584d54f17ecae3590294213d832
7
- data.tar.gz: 737eef7464aad01d508905a7cadd2185e34483475c8465ac23ae30194dce1d9886d7349ff8fc68318eba76f1a8058fda89d8304c39ecff08ab83946667d4ba27
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
- class DNode
13
- attr_accessor :data, :next_val, :pre_val
14
- def initialize(data, next_val = nil, pre_val = nil)
15
- @data = data
16
- @next_val = next_val
17
- @pre_val = pre_val
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 LinkedList
22
- attr_accessor :head, :length
23
- def initialize
24
- @head = nil
25
- @length = 0
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
- def shift(val)
29
- in_length
30
- @head = SNode.new val, @head
31
- end
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
- def push(val)
34
- in_length
35
- return @head = SNode.new(val) if @head.nil?
35
+ def push(val)
36
+ in_length
37
+ return @head = SinglyNode.new(val) if @head.nil?
36
38
 
37
- node = @head
38
- (@length - 2).times do
39
- node = node.next_val
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
- def pop
45
- node = @head
46
- if @length.zero?
47
- raise 'Error: List is empty'
48
- else
49
- de_length
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
- node.next_val = nil
68
+ str
54
69
  end
55
70
 
56
- @head
57
- end
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
- def to_s
60
- node = @head
61
- str = ''
62
- (@length - 1).times do
63
- str += "#{node.data} "
64
- node = node.next_val
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
- def to_a
70
- node = @head
71
- arr = []
72
- @length.times do
73
- arr << node.data
74
- node = node.next_val
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
- def each
80
- node = @head
81
- arr = []
82
- @length.times do
83
- arr << yield(node.data)
84
- node = node.next_val
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
- def index(index_val)
90
- raise 'index value higher than current length of list' if @length - 1 < index_val
111
+ private
91
112
 
92
- node = @head
93
- index_val.times do
94
- node = node.next_val
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
- def index_of(val)
100
- node = @head
101
- @length.times do
102
- return node.data if node.data == val
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
- node = node.next_val
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
- private
138
+ def push(val)
139
+ in_length
140
+ return @head = DoublyNode.new(val) if @head.nil?
110
141
 
111
- def in_length
112
- @length += 1
113
- end
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
- def de_length
116
- @length -= 1
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.3
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