DOC PREVIEW
UMBC CMSC 341 - The List ADT

This preview shows page 1-2-3-4-5 out of 14 pages.

Save
View full document
View full document
Premium Document
Do you want full access? Go Premium and unlock all 14 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 14 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 14 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 14 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 14 pages.
Access to all documents
Download any document
Ad free experience
Premium Document
Do you want full access? Go Premium and unlock all 14 pages.
Access to all documents
Download any document
Ad free experience

Unformatted text preview:

Lists - IList ADT (expanded from Weiss)Other considerationsOperations on a ListOperations on a List (cont)What’s Missing?IteratorsIterator OperationsList Operations“scanning” a CollectionList Operators (cont)Ex: Building a ListEx: Building a List #2More List OperationsLists - IThe List ADT2List ADT (expanded from Weiss)•A list is a dynamic ordered tuple of homogeneous elementsA1, A2, A3, …, ANwhere Ai is the ith element of the list•Definition: The position of element Ai is i; positions range from 1 to N inclusive•Definition: The size of a list is N ( a list of NO elements is called “an empty list”)3Other considerations•What design considerations are there regarding this list.1. Will the list hold an “infinite” number of elements, or will it have limited capacity? If so, what’s the maximum number of elements?2. How will the list handle insertion of duplicate elements?3. If the list allows insertion of duplicates, how does it handle deletion of a duplicated element?4Operations on a List•List( ) -- construct an empty list•List(const List &rhs) -- construct a list as a copy of rhs•~List( ) -- destroy the list•const List &operator= (const List &rhs)–make this list contain copies of the elements of rhs in the same order–elements are deep copied from rhs, not used directly. If L1 = (A1, A2, A3) and L2 = (B1, B2) before the assignment, then L2 = L1 causes L2 = (A1, A2, A3)5Operations on a List (cont)•bool isEmpty( ) const -- returns true if the list size is zero•void makeEmpty( ) -- causes the list to become empty•void remove (const Object &x)–the first occurrence of x is removed from the list, if it is present. If x is not present, the list is unchanged.–an occurrence of x is an element Ai of the list such that Ai == x•Also:•insert•find•findPrevious6What’s Missing?•There is no size( ) method that returns the size of the list•There is no retrieve( int i) or operator[ int i] method that access the ith element in the listSo, it’s NOT possible to write code like this: for (int i = 1; j < L.size( ); i++)cout << L.retrieve ( i );How do we “scan” a list and look at all the elements, one at a time?7Iterators•An iterat or is an object that provides access to the elements of a collection (in a specified order) without exposing the underlying structure of the collection.–order dictated by the iterator–collection provides iterators on demand–each iterator on a collection is independent–iterator operations are generic8Iterator Operations•bool isPastEnd( ) -- returns true if the iterator is past the end of the list•void advance( ) -- advances the iterator to the next position in the list. If iterator already past the end, no change.•const Object &retrieve( ) -- returns the element in the list at the current position of the iterator. It is an error to invoke “retrieve” on an iterator that isPastEnd9List Operations•ListIter<Object> first( ) -- returns an iterator representing the first element on the list•ListIter<Object> zeroth( ) -- returns an iterator representing the header of a list•ListIter<Object> find(const Object &x) -- returns an iterator representing the first occurrence of x in the list. If x not present, the iterator isPastEnd.•ListIter<Object> findPrevious(const Object &x) -- returns an iterator representing the element before x in the list. If x is not in the list, the iterator represents the last element in the list. If x is first element (or list is empty), the iterator returned is equal to the one returned by zeroth( ).10“scanning” a CollectionIterator iter = collection.first ( );while (! iter.isPastEnd ( ) ){Object x = iter.retrieve( ) ;// do something with xiter.advance ( );}11List Operators (cont)•void insert (const Object &x, const ListIter<Object> &p)–inserts a copy of x in the list after the element referred to by p–if p isPastEnd, the insertion fails without an indication of failure.12Ex: Building a ListList<int> list; // empty list of intListIter<int> iter = list.zeroth( );for (int i=0; i < 5; i++) {list.insert(i, iter);iter.advance( );}13Ex: Building a List #2List<int> list; // empty list of intListIter<int> iter = list.zeroth( );for (int i=0; i < 5; i++) {list.insert(i, iter);}14More List Operations•Find an element in the list and return it’s position •Tell me the value of the Nth element•Determine if the list is full•Determine if the list is empty•Print the


View Full Document

UMBC CMSC 341 - The List ADT

Download The List ADT
Our administrator received your request to download this document. We will send you the file to your email shortly.
Loading Unlocking...
Login

Join to view The List ADT and access 3M+ class-specific study document.

or
We will never post anything without your permission.
Don't have an account?
Sign Up

Join to view The List ADT 2 2 and access 3M+ class-specific study document.

or

By creating an account you agree to our Privacy Policy and Terms Of Use

Already a member?