Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. An Introduction to Data Structures.

Slides:



Advertisements
Similar presentations
Chapter 25 Lists, Stacks, Queues, and Priority Queues
Advertisements

Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.
Chapter 24 Lists, Stacks, and Queues
Lists and the Collection Interface Chapter 4. Chapter Objectives To become familiar with the List interface To understand how to write an array-based.
Double-Linked Lists and Circular Lists
Copyright © 2013 by John Wiley & Sons. All rights reserved. HOW TO CREATE LINKED LISTS FROM SCRATCH CHAPTER Slides by Rick Giles 16 Only Linked List Part.
Chapter 9: Data Structures I
Chapter 6 The Collections API. Simple Container/ Iterator Simple Container Shape [] v = new Shape[10]; Simple Iterator For( int i=0 ; i< v.length ; i++)
1 Chapter 24 Lists Stacks and Queues. 2 Objectives F To design list with interface and abstract class (§24.2). F To design and implement a dynamic list.
1 Lecture 24 ADT Part V (Linked List Using Iterator) Overview  Utility Classes.  List Iterator.  View of the List Iterator.  Adding to the Head of.
Chapter 12: Data Structures
Unit 11 1 Unit 11: Data Structures H We explore some simple techniques for organizing and managing information H This unit focuses on: Abstract Data Types.
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Java Software Solutions Foundations of Program Design Sixth Edition by Lewis.
Linked Lists CSC 172 SPRING 2004 LECTURE 6. ANNOUNCEMENTS Project 2 due Wed, Feb 18 th, 5PM, CSB Read Weiss Chapter 17 Department T shirts available $10.
Lists and the Collection Interface Chapter 4. Chapter 4: Lists and the Collection Interface2 Chapter Objectives To become familiar with the List interface.
1 Data Structures  We can now explore some advanced techniques for organizing and managing information  Chapter 12 of the book focuses on: dynamic structures.
Fall 2007CS 2251 Lists and the Collection Interface Chapter 4.
1 Collections Working with More than One Number or Data Type or Object.
Chapter 12 Collections. © 2004 Pearson Addison-Wesley. All rights reserved12-2 Collections A collection is an object that helps us organize and manage.
COMPSCI 125 Spring 2005 ©TheMcGraw-Hill Companies, Inc. Permission required for reproduction or display. Odds and Ends Strings (from Chapter 9) StringTokenizer.
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 1 Chapter 26 Implementing Lists, Stacks,
1 Lecture 26 Abstract Data Types – IV Overview  The List ADT  Implementing Stacks as Linked List  Linked List Implementation of Queues .  Preview:
Linked Lists CSC 172 SPRING 2004 LECTURE 6. ANNOUNCEMENTS Project 2 due Wed, Feb 18 th, 5PM, CSB Read Weiss Chapter 17 Department T shirts available $10.
© 2004 Pearson Addison-Wesley. All rights reserved12-1 Chapter 12 : Collections Intermediate Java Programming Summer 2007.
Building Java Programs
CHAPTER 05 Compiled by: Dr. Mohammad Omar Alhawarat Stacks & Queues.
© 2006 Pearson Education Chapter 12: Data Structures Presentation slides for Java Software Solutions for AP* Computer Science A 2nd Edition by John Lewis,
LinkedList Many slides from Horstmann modified by Dr V.
Data structures Abstract data types Java classes for Data structures and ADTs.
© Copyright 2012 by Pearson Education, Inc. All Rights Reserved. 1 Chapter 18 Linked Lists, Stacks, Queues, and Priority Queues.
CSS446 Spring 2014 Nan Wang  Java Collection Framework ◦ LinkedList ◦ Set ◦ Map 2.
HIT2037- HIT6037 Software Development in Java 22 – Data Structures and Introduction.
Chapter 12 Collections. © 2004 Pearson Addison-Wesley. All rights reserved12-2 Collections A collection is an object that helps us organize and manage.
ELC 310 Day 24. © 2004 Pearson Addison-Wesley. All rights reserved12-2 Agenda Questions? Problem set 5 Parts A & B Corrected  Good results  2 A’s, 1.
Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Chapter Fifteen: An Introduction to Data Structures.
COP INTERMEDIATE JAVA Data Structures. A data structure is a way of organizing a collection of data so that it can be manipulated effectively. A.
Stacks and Queues. 2 3 Runtime Efficiency efficiency: measure of computing resources used by code. can be relative to speed (time), memory (space), etc.
Chapter 12: Collections by Lewis and Loftus (Updated by Dan Fleck) Coming up: Collections.
Copyright © 2014 by John Wiley & Sons. All rights reserved.1 Chapter 16 – Basic Data Structures.
CSS446 Spring 2014 Nan Wang.  To understand the implementation of linked lists and array lists  To analyze the efficiency of fundamental operations.
Chapter 16 Data Structures 1 ©2000, John Wiley & Sons, Inc. Horstmann/Java Essentials, 2/e Chapter 16 An Introduction to Data Structures.
Chapter 15 Linked Data Structures Slides prepared by Rose Williams, Binghamton University Kenrick Mock University of Alaska Anchorage Copyright © 2008.
Collections Mrs. C. Furman April 21, Collection Classes ArrayList and LinkedList implements List HashSet implements Set TreeSet implements SortedSet.
Copyright © 2014 by John Wiley & Sons. All rights reserved.1 Chapter 16 – Basic Data Structures.
Chapter 15 An Introduction to Data Structures. Chapter Goals To learn how to use the linked lists provided in the standard library To be able to use iterators.
List Interface and Linked List Mrs. Furman March 25, 2010.
Iterators ITI 1121 N. El Kadri. Motivation Given a (singly) linked-list implementation of the interface List, defined as follows, public interface List.
Chapter 22 Generic Programming. Chapter Goals To understand the objective of generic programming To be able to implement generic classes and methods To.
Copyright © Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with Java From Control Structures through Data Structures by Tony.
Data Structures I Collection, List, ArrayList, LinkedList, Iterator, ListNode.
Big Java by Cay Horstmann Copyright © 2009 by John Wiley & Sons. All rights reserved. Chapter 15 – An Introduction to Data Structures.
CS 46B: Introduction to Data Structures July 21 Class Meeting Department of Computer Science San Jose State University Summer 2015 Instructor: Ron Mak.
CSE 501N Fall ‘09 10: Introduction to Collections and Linked Lists 29 September 2009 Nick Leidenfrost.
1 Chapter 24 Implementing Lists, Stacks, Queues, and Priority Queues Jung Soo (Sue) Lim Cal State LA.
Stacks and Queues. 2 Abstract Data Types (ADTs) abstract data type (ADT): A specification of a collection of data and the operations that can be performed.
Slides by Donald W. Smith
12 Collections Software Solutions Lewis & Loftus java 5TH EDITION
Unit 1 Hadoop and big data
Chapter 20 An Introduction to Data Structures
Chapter 12: Data Structures
Chapter 16 – Basic Data Structures
Chapter 12 Collections.
Introduction to Data Structures
Chapter 15 – An Introduction to Data Structures
Chapter 24 Implementing Lists, Stacks, Queues, and Priority Queues
Chapter 12 Collections.
Presentation transcript:

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. An Introduction to Data Structures

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Chapter Goals To learn how to use the linked lists provided in the standard library To be able to use iterators to traverse linked lists To understand the implementation of linked lists To distinguish between abstract and concrete data types To know the efficiency of fundamental operations of lists and arrays To become familiar with the stack and queue types

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Using Linked Lists A linked list consists of a number of nodes, each of which has a reference to the next node Adding and removing elements in the middle of a linked list is efficient Visiting the elements of a linked list in sequential order is efficient Random access is not efficient

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Inserting an Element into a Linked List

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Java's LinkedList class Generic class Specify type of elements in angle brackets: LinkedList Package: java.util Easy access to first and last elements with methods void addFirst(E obj) void addLast(E obj) E getFirst() E getLast() E removeFirst() E removeLast()

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. List Iterator ListIterator type Gives access to elements inside a linked list Encapsulates a position anywhere inside the linked list Protects the linked list while giving access

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. A List Iterator

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. A Conceptual View of the List Iterator

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Animation 15.1 –

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. List Iterator Think of an iterator as pointing between two elements Analogy: like the cursor in a word processor points between two characters The listIterator method of the LinkedList class gets a list iterator LinkedList employeeNames =...; ListIterator iterator = employeeNames.listIterator();

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. List Iterator Initially, the iterator points before the first element The next method moves the iterator iterator.next (); next throws a NoSuchElementException if you are already past the end of the list hasNext returns true if there is a next element if (iterator.hasNext()) iterator.next();

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. List Iterator The next method returns the element that the iterator is passing while iterator.hasNext() { String name = iterator.next(); Do something with name } Shorthand : for (String name : employeeNames) { Do something with name } Behind the scenes, the for loop uses an iterator to visit all list elements

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. List Iterator LinkedList is a doubly linked list Class stores two links: oOne to the next element, and oOne to the previous element To move the list position backwards, use: hasPrevious previous

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Adding and Removing from a LinkedList The remove method Removes and Returns the object that was returned by the last call to next or previous //Remove all names that fulfill a certain condition while (iterator.hasNext()) { String name = iterator.next(); if (name fulfills condition) iterator.remove(); } Be careful when calling remove : It can be called only once after calling next or previous You cannot call it immediately after a call to add If you call it improperly, it throws an IllegalStateException

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Sample Program ListTester is a sample program that Inserts strings into a list Iterates through the list, adding and removing elements Prints the list

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. ch15/uselist/ListTester.java 01: import java.util.LinkedList; 02: import java.util.ListIterator; 03: 04: /** 05: A program that tests the LinkedList class 06: */ 07: public class ListTester 08: { 09: public static void main(String[] args) 10: { 11: LinkedList staff = new LinkedList (); 12: staff.addLast("Dick"); 13: staff.addLast("Harry"); 14: staff.addLast("Romeo"); 15: staff.addLast("Tom"); 16: 17: // | in the comments indicates the iterator position 18: 19: ListIterator iterator 20: = staff.listIterator(); // |DHRT 21: iterator.next(); // D|HRT 22: iterator.next(); // DH|RT Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. ch15/uselist/ListTester.java (cont.) 23: 24: // Add more elements after second element 25: 26: iterator.add("Juliet"); // DHJ|RT 27: iterator.add("Nina"); // DHJN|RT 28: 29: iterator.next(); // DHJNR|T 30: 31: // Remove last traversed element 32: 33: iterator.remove(); // DHJN|T 34: 35: // Print all elements 36: 37: for (String name : staff) 38: System.out.print(iterator.next() + " "); 39: System.out.println(); 40: System.out.println("Expected: Dick Harry Juliet Nina Tom"); 41: } 42: }

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. ch15/uselist/ListTester.java (cont.) Output: Dick Harry Juliet Nina Tom Expected: Dick Harry Juliet Nina Tom

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Implementing Linked Lists Previous section: Java's LinkedList class Now, we will look at the implementation of a simplified version of this class It will show you how the list operations manipulate the links as the list is modified To keep it simple, we will implement a singly linked list Class will supply direct access only to the first list element, not the last one Our list will not use a type parameter Store raw Object values and insert casts when retrieving them

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Implementing Linked Lists Node : stores an object and a reference to the next node Methods of linked list class and iterator class have frequent access to the Node instance variables To make it easier to use: We do not make the instance variables private We make Node a private inner class of LinkedList It is safe to leave the instance variables public oNone of the list methods returns a Node object

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Implementing Linked Lists public class LinkedList {... Private class Node { public Object data; public Node next; } }

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Implementing Linked Lists LinkedList class Holds a reference first to the first node Has a method to get the first element

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Implementing Linked Lists public class LinkedList { public LinkedList() { first = null; } public Object getFirst() { if (first == null) throw new NoSuchElementException(); return first.data; }... private Node first; }

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Adding a New First Element When a new node is added to the list It becomes the head of the list The old list head becomes its next node

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Adding a New First Element public void addFirst(Object obj) { Node newNode = new Node(); newNode.data = obj; newNode.next = first; first = newNode; }

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Adding a New First Element public void addFirst(Object obj) { Node newNode = new Node(); newNode.data = obj; newNode.next = first; first = newNode; }

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Adding a New First Element public void addFirst(Object obj) { Node newNode = new Node(); newNode.data = obj; newNode.next = first; first = newNode; }

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Removing the First Element When the first element is removed The data of the first node are saved and later returned as the method result The successor of the first node becomes the first node of the shorter list The old node will be garbage collected when there are no further references to it

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Removing the First Element public Object removeFirst() { if (first == null) throw new NoSuchElementException(); Object obj = first.data; first = first.next; return obj; }

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Linked List Iterator We define LinkedListIterator : private inner class of LinkedList Implements a simplified ListIterator interface Has access to the first field and private Node class Clients of LinkedList don't actually know the name of the iterator class They only know it is a class that implements the ListIterator interface

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. LinkedListIterator The LinkListIterator class public class LinkedList {... public ListIterator listIterator() { return new LinkedListIterator(); } private class LinkedListIterator implements ListIterator { public LinkedListIterator() { position = null; previous = null; } Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. LinkedListIterator (cont.)... private Node position; private Node previous; }... }

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. The Linked List Iterator's next Method position : reference to the last visited node Also, store a reference to the last reference before that next method: position reference is advanced to position.next Old position is remembered in previous If the iterator points before the first element of the list, then the old position is null and position must be set to first

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. The Linked List Iterator's next Method public Object next() { if (!hasNext()) throw new NoSuchElementException(); previous = position; // Remember for remove if (position == null) position = first; else position = position.next; return position.data; }

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. The Linked List Iterator's hasNext Method The next method should only be called when the iterator is not at the end of the list The iterator is at the end if the list is empty ( first == null ) if there is no element after the current position ( position.next == null )

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. The Linked List Iterator's hasNext Method private class LinkedListIterator implements ListIterator {... public boolean hasNext() { if (position == null) return first != null; else return position.next != null; }... }

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. The Linked List Iterator's remove Method If the element to be removed is the first element, call removeFirst Otherwise, the node preceding the element to be removed needs to have its next reference updated to skip the removed element If the previous reference equals position : this call does not immediately follow a call to next throw an IllegalArgumentException It is illegal to call remove twice in a row remove sets the previous reference to position

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. The Linked List Iterator's remove Method public void remove() { if (previous == position) throw new IllegalStateException(); if (position == first) { removeFirst(); } else { previous.next = position.next; } position = previous; } Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. The Linked List Iterator's remove Method (cont.)

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. The Linked List Iterator's remove Method public void remove() { If (previous == position) throw new IllegalStateException(); if (position == first) { removeFirst(); } else { previous.next = position.next; } position = previous; } Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. The Linked List Iterator's remove Method (cont.)

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. The Linked List Iterator's set Method Changes the data stored in the previously visited element The set method public void set(Object obj) { if (position == null) throw new NoSuchElementException(); position.data = obj; }

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. The Linked List Iterator's add Method The most complex operation is the addition of a node add inserts the new node after the current position Sets the successor of the new node to the successor of the current position

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. The Linked List Iterator's add Method public void add(Object obj) { if (position == null) { addFirst(obj); position = first; } else { Node newNode = new Node(); newNode.data = obj; newNode.next = position.next; position.next = newNode; position = newNode; } previous = position; } Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. The Linked List Iterator's add Method (cont.)

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. The Linked List Iterator's add Method public void add(Object obj) { if (position == null) { addFirst(obj); position = first; } else { Node newNode = new Node(); newNode.data = obj; newNode.next = position.next; position.next = newNode; position = newNode; } previous = position; } Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. The Linked List Iterator's add Method (cont.)

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. The Linked List Iterator's add Method public void add(Object obj) { if (position == null) { addFirst(obj); position = first; } else { Node newNode = new Node(); newNode.data = obj; newNode.next = position.next; position.next = newNode; position = newNode; } previous = position; } Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. The Linked List Iterator's add Method (cont.)

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. ch15/impllist/LinkedList.java 001: import java.util.NoSuchElementException; 002: 003: /** 004: A linked list is a sequence of nodes with efficient 005: element insertion and removal. This class 006: contains a subset of the methods of the standard 007: java.util.LinkedList class. 008: */ 009: public class LinkedList 010: { 011: /** 012: Constructs an empty linked list. 013: */ 014: public LinkedList() 015: { 016: first = null; 017: } 018: 019: /** 020: Returns the first element in the linked list. the first element in the linked list 022: */ Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. ch15/impllist/LinkedList.java (cont.) 023: public Object getFirst() 024: { 025: if (first == null) 026: throw new NoSuchElementException(); 027: return first.data; 028: } 029: 030: /** 031: Removes the first element in the linked list. the removed element 033: */ 034: public Object removeFirst() 035: { 036: if (first == null) 037: throw new NoSuchElementException(); 038: Object element = first.data; 039: first = first.next; 040: return element; 041: } 042: 043: /** 044: Adds an element to the front of the linked list. element the element to add 046: */ Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. ch15/impllist/LinkedList.java (cont.) 047: public void addFirst(Object element) 048: { 049: Node newNode = new Node(); 050: newNode.data = element; 051: newNode.next = first; 052: first = newNode; 053: } 054: 055: /** 056: Returns an iterator for iterating through this list. an iterator for iterating through this list 058: */ 059: public ListIterator listIterator() 060: { 061: return new LinkedListIterator(); 062: } 063: 064: private Node first; 065: 066: private class Node 067: { 068: public Object data; 069: public Node next; 070: } Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. ch15/impllist/LinkedList.java (cont.) 071: 072: private class LinkedListIterator implements ListIterator 073: { 074: /** 075: Constructs an iterator that points to the front 076: of the linked list. 077: */ 078: public LinkedListIterator() 079: { 080: position = null; 081: previous = null; 082: } 083: 084: /** 085: Moves the iterator past the next element. the traversed element 087: */ 088: public Object next() 089: { 090: if (!hasNext()) 091: throw new NoSuchElementException(); 092: previous = position; // Remember for remove Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. ch15/impllist/LinkedList.java (cont.) 093: 094: if (position == null) 095: position = first; 096: else 097: position = position.next; 098: 099: return position.data; 100: } 101: 102: /** 103: Tests if there is an element after the iterator 104: position. true if there is an element after the iterator 106: position 107: */ 108: public boolean hasNext() 109: { 110: if (position == null) 111: return first != null; 112: else 113: return position.next != null; 114: } 115: Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. ch15/impllist/LinkedList.java (cont.) 116: /** 117: Adds an element before the iterator position 118: and moves the iterator past the inserted element. element the element to add 120: */ 121: public void add(Object element) 122: { 123: if (position == null) 124: { 125: addFirst(element); 126: position = first; 127: } 128: else 129: { 130: Node newNode = new Node(); 131: newNode.data = element; 132: newNode.next = position.next; 133: position.next = newNode; 134: position = newNode; 135: } 136: previous = position; 137: } 138: Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. ch15/impllist/LinkedList.java (cont.) 139: /** 140: Removes the last traversed element. This method may 141: only be called after a call to the next() method. 142: */ 143: public void remove() 144: { 145: if (previous == position) 146: throw new IllegalStateException(); 147: 148: if (position == first) 149: { 150: removeFirst(); 151: } 152: else 153: { 154: previous.next = position.next; 155: } 156: position = previous; 157: } 158: 159: /** 160: Sets the last traversed element to a different 161: value. Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. ch15/impllist/LinkedList.java (cont.) element the element to set 163: */ 164: public void set(Object element) 165: { 166: if (position == null) 167: throw new NoSuchElementException(); 168: position.data = element; 169: } 170: 171: private Node position; 172: private Node previous; 173: } 174: }

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. ch15/impllist/ListIterator.java 01: /** 02: A list iterator allows access of a position in a linked list. 03: This interface contains a subset of the methods of the 04: standard java.util.ListIterator interface. The methods for 05: backward traversal are not included. 06: */ 07: public interface ListIterator 08: { 09: /** 10: Moves the iterator past the next element. the traversed element 12: */ 13: Object next(); 14: 15: /** 16: Tests if there is an element after the iterator 17: position. true if there is an element after the iterator 19: position 20: */ 21: boolean hasNext(); 22: Continued

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. ch15/impllist/ListIterator.java (cont.) 23: /** 24: Adds an element before the iterator position 25: and moves the iterator past the inserted element. element the element to add 27: */ 28: void add(Object element); 29: 30: /** 31: Removes the last traversed element. This method may 32: only be called after a call to the next() method. 33: */ 34: void remove(); 35: 36: /** 37: Sets the last traversed element to a different 38: value. element the element to set 40: */ 41: void set(Object element); 42: }

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Stacks and Queues

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Queues A queue is similar to a list but adds items only to the rear of the list and removes them only from the front It is called a FIFO data structure: First-In, First-Out Analogy: a line of people at a bank teller’s window enqueue dequeue

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Queues We can define the operations for a queue –enqueue - add an item to the rear of the queue –dequeue (or serve) - remove an item from the front of the queue –empty - returns true if the queue is empty As with our linked list example, by storing generic Object references, any object can be stored in the queue Queues often are helpful in simulations or any situation in which items get “backed up” while awaiting processing

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Queues A queue can be represented by a singly-linked list; it is most efficient if the references point from the front toward the rear of the queue A queue can be represented by an array, using the mod operator (%) to “wrap around” when the end of the array is reached and space is available at the front of the array

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Stacks A stack ADT is also linear, like a list or a queue Items are added and removed from only one end of a stack It is therefore LIFO: Last-In, First-Out Analogies: a stack of plates in a cupboard, a stack of bills to be paid, or a stack of hay bales in a barn

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Stacks Stacks often are drawn vertically: poppush

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Stacks Some stack operations: –push - add an item to the top of the stack –pop - remove an item from the top of the stack –peek (or top) - retrieves the top item without removing it –empty - returns true if the stack is empty A stack can be represented by a singly-linked list; it doesn’t matter whether the references point from the top toward the bottom or vice versa A stack can be represented by an array, but the new item should be placed in the next available place in the array rather than at the end of the array

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Stacks The java.util package contains a Stack class Like ArrayList operations, the Stack operations operate on Object references

Big Java by Cay Horstmann Copyright © 2008 by John Wiley & Sons. All rights reserved. Abstract Data Type Stack Stack : concrete implementation of a stack in the Java library Stack s = new Stack (); s.push("A"); s.push("B"); s.push("C"); // The following loop prints C, B, and A while (s.size() > 0) System.out.println(s.pop());