CH4

Chapter 4
Unordered List
1
Learning Objectives
●
●
●
●
Describe the properties of an unordered list.
Study sequential search and analyze its worstcase and average running times.
Discover how the entries of a list may be
dynamically rearranged at achieve better
search times.
Understand the public interface of an unordered
list class in Java and the running times of its
methods.
2
Learning Objectives
●
●
●
Develop a set of classes for an expense
processing application based on an unordered
list.
Understand how object-oriented programming
can be used to write a single piece of code in
Java that can perform equality checking based
on different criteria for different input objects.
Learn what linked lists are, why they are useful,
and how to build and manipulate them.
3
Learning Objectives
●
●
Implement a linked lest class in Java and
analyze the running times of its methods.
Implement an unordered list class in Java using
a linked list component.
4
4.1 Unordered List Properties
●
Keeping track of daily expenses.

It would be useful to write a program that maintains
an expense list of all recorded expenses, that can
be used to find quick answers to simple budgeting
type questions.
5
4.1 Unordered List Properties
6
4.1 Unordered List Properties
7
4.1 Unordered List Properties
●
Answer the following questions:

What is the maximum (or minimum) expense, and
on what item?

What is the average expense?

What is the total amount spent on a given item?
●
All these question may be answered by scanning such a
list from the beginning and terminating when our question
is answered.
8
4.1 Unordered List Properties
9
4.2 Sequential Search
●
Operation contains searches for a specific itme
in the list.

Since the list is unordered, the only way to conduct
the search is to look at every element in the
sequence.

If a match is found, the operation returns true,
otherwise it returns false.
10
4.2 Sequential Search
11
4.2 Sequential Search
●
Best case

●
Worst case

●
1
n
Unsuccessful search?

n
12
UnorderedList implementation using
array
List: array of element
13
Insert method
●
insert(“Rami”)
14
Delete method
1- define loc =0
2- search for item in array list using loop.
If item in the list
3- assign item index to loc.
4- store last element of array “list” in index = loc
5- numItems -Else
Print element not in the list
15
Delete method
16
delete(“Judy”)
17
UnorderedList class
4.3 A List Class
●
NoSuchElementException thrown back.
19
4.3 A List Class
20
4.3 A List Class
21
4.3 A List Class
●
Example that enumerates:
22
4.3 A List Class
●
Running times

An implementation should be able to access the
last item of the list in O(1) time, so that the add
method may be implemented in O(1) time.

Maintain a count of the number of items in the list.
●

The size method can then simply return this count.
Use a cursor to enumerate a list, so that each of the
enumeration methods first and next may be
implemented in O(1) time.
23
4.4 An ExpenseList Class Using List
●
An ExpenseList class would support operations
for maintaining expenses.

Use the generic List class as a component,
implementing all the ExpenseList class methods by
reusing code from one or more of the appropriate
List class methods.

Every expense will consists of the amount of
expense and the item on which the expense was
incurred.
24
4.4.1 Expense Class Interface
25
4.4.1 Expense Class Interface
26
4.4.2 Expense Class
27
4.4.2 Expense Class
28
4.4.3 ExpenseList Class Interface
29
4.4.3 ExpenseList Class Interface
30
4.4.4 ExpenseList Class
Implementation
Wrong
Wrong
31
4.4.4 ExpenseList Class
Implementation
●
minExpense, and aveExpense scan every
expense entry in the list.
32
4.4.5 Equality of Objects and
Searching
●
Rewrite the method by implementing a search
in the method.
33
4.4.5 Equality of Objects and
Searching
●
The notion of equality is defined by the equals
method of the exp object.

Two expenses are equal if they have the same
amount and item.

What if we wanted the equality based only on the
item so if two expenses have the same item with
different amount they are equal.

We would need to redefine the equality of expenses
in terms of item only.
34
4.4.5 Equality of Objects and
Searching
●
About Keys

The get method is useful to extract an entire object
from the list by matching its key part with a
specified key.
35
4.4.5 Equality of Objects and
Searching
●
Only use the key part, (ex item )and get returns
the entire matching entry (including amount), if
any.

What data structure should be used to store the
items in a list?
●
Removing items from anywhere in the list.



●
Leaves holes in the array.
Uses more space than necessary.
Search times would be greater than O(n).
If the holes are patched up by compacting the array, we
would be doing a lot of data movement within the array.
36
4.5 Linked List
37
4.5 Linked List
●
To access the entries of the linked list, a
reference to its first entry is all we need.

One can access any entry by simply following the
chain of links.

When an entry is removed from some place in a
linked list, all that needs to be done is to have its
predecessor's link refer to its successor.

Similarly, an entry may be inserted anywhere in the
list without having to move other entries over to
create space.
38
4.5 Linked List
39
4.5 Linked List
●
The biggest drawback of the linked list is its
inability to perform random accesses for any
entry in a single step.
40
4.5.1 Node
41
4.5.1 Node
●
A node is defined in terms of itself:

next field of the node class is a reference to another
Node<T> object.

Self-referential structure
42
4.5.2 Insertion
●
Adding to the
beginning of the list.
43
4.5.2 Insertion
●
Adding in between
two nodes.
44
4.5.2 Insertion
●
Adding to the end of the list
45
4.5.3 Deletion
●
Deleting the last node, or in-between node.
●
Deleting the first node
●
L = L.next
46
4.5.3 Deletion
●
In both insertion and deletion we assumed the
existence of P, a reference to the node just prior
to the one to be inserted or deleted.
47
4.5.4 Access
●
Stepping through, or traversing, all the entries
of a linked list from beginning to end following
the chain of references is a useful operation in
practice.
48
4.5.4 Access
●
Deleting the first occurrence of the string
“Carrot”.
49
4.5.4 Access
●
We can't delete nextNode unless we have a
reference to the node prior to it.
50
UnorderedList implementation using
Linked List
●
Insert


list = null  empty list
Insert(“john”)
51
Insert
●
insert(“Becca”)
52
Delete
●
delete(“Lila”)
53
●
delete(“Kate”)
54
delete(“John”)
55
delete last node in the list
●
●
delete(“Becca”)
list = null
56
4.5.5 Circular Linked List
●
It is useful to have instant access to both the
first and the last entries of a linked list.
57
4.5.5 Circular Linked List
●
Given that L refers to the last entry, the first
entry is simply L.next.

if L==L.next, that means there is exactly one entry
in the CLL.
58
4.5.5 Circular Linked List
●
Insertion

Inserting a new node as the first entry?

Will not work if the list is empty.
59
4.5.5 Circular Linked List
●
Deletion

Deleting the last node.

Wee need to have access to the node preceding it.

Assume that P is this predecessor node, and that it
has already been located.

Assumes there are at least two nodes in the list.

The termination condition is that the scanning
pointer returns to the starting position.
60
4.5.5 Circular Linked List
●
Assumes the list is not empty.
61
Doubly Linked List
●
6-62
A linked list in which each node is linked to both
its successor and its predecessor
6-63
Inserting into a Doubly Linked List
6-64
Deleting from a Doubly Linked List
6-65