Top Banner
Iterators, Lists, and Sequences Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin – Stout Based on the book: Data Structures and Algorithms in C++ (Goodrich, Tamassia, Mount) Some content from Data Structures Using C++ (D.S. Malik)
26

Iterators, Lists, and Sequences Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science.

Jan 13, 2016

Download

Documents

Amice Hamilton
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Iterators, Lists, and Sequences Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science.

Iterators, Lists, and Sequences

Data Structures and Algorithms

CS 244

Brent M. Dingle, Ph.D.

Department of Mathematics, Statistics, and Computer Science

University of Wisconsin – Stout

Based on the book: Data Structures and Algorithms in C++ (Goodrich, Tamassia, Mount)Some content from Data Structures Using C++ (D.S. Malik)

Page 2: Iterators, Lists, and Sequences Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science.

Points of Note

• Check assignment due dates• HW08 due April 3 (today)• HW09 due April 10

Page 3: Iterators, Lists, and Sequences Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science.

Last Time

• Last class we talked about • Linked Lists• Dynamic Arrays• Book’s Vector ADT

• The Vector ADT (§6.1.1)• Array-based implementation (§6.1.2)

• Stacks• Queues• Dequeues

Page 4: Iterators, Lists, and Sequences Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science.

Today• Review: Iterators

• Iterators (§6.2.5) mostly FYI

• Lists and Sequences as ADTs• Position ADT (§6.2.1) mostly FYI• List ADT (§6.2.2)• Sequence ADT (§6.3.1)

• Sorting

Page 5: Iterators, Lists, and Sequences Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science.

Iterators

• Some functions supported by STL containers such as:– begin(), end()

– return iterators to beginning or end of container

– insert(I,e) – insert e just before the position indicated by iterator I – analogous to our linked list operation: insertBefore(p)

– erase(I)– removes the element at the position indicated by I – analogous to our linked list operation: remove(p)

• The functions can be used to insert/remove elements from arbitrary positions in the STL vector and list

Review

Page 6: Iterators, Lists, and Sequences Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science.

Iterators Example• In the previous class there was an exercise that was

based on the code:• Located at or near something like:

• ContentUnit2InClassExamplesEx225_DequeWithIters.cpp

• Code example from this follows next slide

Page 7: Iterators, Lists, and Sequences Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science.

Iterator Example

myDeque.push_back( 'H' ); myDeque.push_back( 'O' ); myDeque.push_back( 'W' ); myDeque.push_back( 'D' ); myDeque.push_back( 'Y' );

//--------------------------------------------------------------------- // Change them back but this time use iterators // instead of reference pointers. // Note how we dereference the iterators with * when setting them.

myDequeType::iterator it_begin = myDeque.begin(); myDequeType::iterator it_end = myDeque.end();

*it_begin = 'H'; // Change the first element from h back to H

--it_end; *it_end = 'Y'; // Change the last element from y to back to Y

// typedef deque< char > myDequeType;

Page 8: Iterators, Lists, and Sequences Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science.

Iterator Example 2

void printContents( myDequeType deque ){ //--------------------------------------------------------------------- // Using iterators, // which point to the beginning and ending of the vector, // loop through the vector and print out its contents

myDequeType::iterator it_begin = deque.begin(); myDequeType::iterator it_end = deque.end();

cout << "Contents of myDeque: ";

while (it_begin != it_end ) { cout << *it_begin << " " ; ++it_begin } cout << endl;}

// typedef deque< char > myDequeType;

Page 9: Iterators, Lists, and Sequences Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science.

Group Class Activity• Create a program that instantiates a vector of integers using

std::vector

• Then using a loop • Based on iterators begin() and end()• Pushes the Fibonacci numbers into the vector object

• 1 1 2 3 5…

• Starter Code can be found on D2L Circa:• Unit2InClassExamples • GCA210_VectorIterators.tar.gz

• Submit the code to the correctD2L dropbox• 1 submission per “group”• Put all group member names

in comments at top of main CPP fileForward and Backward

Page 10: Iterators, Lists, and Sequences Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science.

Lists and Sequences

Page 11: Iterators, Lists, and Sequences Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science.

FYI Background: Position ADT• The Position ADT models the notion of place within a data structure

where a single object is stored– often in the sense of relative position

• such as A is before B, or Z is after Y

– also in the sense of first, second, third, … last• rather than just at index i

• A special null position refers to no object.

• Positions provide a unified view of diverse ways of storing data– a cell of an array– a node of a linked list

• Member functions:– Object& element(): returns the element stored at this position– bool isNull(): returns true if this is a null position

Page 12: Iterators, Lists, and Sequences Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science.

Book’s List ADT (§6.2.2)• The List ADT models a

sequence of positions storing arbitrary objects– establishes a before/after relation

between positions

• It allows for insertion and removal in the “middle”

• Query methods:– isFirst(p), isLast(p)

• Generic methods:– size(), isEmpty()

• Accessor methods:– first(), last()– before(p), after(p)

• Update methods:– replaceElement(p, o),

swapElements(p, q) – insertBefore(p, o),

insertAfter(p, o),– insertFirst(o), insertLast(o)– remove(p)

This is NOT a linked list description

It is a LIST Abstract Data Type

