Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

public interface List,V> { public abstract boolean add(K key,V value); public ab

ID: 640064 • Letter: P

Question

public interface List,V> {
  
   public abstract boolean add(K key,V value);
  
   public abstract V remove(K key);
  
   public abstract V remove(int n);
  
   public abstract V remove();
  
   public abstract V lookup(K key);
  
   public abstract int size();
  
   public abstract V get(int n);

}

Finish the implementation of SimpleBoundedList so that it satisifies the specification.

public class SimpleBoundedList,V> implements List {

   protected Object[] values;

   private int start = 0;
   private int nextEmpty = 0;

   /**
   *
   */
   public SimpleBoundedList(int bound) {
       values = new Object[bound];
   }

   @Override
   public boolean add(K key, V value) {
       boolean modify = false;
       int nextIndex = nextEmpty;

       if (((nextEmpty + 1) % values.length) != start) {
           nextEmpty = (nextEmpty + 1) % values.length;
           modify = true;
       } else if (values[nextEmpty] == null) {
           modify = true;
       }
      
       if (modify)
           values[nextIndex] = new Entry(key,value);
      
       return modify;
   }

   @Override
   public V remove(K key) {
       // TODO Auto-generated method stub
       return null;
   }

   @SuppressWarnings("unchecked")
   @Override
   public V lookup(K key) {
       return null;
   }

   @Override
   public V remove(int n) {
       // TODO Auto-generated method stub
       return null;
   }

   @Override
   public int size() {
       return 0;
   }

   @Override
   public V get(int n) {
       return null;
   }

   @Override
   public V remove() {
       // TODO Auto-generated method stub
       return null;
   }
  
   private class Entry {
      
       protected K key;
       protected V value;
      
       public Entry(K key, V value) {
           this.key = key;
           this.value = value;
       }

   }


}

Finish the implementation of UnboundedList so that it satisifies the specification.

public class UnboundedList,V> extends SimpleBoundedList {

   public UnboundedList(int bound) {
       super(bound);
   }

   @Override
   public boolean add(K key, V value) {
       ensureCapacity();
       super.add(key, value);
      
       return true;
   }

   private void ensureCapacity() {
       if (this.size() == this.values.length) {
           Object[] newArray = new Object[values.length * 2];
          
           // TODO: This code is broken... it potentially creates
           // a gap in the list. TO BE FIXED IN ASSIGNMENT!!!
           for (int i = 0; i < values.length; ++i) {
               newArray[i] = values[i];
           }
          
           this.values = newArray;
       }
      
   }

}

Finish the implementation of SimpleLinkedList so that it satisifies the specification.

public class SimpleLinkedList,V> implements List {
  
   private Node head = null;

   @Override
   public boolean add(K key, V value) {
       if (head == null) { // List is empty
           Node nn = new Node(key, value);
          
           head = nn;
       } else {
           Node node = head;
          
           while (node.next != null) {
               node = node.next;
           }
          
           node.next = new Node(key,value);
       }
      
       return true;
   }

   @Override
   public V remove(K key) {
       // TODO Auto-generated method stub
       return null;
   }

   @Override
   public V remove(int n) {
       // TODO Auto-generated method stub
       return null;
   }

   @Override
   public V remove() {
       // TODO Auto-generated method stub
       return null;
   }

   @Override
   public V lookup(K key) {
       // TODO Auto-generated method stub
       return null;
   }

   @Override
   public int size() {
       // TODO Auto-generated method stub
       return 0;
   }

   @Override
   public V get(int n) {
       // TODO Auto-generated method stub
       return null;
   }
  
   private class Node {
       protected K key;
       protected V value;
       protected Node next;
      
       Node(K k, V v) {
           key = k;
           value = v;
           next = null;
       }
   }

}

Explanation / Answer

/*
* Java Program to Implement Singly Linked List
*/

import java.util.Scanner;

/* Class Node */
class Node
{
   protected int data;
   protected Node link;

   /* Constructor */
   public Node()
   {
   link = null;
   data = 0;
   }
   /* Constructor */
   public Node(int d,Node n)
   {
   data = d;
   link = n;
   }
   /* Function to set link to next Node */
   public void setLink(Node n)
   {
   link = n;
   }
   /* Function to set data to current Node */
   public void setData(int d)
   {
   data = d;
   }
   /* Function to get link to next node */
   public Node getLink()
   {
   return link;
   }
   /* Function to get data from current Node */
   public int getData()
   {
   return data;
   }
}

/* Class linkedList */
class linkedList
{
   protected Node start;
   protected Node end ;
   public int size ;

