ds_algo 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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