650 likes | 665 Views
Learn the properties of unordered lists, sequential search, linked lists, and implementing Java classes for an expense processing application. Enhance coding skills in object-oriented programming for efficient expense management.
E N D
Unordered List Chapter 4
Learning Objectives • Describe the properties of an unordered list. • Study sequential search and analyze its worst-case 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.
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.
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.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.
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.
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.
4.2 Sequential Search • Best case • 1 • Worst case • n • Unsuccessful search? • n
UnorderedList implementation using array List: array of element
Insert method • insert(“Rami”)
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
4.3 A List Class • NoSuchElementException thrown back.
4.3 A List Class • Example that enumerates:
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.
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.
4.4.4 ExpenseList Class Implementation Wrong Wrong
4.4.4 ExpenseList Class Implementation • minExpense, and aveExpense scan every expense entry in the list.
4.4.5 Equality of Objects and Searching • Rewrite the method by implementing a search in the method.
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.
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.
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.
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.
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.
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
4.5.2 Insertion • Adding to the beginning of the list.
4.5.2 Insertion • Adding in between two nodes.
4.5.2 Insertion • Adding to the end of the list
4.5.3 Deletion • Deleting the last node, or in-between node. • Deleting the first node • L = L.next
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.
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.
4.5.4 Access • Deleting the first occurrence of the string “Carrot”.
4.5.4 Access • We can't delete nextNode unless we have a reference to the node prior to it.