RubyDataStructures 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/RELEASE_NOTES +25 -0
- data/lib/RubyDataStructures/doubly_linked_list/element.rb +3 -0
- data/lib/RubyDataStructures/doubly_linked_list.rb +44 -0
- data/lib/RubyDataStructures/singly_linked_list/element.rb +0 -3
- data/lib/RubyDataStructures/singly_linked_list.rb +11 -11
- data/lib/RubyDataStructures/version.rb +1 -1
- data/lib/RubyDataStructures.rb +3 -1
- data/test/RubyDataStructureTest.rb +3 -1
- data/test/doubly_linked_list_element_test.rb +39 -0
- data/test/doubly_linked_list_test.rb +61 -0
- data/test/multi_dimensional_array_test.rb +0 -3
- data/test/queue_as_array_test.rb +0 -3
- data/test/singly_linked_list_element_test.rb +0 -3
- data/test/singly_linked_list_test.rb +0 -13
- data/test/stack_as_array_test.rb +0 -3
- metadata +7 -3
data/RELEASE_NOTES
CHANGED
@@ -1,3 +1,28 @@
|
|
1
|
+
= Announce: Ruby DataStructures Release 0.0.3
|
2
|
+
Date Mar 5, 2011
|
3
|
+
Release 0.0.3 adds new features.
|
4
|
+
|
5
|
+
New features:
|
6
|
+
|
7
|
+
* DoublyLinkedList
|
8
|
+
|
9
|
+
Deprecation Notices:
|
10
|
+
|
11
|
+
* None
|
12
|
+
|
13
|
+
Bugs Fixed:
|
14
|
+
|
15
|
+
* None
|
16
|
+
|
17
|
+
Other Changes Include:
|
18
|
+
|
19
|
+
* Fixed typo: sentinal => sentinel
|
20
|
+
|
21
|
+
== Thanks
|
22
|
+
|
23
|
+
-- Satyaram B V
|
24
|
+
|
25
|
+
===========================================
|
1
26
|
= Announce: Ruby DataStructures Release 0.0.2
|
2
27
|
Date Mar 5, 2011
|
3
28
|
Release 0.0.2 adds new features.
|
@@ -0,0 +1,44 @@
|
|
1
|
+
class RubyDataStructures::DoublyLinkedList < RubyDataStructures::SinglyLinkedList
|
2
|
+
|
3
|
+
# Overrides the +initialize+ method in SinglyLinkedList
|
4
|
+
# Initializes the DoublyLinkedList
|
5
|
+
def initialize
|
6
|
+
@sentinel = RubyDataStructures::DoublyLinkedList::Element.new(self, nil)
|
7
|
+
self.reset
|
8
|
+
end
|
9
|
+
|
10
|
+
# Extends the +reset+ method in SinglyLinkedList to also set +previous+
|
11
|
+
# attribute to the sentinel
|
12
|
+
def reset
|
13
|
+
super
|
14
|
+
@sentinel.previous = @sentinel
|
15
|
+
end
|
16
|
+
|
17
|
+
# Returns the last element of the linked list
|
18
|
+
def tail
|
19
|
+
@sentinel.previous
|
20
|
+
end
|
21
|
+
|
22
|
+
# Overrides the +insert+ method in SinglyLinkedList to also set/update
|
23
|
+
# +previous+ attributes to the elements
|
24
|
+
def insert(item)
|
25
|
+
element = RubyDataStructures::DoublyLinkedList::Element.new(self, item)
|
26
|
+
element.next = @sentinel.next
|
27
|
+
@sentinel.next = element
|
28
|
+
element.next.previous = element
|
29
|
+
element.previous = @sentinel
|
30
|
+
end
|
31
|
+
|
32
|
+
# Overrides the +delete+ method in SinglyLinkedList to optimize the
|
33
|
+
# implementation.
|
34
|
+
def delete(key)
|
35
|
+
element = search(key)
|
36
|
+
|
37
|
+
if element == @sentinel
|
38
|
+
raise "Argument Error - No element with the key found"
|
39
|
+
else
|
40
|
+
element.previous.next = element.next
|
41
|
+
element.next.previous = element.previous
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -1,20 +1,20 @@
|
|
1
|
-
class RubyDataStructures::SinglyLinkedList
|
1
|
+
class RubyDataStructures::SinglyLinkedList
|
2
2
|
# Initializes the SinglyLinkedList
|
3
3
|
def initialize
|
4
|
-
@
|
4
|
+
@sentinel = RubyDataStructures::SinglyLinkedList::Element.new(self, nil)
|
5
5
|
self.reset
|
6
6
|
end
|
7
7
|
|
8
8
|
def head
|
9
|
-
@
|
9
|
+
@sentinel.next
|
10
10
|
end
|
11
11
|
|
12
12
|
def empty?
|
13
|
-
self.head == @
|
13
|
+
self.head == @sentinel
|
14
14
|
end
|
15
15
|
|
16
16
|
def reset
|
17
|
-
@
|
17
|
+
@sentinel.next = @sentinel
|
18
18
|
end
|
19
19
|
|
20
20
|
# Splices an element onto the front of the linked list
|
@@ -22,8 +22,8 @@ class RubyDataStructures::SinglyLinkedList
|
|
22
22
|
# *item* => Value to store in the element to be inserted
|
23
23
|
def insert(item)
|
24
24
|
element = RubyDataStructures::SinglyLinkedList::Element.new(self, item)
|
25
|
-
element.next = @
|
26
|
-
@
|
25
|
+
element.next = @sentinel.next
|
26
|
+
@sentinel.next = element
|
27
27
|
end
|
28
28
|
|
29
29
|
# Returns the first element with a given key
|
@@ -31,7 +31,7 @@ class RubyDataStructures::SinglyLinkedList
|
|
31
31
|
# *key* => Key of the element to be searched for
|
32
32
|
def search(key)
|
33
33
|
element = self.head
|
34
|
-
while (element != @
|
34
|
+
while (element != @sentinel) && (element.key != key)
|
35
35
|
element = element.next
|
36
36
|
end
|
37
37
|
|
@@ -43,14 +43,14 @@ class RubyDataStructures::SinglyLinkedList
|
|
43
43
|
# *key* => Key of the element to be removed
|
44
44
|
def delete(key)
|
45
45
|
element = self.head
|
46
|
-
prev_element = @
|
46
|
+
prev_element = @sentinel
|
47
47
|
|
48
|
-
while (element != @
|
48
|
+
while (element != @sentinel) && (element.key != key)
|
49
49
|
prev_element = element
|
50
50
|
element = element.next
|
51
51
|
end
|
52
52
|
|
53
|
-
if element == @
|
53
|
+
if element == @sentinel
|
54
54
|
raise "Argument Error - No element with the key found"
|
55
55
|
else
|
56
56
|
prev_element.next = element.next
|
data/lib/RubyDataStructures.rb
CHANGED
@@ -6,4 +6,6 @@ require 'RubyDataStructures/multi_dimensional_array'
|
|
6
6
|
require 'RubyDataStructures/stack_as_array'
|
7
7
|
require 'RubyDataStructures/queue_as_array'
|
8
8
|
require 'RubyDataStructures/singly_linked_list'
|
9
|
-
require 'RubyDataStructures/singly_linked_list/element'
|
9
|
+
require 'RubyDataStructures/singly_linked_list/element'
|
10
|
+
require 'RubyDataStructures/doubly_linked_list'
|
11
|
+
require 'RubyDataStructures/doubly_linked_list/element'
|
@@ -8,4 +8,6 @@ require 'test/multi_dimensional_array_test'
|
|
8
8
|
require 'test/stack_as_array_test'
|
9
9
|
require 'test/queue_as_array_test'
|
10
10
|
require 'test/singly_linked_list_test'
|
11
|
-
require 'test/singly_linked_list_element_test'
|
11
|
+
require 'test/singly_linked_list_element_test'
|
12
|
+
require 'test/doubly_linked_list_test'
|
13
|
+
require 'test/doubly_linked_list_element_test'
|
@@ -0,0 +1,39 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'RubyDataStructures'
|
5
|
+
|
6
|
+
class DoublyLinkedListElementTest < Test::Unit::TestCase
|
7
|
+
def setup
|
8
|
+
@list = RubyDataStructures::SinglyLinkedList.new
|
9
|
+
@element = RubyDataStructures::SinglyLinkedList::Element.new(@list, 9)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_initialize
|
13
|
+
assert_equal 9, @element.key
|
14
|
+
assert_nil @element.next
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_key
|
18
|
+
assert_equal 9, @element.key
|
19
|
+
|
20
|
+
@element.key = 3
|
21
|
+
assert_equal 3, @element.key
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_next
|
25
|
+
e1 = @element
|
26
|
+
e2 = RubyDataStructures::SinglyLinkedList::Element.new(@list, 9)
|
27
|
+
assert_nil e1.next
|
28
|
+
assert_nil e2.next
|
29
|
+
|
30
|
+
e1.next = e2
|
31
|
+
assert_equal e2, e1.next
|
32
|
+
assert_nil e2.next
|
33
|
+
|
34
|
+
e2.next = e1
|
35
|
+
assert_equal e2, e1.next
|
36
|
+
assert_equal e1, e2.next
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'RubyDataStructures'
|
5
|
+
|
6
|
+
class DoublyLinkedListTest < Test::Unit::TestCase
|
7
|
+
def setup
|
8
|
+
@list = RubyDataStructures::DoublyLinkedList.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_initialize
|
12
|
+
assert_nil @list.head.key
|
13
|
+
assert_nil @list.tail.key
|
14
|
+
assert @list.empty?
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_singly_linked_list
|
18
|
+
assert @list.empty?
|
19
|
+
assert_nil @list.head.key
|
20
|
+
assert_nil @list.tail.key
|
21
|
+
assert_nil @list.search(7).key
|
22
|
+
assert_nil @list.search(9).key
|
23
|
+
|
24
|
+
@list.insert(7)
|
25
|
+
assert !@list.empty?
|
26
|
+
assert_equal 7, @list.head.key
|
27
|
+
assert_equal 7, @list.tail.key
|
28
|
+
assert_equal 7, @list.search(7).key
|
29
|
+
assert_nil @list.search(9).key
|
30
|
+
|
31
|
+
@list.insert(9)
|
32
|
+
assert !@list.empty?
|
33
|
+
assert_equal 9, @list.head.key
|
34
|
+
assert_equal 7, @list.tail.key
|
35
|
+
assert_equal 7, @list.search(7).key
|
36
|
+
assert_equal 9, @list.search(9).key
|
37
|
+
|
38
|
+
@list.delete(7)
|
39
|
+
assert !@list.empty?
|
40
|
+
assert_equal 9, @list.head.key
|
41
|
+
assert_equal 9, @list.tail.key
|
42
|
+
assert_nil @list.search(7).key
|
43
|
+
assert_equal 9, @list.search(9).key
|
44
|
+
|
45
|
+
assert_raise RuntimeError, "Argument Error - No element with the key found" do
|
46
|
+
@list.delete(7)
|
47
|
+
end
|
48
|
+
assert !@list.empty?
|
49
|
+
assert_equal 9, @list.head.key
|
50
|
+
assert_equal 9, @list.tail.key
|
51
|
+
assert_nil @list.search(7).key
|
52
|
+
assert_equal 9, @list.search(9).key
|
53
|
+
|
54
|
+
@list.reset
|
55
|
+
assert @list.empty?
|
56
|
+
assert_nil @list.head.key
|
57
|
+
assert_nil @list.tail.key
|
58
|
+
assert_nil @list.search(7).key
|
59
|
+
assert_nil @list.search(9).key
|
60
|
+
end
|
61
|
+
end
|
data/test/queue_as_array_test.rb
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
# To change this template, choose Tools | Templates
|
2
|
-
# and open the template in the editor.
|
3
|
-
|
4
1
|
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
|
5
2
|
|
6
3
|
require 'test/unit'
|
@@ -16,16 +13,6 @@ class SinglyLinkedListTest < Test::Unit::TestCase
|
|
16
13
|
assert @list.empty?
|
17
14
|
end
|
18
15
|
|
19
|
-
def test_insert
|
20
|
-
assert_nil @list.head.key
|
21
|
-
|
22
|
-
@list.insert(7)
|
23
|
-
assert_equal 7, @list.head.key
|
24
|
-
|
25
|
-
@list.insert(9)
|
26
|
-
assert_equal 9, @list.head.key
|
27
|
-
end
|
28
|
-
|
29
16
|
def test_singly_linked_list
|
30
17
|
assert @list.empty?
|
31
18
|
assert_nil @list.head.key
|
data/test/stack_as_array_test.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: RubyDataStructures
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Satyaram B V
|
@@ -37,6 +37,8 @@ files:
|
|
37
37
|
- Rakefile
|
38
38
|
- RubyDataStructures.gemspec
|
39
39
|
- lib/RubyDataStructures.rb
|
40
|
+
- lib/RubyDataStructures/doubly_linked_list.rb
|
41
|
+
- lib/RubyDataStructures/doubly_linked_list/element.rb
|
40
42
|
- lib/RubyDataStructures/multi_dimensional_array.rb
|
41
43
|
- lib/RubyDataStructures/queue_as_array.rb
|
42
44
|
- lib/RubyDataStructures/ruby_data_structures.rb
|
@@ -45,6 +47,8 @@ files:
|
|
45
47
|
- lib/RubyDataStructures/stack_as_array.rb
|
46
48
|
- lib/RubyDataStructures/version.rb
|
47
49
|
- test/RubyDataStructureTest.rb
|
50
|
+
- test/doubly_linked_list_element_test.rb
|
51
|
+
- test/doubly_linked_list_test.rb
|
48
52
|
- test/multi_dimensional_array_test.rb
|
49
53
|
- test/queue_as_array_test.rb
|
50
54
|
- test/singly_linked_list_element_test.rb
|