CSci 2101 Data Structures: Lab 4
Problem 1 (paper-and-pencil)
For the following program draw the memory picture at two points of the
program execution: right before each of
the print statement gets executed. Based on your picture, what would
each of the statements print? Run the
program to check your result. If they are different from what your
pictures predict, correct the pictures.
public class WhatHappens {
public static void main(String [] args) {
Node n1 = new Node(1);
Node n2 = new Node(2);
Node n3 = n1;
n3.setNext(n2);
System.out.println( (n1.getNext()).getData() );
n3 = new Node(3);
(n1.getNext()).setNext(n3);
System.out.println( (n2.getNext()).getData() );
}
}
Submit the two memory pictures (on paper). You don't need to submit
any files for this problem.
Problem 2
In the file TestLinkedLists.java write a
loop to count the number of nodes of the list with data value
5. Test the program, submit ALL your test results.
Problem 3
In the file LinkedList.java
add a method
length()
which counts the number of elements on the
list. The list itself should not change in any way.
Write testing code for the method in a new file TestLength.java
(create a linked list, add some elements to it or keep it empty, and
call the method length()
on the list). Make sure
to test the method thoroughly before going on to the next problem.
Problem 4
Copy/paste the following program into a file WeirdList.java:
public class WeirdList {
public static void main(String [] args) {
Node n;
// fill in your code here to initialize node n
// you may create other nodes if needed
// don't change any code below this point
LinkedList weirdlist = new LinkedList();
weirdlist.setFirst(n);
System.out.println("the length of the list is " + weirdlist.length());
}
}
Don't modify any code after the last line of comments.
Problem 5
Look at the following program and try to predict what happens when you
run it (drawing memory pictures helps). Then run the
program. Important: press Ctrl-C (the Ctrl key and the C key at
the same time) to stop the program.
public class Why {
public static void main(String [] args) {
// testing nodes:
Node first = new Node(5);
Node second = new Node(6);
first.setNext(second);
second.setNext(first);
// testing linked lists:
LinkedList list = new LinkedList();
// add the two nodes to the list
list.setFirst(first);
list.addFront(second);
// print the list
System.out.println("The list elements are:");
Node n = list.getFirst(); // if the list is empty, first is null
while(n != null) {
int data = n.getData();
System.out.println(data);
n = n.getNext();
}
}
}
On the Wiki submission page explain why the program's behaves this
way. You don't need to submit any code for this problem.
Problem 6
For this and the next problem assume that linked lists don't have
any peculiarities, such as those in problem 5.
In a new file create a linked list. Then write a loop that will go
through the list and duplicate each node. For instance, if the list
had three nodes with data 5, 4, 3, then after the loop the list should
have 6 nodes with data 5, 5, 4, 4, 3, 3. Make sure that the program
works correctly for an empty list. Print out the list at the end to
test the program. Submit all your test cases.
*Problem 7* (extra credit)
In a new file create a linked list and then write a loop
to remove all the elements of the list with a data value 5. Print the
list at the end to check the result. BR>
This is a hard problem. Test it carefully. Make sure to submit ALL
your test cases with the program. If it doesn't work in some cases,
submit the test cases and explain what doesn't work (and, ideally,
what you think is the reason for the problem). Partial credit
will be given for programs that work in some, but not all,
cases. Explanations contribute to the grade.
This is a lab from CSci 2101 course.