Page 13: Iterators, Lists, and Sequences Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science.

List ADT

• Query methods:– isFirst(p), isLast(p) :

• return boolean indicating if the given position is the first or last, respectively.

• Accessor methods– first(), last():

• return the position of the first or last, resp., element of S• an error occurs if S is empty

– before(p), after(p): • return the position of the element of S preceding or following,

respectively, the one at position p• an error occurs if S is empty, or p is the first or last, resp., position

S is the list

Page 14: Iterators, Lists, and Sequences Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science.

List ADT• Update Methods

– replaceElement(p, o)• Replace the element at position p with e

– swapElements(p, q) • Swap the elements stored at positions p & q

– insertBefore(p, o), insertAfter(p, o),• Insert a new element o into S before or after, resp., position p• Output: position of the newly inserted element

– insertFirst(o), insertLast(o)• Insert a new element o into S as the first or last, resp., element• Output: position of the newly inserted element

– remove(p)• Remove the element at position p from S

S is the list

Page 15: Iterators, Lists, and Sequences Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science.

Class Exercises Follow• You are about to see 2 exercises

• Mostly a compare and contrast exercise set• Think about run times too

• This is a group discussion activity

• Elect someone in your group to capture what is talked about in a MS-Word or text document• Randomly selected groups will present their findings at

conclusion of each exercise

Page 16: Iterators, Lists, and Sequences Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science.

Exercise 1 of 2• Describe how to implement the following list ADT

operations using a singly-linked list– list ADT operations: first(), last(), before(p), after(p)

• For each operation, explain how it is implemented and provide the running time

tail

Leonard Sheldon Howard

Raj

• A singly linked list consists of a sequence of nodes

• Each node stores• element• link to the next node

next

elem node

Reca

ll

head

Page 17: Iterators, Lists, and Sequences Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science.

Exercise 2 of 2• Describe how to implement the following list ADT

operations using a doubly-linked list– list ADT operations: first(), last(), before(p), after(p)

– For each operation, explain how it is implemented and provide the running time

next

elem node

prev• Doubly-Linked List Nodes

implement Position and store:• element• link to previous node• link to next node

• Special head/tail nodes

Reca

ll

head tail

Leonard Sheldon Howard Raj

Page 18: Iterators, Lists, and Sequences Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science.

Solution: Singly Linked List

• In the implementation of the List ADT by means of a singly linked list– The space used by a list with n elements is O(n)– The space used by each position of the list is O(1)– The before() operation runs in O(n) time– All the other operations of the List ADT run in O(1) time

Enhanced Version

Page 19: Iterators, Lists, and Sequences Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science.

Solution: Doubly Linked List

• In the implementation of the List ADT by means of a doubly linked list– The space used by a list with n elements is O(n)– The space used by each position of the list is O(1)– All the operations of the List ADT run in O(1)

time

Enhanced Version

Page 20: Iterators, Lists, and Sequences Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science.

Variances of Implementation• The details of implementing a list will vary

• So STL implementation does not always match the book’s described ADT

• This is common• So always check the interface description

• wherever you may work

Page 21: Iterators, Lists, and Sequences Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science.

List Summary

• List Operation Complexity for different implementations

List Singly-Linked List Doubly- Linked

first(), last(), after(p)insertAfter(p,o), replaceElement(p,o), swapElements(p,q)

O(1) O(1)

before(p), insertBefore(p,o), remove(p)

O(n) O(1)

Size(), isEmpty() O(1) O(1)

Page 22: Iterators, Lists, and Sequences Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science.

Sequence ADT

• The Sequence ADT is the union of the Vector and List ADTs

• Elements accessed by– Rank, or– Position

• Generic methods:– size(), isEmpty()

• Vector-based methods:– elemAtRank(r), replaceAtRank(r,

o), insertAtRank(r, o), removeAtRank(r)

• List-based methods:– first(), last(), before(p),

after(p), replaceElement(p, o), swapElements(p, q), insertBefore(p, o), insertAfter(p, o), insertFirst(o), insertLast(o), remove(p)

• Bridge methods:– atRank(r), rankOf(p)

Page 23: Iterators, Lists, and Sequences Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science.

Applications of Sequences

• The Sequence ADT is a basic, general-purpose, data structure for storing an ordered collection of elements

• Direct applications:– Generic replacement for stack, queue, vector, or list– small database (e.g., address book)

• Indirect applications:– Building block of more complex data structures

Page 24: Iterators, Lists, and Sequences Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science.

Sequence Implementations

Operation Array List

size, isEmpty 1 1

atRank, rankOf, elemAtRank 1 n

first, last, before, after 1 1

replaceElement, swapElements 1 1

replaceAtRank 1 n

insertAtRank, removeAtRank n n

insertFirst, insertLast 1 1

insertAfter, insertBefore n 1

remove n 1

This is important!

It summarizes the differences

between an Array and a List

Page 25: Iterators, Lists, and Sequences Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science.

Outline and Reading

• Where we are headed

– Bubble Sort (§6.4)– Merge Sort (§11.1)

– Summary of sorting algorithms

Page 26: Iterators, Lists, and Sequences Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science.

The End of This Part• Next

• Bubble Sort and Merge Sort• Chapter 6 and 11.1