ds_algo 0.0.2 → 0.0.3
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 +118 -0
- metadata +5 -4
- data/lib/ds_algo.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 82c505780e91d3c5d225f980a86ca89b808ee40b69a87e83abcc8f6df49705d3
|
4
|
+
data.tar.gz: a20a2f40bb4379a27f93ba4159e3b4cb50edc0f1a2e607980fb71b3199e0d0f2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 45c27cdc89faabf7be5361e4fb465c5723744829b2029fc1144197e5fae04f27a922f1492f771b523b94c8f95285ffcdc19fd584d54f17ecae3590294213d832
|
7
|
+
data.tar.gz: 737eef7464aad01d508905a7cadd2185e34483475c8465ac23ae30194dce1d9886d7349ff8fc68318eba76f1a8058fda89d8304c39ecff08ab83946667d4ba27
|
@@ -0,0 +1,118 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
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
|
+
|
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
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class LinkedList
|
22
|
+
attr_accessor :head, :length
|
23
|
+
def initialize
|
24
|
+
@head = nil
|
25
|
+
@length = 0
|
26
|
+
end
|
27
|
+
|
28
|
+
def shift(val)
|
29
|
+
in_length
|
30
|
+
@head = SNode.new val, @head
|
31
|
+
end
|
32
|
+
|
33
|
+
def push(val)
|
34
|
+
in_length
|
35
|
+
return @head = SNode.new(val) if @head.nil?
|
36
|
+
|
37
|
+
node = @head
|
38
|
+
(@length - 2).times do
|
39
|
+
node = node.next_val
|
40
|
+
end
|
41
|
+
node.next_val = SNode.new val
|
42
|
+
end
|
43
|
+
|
44
|
+
def pop
|
45
|
+
node = @head
|
46
|
+
if @length.zero?
|
47
|
+
raise 'Error: List is empty'
|
48
|
+
else
|
49
|
+
de_length
|
50
|
+
(@length - 1).times do
|
51
|
+
node = node.next_val
|
52
|
+
end
|
53
|
+
node.next_val = nil
|
54
|
+
end
|
55
|
+
|
56
|
+
@head
|
57
|
+
end
|
58
|
+
|
59
|
+
def to_s
|
60
|
+
node = @head
|
61
|
+
str = ''
|
62
|
+
(@length - 1).times do
|
63
|
+
str += "#{node.data} "
|
64
|
+
node = node.next_val
|
65
|
+
end
|
66
|
+
str
|
67
|
+
end
|
68
|
+
|
69
|
+
def to_a
|
70
|
+
node = @head
|
71
|
+
arr = []
|
72
|
+
@length.times do
|
73
|
+
arr << node.data
|
74
|
+
node = node.next_val
|
75
|
+
end
|
76
|
+
arr
|
77
|
+
end
|
78
|
+
|
79
|
+
def each
|
80
|
+
node = @head
|
81
|
+
arr = []
|
82
|
+
@length.times do
|
83
|
+
arr << yield(node.data)
|
84
|
+
node = node.next_val
|
85
|
+
end
|
86
|
+
arr
|
87
|
+
end
|
88
|
+
|
89
|
+
def index(index_val)
|
90
|
+
raise 'index value higher than current length of list' if @length - 1 < index_val
|
91
|
+
|
92
|
+
node = @head
|
93
|
+
index_val.times do
|
94
|
+
node = node.next_val
|
95
|
+
end
|
96
|
+
node.data
|
97
|
+
end
|
98
|
+
|
99
|
+
def index_of(val)
|
100
|
+
node = @head
|
101
|
+
@length.times do
|
102
|
+
return node.data if node.data == val
|
103
|
+
|
104
|
+
node = node.next_val
|
105
|
+
end
|
106
|
+
raise 'value not found'
|
107
|
+
end
|
108
|
+
|
109
|
+
private
|
110
|
+
|
111
|
+
def in_length
|
112
|
+
@length += 1
|
113
|
+
end
|
114
|
+
|
115
|
+
def de_length
|
116
|
+
@length -= 1
|
117
|
+
end
|
118
|
+
end
|
metadata
CHANGED
@@ -1,22 +1,23 @@
|
|
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.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- imhtapm
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-07-
|
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
15
|
email: imhtapm@gmail.com
|
15
16
|
executables: []
|
16
17
|
extensions: []
|
17
18
|
extra_rdoc_files: []
|
18
19
|
files:
|
19
|
-
- lib/
|
20
|
+
- lib/data_struct/linked_list.rb
|
20
21
|
homepage: https://rubygems.org/gems/ds_algo
|
21
22
|
licenses:
|
22
23
|
- MIT
|
@@ -39,5 +40,5 @@ requirements: []
|
|
39
40
|
rubygems_version: 3.0.4
|
40
41
|
signing_key:
|
41
42
|
specification_version: 4
|
42
|
-
summary: ruby gem for data structures and algorithms
|
43
|
+
summary: ruby gem for data structures and algorithms (under development)
|
43
44
|
test_files: []
|