   /* Constructor */
   public linkedList()
   {
   start = null;
   end = null;
   size = 0;
   }
   /* Function to check if list is empty */
   public boolean isEmpty()
   {
   return start == null;
   }
   /* Function to get size of list */
   public int getSize()
   {
   return size;
   }
   /* Function to insert an element at begining */
   public void insertAtStart(int val)
   {
   Node nptr = new Node(val, null);
   size++ ;
   if(start == null)
   {
   start = nptr;
   end = start;
   }
   else
   {
   nptr.setLink(start);
   start = nptr;
   }
   }
   /* Function to insert an element at end */
   public void insertAtEnd(int val)
   {
   Node nptr = new Node(val,null);
   size++ ;
   if(start == null)
   {
   start = nptr;
   end = start;
   }
   else
   {
   end.setLink(nptr);
   end = nptr;
   }
   }
   /* Function to insert an element at position */
   public void insertAtPos(int val , int pos)
   {
   Node nptr = new Node(val, null);
   Node ptr = start;
   pos = pos - 1 ;
   for (int i = 1; i < size; i++)
   {
   if (i == pos)
   {
   Node tmp = ptr.getLink() ;
   ptr.setLink(nptr);
   nptr.setLink(tmp);
   break;
   }
   ptr = ptr.getLink();
   }
   size++ ;
   }
   /* Function to delete an element at position */
   public void deleteAtPos(int pos)
   {
   if (pos == 1)
   {
   start = start.getLink();
   size--;
   return ;
   }
   if (pos == size)
   {
   Node s = start;
   Node t = start;
   while (s != end)
   {
   t = s;
   s = s.getLink();
   }
   end = t;
   end.setLink(null);
   size --;
   return;
   }
   Node ptr = start;
   pos = pos - 1 ;
   for (int i = 1; i < size - 1; i++)
   {
   if (i == pos)
   {
   Node tmp = ptr.getLink();
   tmp = tmp.getLink();
   ptr.setLink(tmp);
   break;
   }
   ptr = ptr.getLink();
   }
   size-- ;
   }
   /* Function to display elements */
   public void display()
   {
   System.out.print(" Singly Linked List = ");
   if (size == 0)
   {
   System.out.print("empty ");
   return;
   }
   if (start.getLink() == null)
   {
   System.out.println(start.getData() );
   return;
   }
   Node ptr = start;
   System.out.print(start.getData()+ "->");
   ptr = start.getLink();
   while (ptr.getLink() != null)
   {
   System.out.print(ptr.getData()+ "->");
   ptr = ptr.getLink();
   }
   System.out.print(ptr.getData()+ " ");
   }
}

/* Class SinglyLinkedList */
public class SinglyLinkedList
{
   public static void main(String[] args)
   {   
   Scanner scan = new Scanner(System.in);
   /* Creating object of class linkedList */
   linkedList list = new linkedList();
   System.out.println("Singly Linked List Test ");
   char ch;
   /* Perform list operations */
   do
   {
   System.out.println(" Singly Linked List Operations ");
   System.out.println("1. insert at begining");
   System.out.println("2. insert at end");
   System.out.println("3. insert at position");
   System.out.println("4. delete at position");
   System.out.println("5. check empty");
   System.out.println("6. get size");
   int choice = scan.nextInt();
   switch (choice)
   {
   case 1 :
   System.out.println("Enter integer element to insert");
   list.insertAtStart( scan.nextInt() );   
   break;
   case 2 :
   System.out.println("Enter integer element to insert");
   list.insertAtEnd( scan.nextInt() );   
   break;   
   case 3 :
   System.out.println("Enter integer element to insert");
   int num = scan.nextInt() ;
   System.out.println("Enter position");
   int pos = scan.nextInt() ;
   if (pos <= 1 || pos > list.getSize() )
   System.out.println("Invalid position ");
   else
   list.insertAtPos(num, pos);
   break;
   case 4 :
   System.out.println("Enter position");
   int p = scan.nextInt() ;
   if (p < 1 || p > list.getSize() )
   System.out.println("Invalid position ");
   else
   list.deleteAtPos(p);
   break;
   case 5 :
   System.out.println("Empty status = "+ list.isEmpty());
   break;   
   case 6 :
   System.out.println("Size = "+ list.getSize() +" ");
   break;   
   default :
   System.out.println("Wrong Entry ");
   break;   
   }
   /* Display List */
   list.display();
   System.out.println(" Do you want to continue (Type y or n) ");
   ch = scan.next().charAt(0);
   } while (ch == 'Y'|| ch == 'y');   
   }
}