From fbf312663cb0fee0b329cef1c1f846841ef774f9 Mon Sep 17 00:00:00 2001 From: Lisa Rolczynski Date: Thu, 26 May 2016 22:50:44 -0700 Subject: [PATCH] finished the exercise --- array-list.rb | 39 +++++++++-- linked-list.rb | 178 ++++++++++++++++++++++++++++++++----------------- 2 files changed, 150 insertions(+), 67 deletions(-) diff --git a/array-list.rb b/array-list.rb index a0d0342..6c93aaa 100644 --- a/array-list.rb +++ b/array-list.rb @@ -2,25 +2,56 @@ class ArrayList def initialize - @storage = [] + @storage = [nil,nil,nil,nil,nil] + @size = 0 end def add(value) + @storage[@size] = value + @size += 1 end - def delete(value) + def delete + return nil if empty? + + @size -= 1 end def display + @size.times do |i| + puts @storage[i] + end end def include?(key) + @size.times do |i| + if @storage[i] == key + return true + end + end + + false end def size + @size end def max + return nil if empty? + + biggest = @storage[0] + @size.times do |i| + if @storage[i] > @storage[biggest] + biggest = i + end + end + + @storage[biggest] + end + + def empty? + @size == 0 end end @@ -36,6 +67,6 @@ def max puts "Displaying Array List:" arr.display -puts "Delete 10 and then display the array list:" -arr.delete(10) +puts "Delete last element and then display the array list:" +arr.delete arr.display diff --git a/linked-list.rb b/linked-list.rb index a1b30bd..64d4ee4 100644 --- a/linked-list.rb +++ b/linked-list.rb @@ -3,73 +3,101 @@ # LinkedList -> This class holds the linked list functions - adding a node, traversing and displaying the linked list class Node - attr_accessor :value, :next_node + attr_accessor :value, :next_node - def initialize(val,next_in_line=null) - @value = val - @next_nodex = next_in_line - puts "Initialized a Node with value: " + value.to_s - end + def initialize(val,next_in_line=nil) + @value = val + @next_node = next_in_line + puts "Initialized a Node with value: " + value.to_s + end end class LinkedList - def initialize(val) - # Initialize a new node at the head - @head = Node.new(val,nil) - end - - def add(value) - # Traverse to the end of the list - # And insert a new node over there with the specified value - current = @head - while current.next_node != nil - current = current.next_node - end - current.next_node = Node.new(value,nil) - self - end - - def delete(val) - current = @head - if current.value == val - # If the head is the element to be delete, the head needs to be updated - @head = @head.next_node - else - # ... x -> y -> z - # Suppose y is the value to be deleted, you need to reshape the above list to : - # ... x->z - # ( and z is basically y.next_node ) - current = @head - while (current != nil) && (current.next_node != nil) && ((current.next_node).value != val) - current = current.next_node - end - - if (current != nil) && (current.next_node != nil) - current.next_node = (current.next_node).next_node - end - end - end - - def display - # Traverse through the list till you hit the "nil" at the end - current = @head - full_list = [] - while current.next_node != nil - full_list += [current.value.to_s] - current = current.next_node - end - full_list += [current.value.to_s] - puts full_list.join("->") - end - - def include?(key) - end - - def size - end - - def max - end + def initialize(val) + # Initialize a new node at the head + @head = Node.new(val,nil) + end + + def add(value) + # Traverse to the end of the list + # And insert a new node over there with the specified value + current = @head + while current.next_node != nil + current = current.next_node + end + current.next_node = Node.new(value,nil) + self + end + + def delete(val) + current = @head + if current.value == val + # If the head is the element to be delete, the head needs to be updated + @head = @head.next_node + else + # ... x -> y -> z + # Suppose y is the value to be deleted, you need to reshape the above list to : + # ... x->z + # ( and z is basically y.next_node ) + current = @head + while (current != nil) && (current.next_node != nil) && ((current.next_node).value != val) + current = current.next_node + end + + if (current != nil) && (current.next_node != nil) + current.next_node = (current.next_node).next_node + end + end + end + + def display + # Traverse through the list till you hit the "nil" at the end + current = @head + full_list = [] + while current.next_node != nil + full_list += [current.value.to_s] + current = current.next_node + end + full_list += [current.value.to_s] + puts full_list.join("->") + end + + # HOMEWORK: next 3 methods + def include?(key) + current = @head + while current.next_node != nil + return true if current.value == key + current = current.next_node + end + + return true if current.value == key + + false + end + + def size + current = @head + list_size = 0 + while current.next_node != nil + list_size += 1 + current = current.next_node + end + + list_size += 1 + end + + # optional + def max + current = @head + max = 0 + while current.next_node != nil + max = current.value if current.value > max + current = current.next_node + end + + max = current.value if current.value > max + max + end end @@ -88,6 +116,23 @@ def max ll.delete(10) ll.display +print "Checking if 5 is included in the linked list: " +puts ll.include?(5) + +print "Checking if 10 is included in the linked list: " +puts ll.include?(10) + +print "Checking the size of the linked list: " +puts ll.size + +ll.add(12) +puts "New size: #{ll.size}" + +ll.display + +print "Max value of any node is: " +puts ll.max + =begin Output: Initialized a Node with value: 5 @@ -97,4 +142,11 @@ def max 5->10->20 Delete 10 and then display the linked list: 5->20 +Checking if 5 is included in the linked list: true +Checking if 10 is included in the linked list: false +Checking the size of the linked list: 2 +Initialized a Node with value: 12 +New size: 3 +5->20->12 +Max value of any node is: 20 =end