Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming 10-1 l Vectors l Linked Data Structures Dynamic Data Structures.

Slides:



Advertisements
Similar presentations
Chapter 22 Implementing lists: linked implementations.
Advertisements

Singly linked lists Doubly linked lists
DATA STRUCTURES USING C++ Chapter 5
Lists and the Collection Interface Chapter 4. Chapter Objectives To become familiar with the List interface To understand how to write an array-based.
Introduction to Linked Lists In your previous programming course, you saw how data is organized and processed sequentially using an array. You probably.
Designing an ADT The design of an ADT should evolve naturally during the problem-solving process Questions to ask when designing an ADT What data does.
Chapter 10 Introduction to Arrays
Slides prepared by Rose Williams, Binghamton University Chapter 14 Generics and the ArrayList Class.
HST 952 Computing for Biomedical Scientists Lecture 8.
Chapter 101 Dynamic Data Structures and Generics Chapter 10.
C++ Programming: Program Design Including Data Structures, Third Edition Chapter 17: Linked Lists.
Using ArrayList. Lecture Objectives To understand the foundations behind the ArrayList class Explore some of the methods of the ArrayList class.
1 Chapter 10 l Vector l Linked Data Structures l interface Dynamic Data Structures.
Slides prepared by Rose Williams, Binghamton University Chapter 14 Generics and the ArrayList Class.
Chapter 14 Generics and the ArrayList Class Copyright © 2010 Pearson Addison-Wesley. All rights reserved.
C++ Programming: Program Design Including Data Structures, Fifth Edition Chapter 17: Linked Lists.
Chapter 10Java: an Introduction to Computer Science & Programming - Walter Savitch 1 Announcements/Reminders l Project 6 due on Thursday March 31 l Exam.
Data Structures Using C++ 2E
Chapter 10Java: an Introduction to Computer Science & Programming - Walter Savitch 1 Chapter 10 l Vectors l Linked Data Structures Dynamic Data Structures.
JAVA: An Introduction to Problem Solving & Programming, 5 th Ed. By Walter Savitch and Frank Carrano. ISBN © 2008 Pearson Education, Inc., Upper.
Chapter 6Java: an Introduction to Computer Science & Programming - Walter Savitch 1 l Array Basics l Arrays in Classes and Methods l Programming with Arrays.
Pointer Data Type and Pointer Variables
Adapted from instructor resources Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights.
1 C - Memory Simple Types Arrays Pointers Pointer to Pointer Multi-dimensional Arrays Dynamic Memory Allocation.
ArrayList, Multidimensional Arrays
JAVA: An Introduction to Problem Solving & Programming, 5 th Ed. By Walter Savitch and Frank Carrano. ISBN © 2009 Pearson Education, Inc., Upper.
Arrays Module 6. Objectives Nature and purpose of an array Using arrays in Java programs Methods with array parameter Methods that return an array Array.
1 © 2002, Cisco Systems, Inc. All rights reserved. Arrays Chapter 7.
ARRAYS Computer Engineering Department Java Course Asst. Prof. Dr. Ahmet Sayar Kocaeli University - Fall
Arrays An array is a data structure that consists of an ordered collection of similar items (where “similar items” means items of the same type.) An array.
Chapter 6Java: an Introduction to Computer Science & Programming - Walter Savitch 1 Chapter 6 l Array Basics l Arrays and Methods l Programming with Arrays.
Pointers OVERVIEW.
Chapter 11. Multidimensional Arrays and Vectors Multidimensional Arrays Vectors Computer Programming with JAVA.
Data structures Abstract data types Java classes for Data structures and ADTs.
Lists II. List ADT When using an array-based implementation of the List ADT we encounter two problems; 1. Overflow 2. Wasted Space These limitations are.
Dynamic Data Structures and Generics Chapter 10. Outline Vectors Linked Data Structures Introduction to Generics.
Aug 9, CMSC 202 ArrayList. Aug 9, What’s an Array List ArrayList is  a class in the standard Java libraries that can hold any type of object.
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved Stacks.
(c) University of Washington16-1 CSC 143 Java Linked Lists Reading: Ch. 20.
Comp 249 Programming Methodology Chapter 15 Linked Data Structure – Part A Dr. Aiman Hanna Department of Computer Science & Software Engineering Concordia.
Chapter 10: Classes and Data Abstraction. Objectives In this chapter, you will: Learn about classes Learn about private, protected, and public members.
CMSC 202 Advanced Section Classes and Objects: Object Creation and Constructors.
Chapter 5 Linked List by Before you learn Linked List 3 rd level of Data Structures Intermediate Level of Understanding for C++ Please.
CSE 1201 Object Oriented Programming ArrayList 1.
Chapter 11Java: an Introduction to Computer Science & Programming - Walter Savitch 1 Chapter 11 l Multidimensional Arrays l Vectors Multidimensional Arrays.
Chapter 10Java: an Introduction to Computer Science & Programming - Walter Savitch 1 Chapter 10 l Vectors l Linked Data Structures Dynamic Data Structures.
1 Chapter 6 Methods for Making Data Structures. 2 Dynamic Arrays in Data Structures In almost every data structure, we want functions for inserting and.
JAVA: An Introduction to Problem Solving & Programming, 5 th Ed. By Walter Savitch and Frank Carrano. ISBN © 2008 Pearson Education, Inc., Upper.
Slides prepared by Rose Williams, Binghamton University Chapter 16 Collections and Iterators.
Chapter 10: Classes and Data Abstraction. Classes Object-oriented design (OOD): a problem solving methodology Objects: components of a solution Class:
Arrays Chapter 7. MIS Object Oriented Systems Arrays UTD, SOM 2 Objectives Nature and purpose of an array Using arrays in Java programs Methods.
Chapter 101 Dynamic Data Structures and Generics Chapter 10.
JAVA: An Introduction to Problem Solving & Programming, 6 th Ed. By Walter Savitch ISBN © 2012 Pearson Education, Inc., Upper Saddle River,
Chapter 17: Linked Lists. Objectives In this chapter, you will: – Learn about linked lists – Learn the basic properties of linked lists – Explore insertion.
MORE POINTERS Plus: Memory Allocation Heap versus Stack.
Linked Lists and Generics Written by J.J. Shepherd.
Chapter 9 Introduction to Arrays Fundamentals of Java.
DYNAMIC MEMORY ALLOCATION. Disadvantages of ARRAYS MEMORY ALLOCATION OF ARRAY IS STATIC: Less resource utilization. For example: If the maximum elements.
LESSON 8: INTRODUCTION TO ARRAYS. Lesson 8: Introduction To Arrays Objectives: Write programs that handle collections of similar items. Declare array.
Recap Resizing the Vector Push_back function Parameters passing Mechanism Primitive Arrays of Constants Multidimensional Arrays The Standard Library string.
Chapter 10Java: an Introduction to Computer Science & Programming - Walter Savitch 1 Chapter 10 l Vectors l Linked Data Structures Dynamic Data Structures.
Lecture 6 of Computer Science II
Optimizing Malloc and Free
Vectors Linked Data Structures
Dynamic Data Structures and Generics
Object Oriented Programming in java
Dynamic Data Structures and Generics
Java Programming Language
Classes and Objects Object Creation
CMSC 202 Constructors Version 9/10.
Presentation transcript:

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming 10-1 l Vectors l Linked Data Structures Dynamic Data Structures

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming 10-2 Overview l This chapter is about data structures that are dynamic: They can grow and shrink while your program is running l Vectors are similar to arrays but are more flexible. l Linked lists are a dynamic data structure commonly used in many programming languages.

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming 10-3 Vectors "Well, I'll eat it," said Alice, "and if it makes me grow larger, I can reach the key; and if it makes me grow smaller, I can creep under the door; so either way I'll get into the garden…" Lewis Carroll, Alice's Adventures in Wonderland VECTORS Think of them as arrays that can get larger or smaller when a program is running.

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming 10-4 Using Vectors l Vectors are not automatically part of Java »they are in the util library »you must import java.util.* Create a vector with an initial capacity of 20 elements: Vector v = new Vector(20);

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming 10-5 Initial Capacity and Efficiency: a Classic Engineering Tradeoff l Engineering involves making difficult tradeoffs »"There's no such thing as a free lunch." –an American saying »Usually, if you gain something you lose something somewhere else l Choosing the initial capacity of a vector is an example of a tradeoff »making it too large wastes allocated memory space »making it too small slows execution –it takes time to resize vectors dynamically l Solution? »optimize one at the expense of the other »or make good compromises –choose a size that is not too big and not too small

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming 10-6 Vector Syntax Array: a is a String array a[i] = "Hi, Mom!"); String temp = a[i]; Vector: v is a vector v.setElementAt("Hi, Mom!", i); String temp = (String)v.elementAt(i); Instead of the index in brackets and = for assignment, use vector method setElementAt with two arguments, the value and the index Use vector method elementAt(int index) to retrieve the value of an element Note: the cast to String is required because the base type of vector elements is Object l The idea is the same as for arrays, but the syntax is different l As with arrays, the index must be in the range 0 to size-of-the-vector

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming 10-7 Vector Methods l The vector class includes many useful methods: »constructors »array-like methods, e.g. setElementAt & elementAt »methods to add elements »methods to remove elements »search methods »methods to work with the vector's size and capacity, e.g. to find its size and check if it is empty »a clone method to copy a vector l See the text for more information

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming 10-8 A little Detail about setElementAt "The devil's in the details." –an American engineering saying l Vectors put values in successive indexes »addElement is used to put initial values in a vector »new values can be added only at the next higher index You cannot use setElemetAt to put a value at any index »setElemetAt can be used to assign the value of an indexed variable only if it has been previously assigned a value with addElement

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming 10-9 Programming Tip : Adding to a Vector Can use addElement »adds elements at index positions in order Can also use insertElementAt to add to a vector »specify the position where you want to insert the element: v.insertElementAt(element, index); »index must be less than or equal to size »If index is equal to size, then element will be inserted at the end (the same place where addElement would add it). »If index is greater than size, you will get a run-time error that says ArrayIndexOutOfBoundsException »All elements at position index or higher will have their index increased by 1

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming Base Type of Vectors l The base type of an array is specified when the array is declared »all elements of arrays must be of the same type The base type of a vector is Object »elements of a vector can be of any class type »in fact, elements of a vector can be of different class types! »to store primitive types in a vector they must be converted to a corresponding wrapper class Good Programming Practice Although vectors allow elements in the same vector to be of different class types, it is best not to have a mix of classes in the same vector - –it is best to have all elements in a vector be the same class type.

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming Detail: One Consequence of the Base Type of Vectors Being Object The following code looks very reasonable but will produce an error saying that the class Object does not have a method named length : Vector v = new Vector() String greeting = "Hi, Mom!"; v.addElement(greeting); System.out.println("Length is " + (v.elementAt(0)).length()); String, of course, does have a length method, but Java sees the type of v.elementAt(0) as Object, not String Solution? Cast v.elementAt(0) to String : System.out.println ("Length is " + ((String)v.elementAt(0)).length());

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming Arrays Versus Vectors Arrays Bad: l Size is fixed when declared l Inefficient storage: can use a partially full array, but space has been allocated for the full size l If one more value needs to be added past the maximum size the array needs to be redeclared Good: l More efficient (faster) execution l Allows primitive type elements Vectors Good : l Size is not fixed l Better storage efficiency: a partially full vector may be allocated just the space it needs l If one more value needs to be added past the maximum size the vector size increases automatically Bad: l Less efficient (slower) execution l Elements must be class types (primitive types not allowed)

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming One More Detail: Size Versus Capacity l Be sure to understand the difference between capacity and size of a vector: »capacity is the declared size of the vector –the current maximum number of elements »size is the actual number of elements being used –the number of elements that contain valid values, not garbage –remember that vectors add values only in successive indexes Loops that read vector elements should be limited by the value of size, not capacity, to avoid reading garbage values

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming Programming Tip: Increasing Storage Efficiency of Vectors l A vector automatically increases its size if elements beyond its current capacity are added l But a vector does not automatically decrease its size if elements are deleted The method trimToSize shrinks the capacity of a vector to its current size so there is no extra, wasted space »the allocated space is reduced to whatever is currently being used To use storage more efficiently, use trimToSize when a vector will not need its extra capacity later

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming And Another Detail: Correcting the Return Type of clone The method clone is used to make a copy of a vector but its return type is Object, not Vector »of course you want it to be Vector, not Object l So, what do you do? »Cast it to Vector Vector v = new Vector(10); Vector otherV; otherV = vector; Vector otherV = (Vector)v.clone(); This just makes otherV another name for the vector v (there is only one copy of the vector and it now has two names) This creates a second copy of v with a different name, otherV

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming And Yet Another Detail: Protecting Private Variables l Just as with arrays, be careful not to return addresses of private vector variables, otherwise calling methods can access them directly »"Information Hiding" is compromised l To protect against it, return a copy of the vector »use clone as described in the previous slide l But that's not all: »if the elements of the vector are class (and not primitive) types, they may not have been written to pass a copy »they may pass the address »so additional work may be required to fix the accessor methods

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming Linked Lists "Cheatem" "and" "Howe" head "Duey" One node in the list Data in a node A link in a node Null link signifying the end of the list null l Linked lists consists of objects known as nodes l Each node has a place for data and a link to another node l Links are shown as arrows l Each node is an object of a class that has two instance variables: one for the data and one for the link The head of the list is not a node.

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming ListNode Class: Instance Variables and Constructor public class ListNode { private String data; private ListNode link; public ListNode(String newData, ListNode linkValue) { data = newData; link = linkValue; } Two parameters for the constructor: l data value for the new node l Link value for the new node "Duey"

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming Start at beginning of list Stepping through a List "Cheatem" "and" "Howe" head "Duey" When position is at this last node, position.getLink() is null and the loop will terminate. null ListNode position; position = head; while (position != null) {... position = position.getLink(); } position This reference is position.getLink(). Moves to next node in the list. Excerpt from showList in StringLinkedList

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming Adding a Node To add a node at the beginning of the list: public void addANodeToStart(String addData) { head = new ListNode(addData, head); } The new node will point to the old start of the list, which is what head pointed to. The value of head is changed to point to the new node, which is now the first node in the list.

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming Deleting a Node To delete a node from the beginning of the list: public void deleteHeadNode() { if (head != null) { head = head.getLink(); } else // prints an error message and exits... l Doesn't try to delete from an empty list. l Removes first element and sets head to point to the node that was second but is now first.

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming Gotcha : Null Pointer Exception l Null pointer exception occurs when your code tries to access some member of a class variable and the class variable does not name an object. List nodes use null to indicate a link instance variable contains no reference. NullPointerException is not an exception that has to be caught or declared. »Usually indicates you need to fix your code, not add a catch block.

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming Node Inner Classes Using an inner class makes StringLinkedList self- contained because it doesn't depend on a separate file l Making the inner class private makes it safer from the point of view of information hiding public class StringLinkedList { private ListNode head; private class ListNode { }

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming Iterators l An object that allows a program to step through a collection of objects and do some action on each one is called an iterator. l For arrays, an index variable can be used as an iterator, with the action of going to the next thing in the list being something like: index++; l In a linked list, a reference to the node can be used as an iterator. StringLinkedListSelfContained has an instance variable called current that is used keep track of where the iteration is. The goToNext method moves to the next node in the list by using the statement: current = current.next;

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming goToNext "Cheatem" "and" "Howe" head "Duey" null previous current "Cheatem" "and" "Howe" head "Duey" null previous current current.link current = current.link gives current a reference to this node BeforeAfter

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming Other Methods in the Linked List with Iterator getDataAtCurrent —returns the data part of the node that the iterator ( current ) is at moreToIterate— returns a boolean value that will be true if the iterator is not at the end of the list resetIteration— moves the iterator to the beginning of the list l Can write methods to add and delete nodes at the iterator instead of only at the head of the list. »Following slides show diagrams illustrating the add and delete methods.

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming Adding a Node Step 1 "Cheatem" "and" head "Duey" "Howe" null newNode current Before "Cheatem" "and" head "Duey" "Howe" null newNode current After Create the node with reference newNode Add data to the node newNode.link = current.link null

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming Adding a Node Step 2 "Cheatem" "and" head "Duey" "Howe" null newNode current After current.link = newNode.link The node has been added to the list although it might appear out of place in this diagram. "Cheatem" "and" head "Duey" "Howe" null newNode current Before

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming Adding a Node l After creating the node, the two statements used to add the node to the list are: newNode.link = current.link; current.link = newNode; l What would happen if these two steps were done in reverse order?

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming Deleting a Node Step 1 "Cheatem" previous "Duey" current Before "Cheatem" previous "Duey" "Howe" null "Howe" null newNode current After previous.link = current.link What should be done next? "and" This node will be removed from the list.

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming Deleting a Node Step 2 current = current.link The node has been deleted from the list although it is still shown in this picture. "Cheatem" previous "Duey" "Howe" null newNode current After "and" "Cheatem" previous "Duey" "Howe" null newNode current Before "and" This node is not accessible from the head of the list.

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming "Cheatem" previous "Duey" "Howe" null newNode current After "and" This node is not accessible from the head of the list. FAQ : What Happens to a Deleted Node? The Cheatem node has been deleted from the list. l If there are no other references to the deleted node, the storage should be released for other uses. »Some programming languages make the programmer responsible for garbage collection. »Java provides automatic garbage collection. Storage used by the Cheatem node will be available for other uses without the programmer having to do anything.

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming Exception Handling with Linked Lists handling errors in StringLinkedListWithIterator class »original version prints error message and ends program »allow more options by using exceptions LinkedListException Class »programmer can still end program if desired »programmer can use exceptions for things like detecting end of list Java Iterator interface uses exceptions »see Appendix 7 for information about the Iterator interface

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming A Doubly Linked List l A doubly linked list allows the program to move backward as well as forward in the list. l The beginning of the node class for a doubly-linked list would look something like this: private class ListNode { private Object data private ListNode next; private ListNode previous; null Declaring the data reference as class Object allows any kind of data to be stored in the list.

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming Other Linked Data Structures l tree data structure »each node leads to multiple other nodes l binary tree »each node leads to at most two other nodes l root—top node of tree »normally keep a reference to root, as for head node of list null root node

Lecturer: Dr. AJ Bieszczad Chapter 10 COMP 150: Introduction to Object-Oriented Programming Summary l Vectors can be thought of as arrays that can grow in length as needed during run time. The base type of all vectors is Object. l Thus, vector elements can be of any class type, but not primitive types. l A linked list is a data structure consisting of objects known as nodes, such that each node can contain data, and each node has a reference to the next node in the list. l You can make a linked list self-contained by making the node class an inner class of the linked list class. l You can use an iterator to step through the elements of a collection.