Chapter 3 Lists, Stacks, and Queues Abstract Data Types, Vectors

Slides:



Advertisements
Similar presentations
DATA STRUCTURES AND ALGORITHMS Prepared by İnanç TAHRALI
Advertisements

1 Linked lists Sections 3.2, 3.3, 3.5 Chapter 3 Lists, Stacks, and Queues Abstract Data Types, Vectors.
1111 Abstract Data Types Cpt S 223. School of EECS, WSU.
Object Oriented Programming Lect. Dr. Daniel POP Universitatea de Vest din Timişoara Facultatea de Matematică şi Informatică.
More on the STL vector list stack queue priority_queue.
Main Index Contents 11 Main Index Contents Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers.
Main Index Contents 11 Main Index Contents Container Types Container Types Sequence Containers Sequence Containers Associative Containers Associative Containers.
Templates and the STL.
Data Structures Using C++ 2E
1 Chapter 3 Lists, Stacks, and Queues Abstract Data Types, Vectors Sections 3.1, 3.2, 3.3, 3.4 Abstract Data Types (ADT) Iterators Implementation of Vector.
Containers Overview and Class Vector
DATA STRUCTURES AND ALGORITHMS Lecture Notes 12 Prepared by İnanç TAHRALI.
Introduction to STL and the vector container class CS342 Data Structures Based on Ford & Topp.
Main Index Contents 11 Main Index Contents Week 3 – The Vector Container.
STL multimap Container. STL multimaps multimaps are associative containers –Link a key to a value –AKA: Hashtables, Associative Arrays –A multimap allows.
1. The term STL stands for ? a) Simple Template Library b) Static Template Library c) Single Type Based Library d) Standard Template Library Answer : d.
1 Chapter 3 Lists, Stacks, and Queues Abstract Data Types, Vectors Section 3.5, class notes Iterators Generic algorithms.
Friends & Standard Template Library CSCI3110 Advanced Data Structures Lecturer: Dr. Carroll and Nan Chen.
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved Stacks.
Iterator for linked-list traversal, Template & STL COMP171 Fall 2005.
Lecture 7 : Intro. to STL (Standard Template Library)
A gentle introduction to the standard template library (STL) Some references:
The List ADT Reading: Sections 3.2, 3.3, 3.5.
1 Chapter 3 Lists, Stacks, and Queues Reading: Sections 3.1, 3.2, 3.3, 3.4 Abstract Data Types (ADT) Iterators Implementation of Vector.
ICOM 4035 – Data Structures Dr. Manuel Rodríguez Martínez Electrical and Computer Engineering Department Lecture 5 – September 4 th, 2001.
1 Circular, Doubly-Linked Lists Node Composition List Class Pushing and Popping Values Insert and Erase at Arbitrary Locations List Implementation.
Introduction to Data Structure, Fall 2006 Slide- 1 California State University, Fresno Introduction to Data Structure Chapter 4 Ming Li Department of Computer.
CSCI  Sequence Containers – store sequences of values ◦ vector ◦ deque ◦ list  Associative Containers – use “keys” to access data rather than.
1 Generic Positional Containers and Double-Ended Queues.
Data Structure and Algorithm Analysis 03: Lists, Stacks and Queues Hongfei Yan School of EECS, Peking University.
Copyright © 2015, 2012, 2009 Pearson Education, Inc., Publishing as Addison-Wesley All rights reserved. Chapter 18: Stacks and Queues.
Object-Oriented Programming (OOP) Lecture No. 41
Cpt S 122 – Data Structures Abstract Data Types
18 Chapter Stacks and Queues
CS505 Data Structures and Algorithms
Pointers and Linked Lists
The List ADT Sections 3.2, 3.3, 3.5 Introduction
Vectors Holds a set of elements, like an array
CSCE 210 Data Structures and Algorithms
Standard Template Library (STL)
Lists The List ADT.
Map interface Empty() - return true if the map is empty; else return false Size() - return the number of elements in the map Find(key) - if there is an.
Collections Intro What is the STL? Templates, collections, & iterators
Prof. Michael Neary Lecture 7: The STL Prof. Michael Neary
CMSC 341 Lecture 5 Stacks, Queues
Chapter 16-2 Linked Structures
Abstract Data Types Iterators Vector ADT Sections 3.1, 3.2, 3.3, 3.4
Object Oriented Programming COP3330 / CGS5409
Chapter 18: Linked Lists.
priority_queue<T>
Chapter 9 One-Dimensional Arrays
Doubly Linked List Implementation
Lists - I The List ADT.
Lists - I The List ADT.
Lecture 8 : Intro. to STL (Standard Template Library)
STL (Standard Template Library)
Standard Template Library
C++ Programming: chapter 10 – STL
Lists CMSC 202, Version 4/02.
Collections Intro What is the STL? Templates, collections, & iterators
Lists CMSC 202, Version 4/02.
Doubly Linked List Implementation
Standard Template Library
Getting queues right … finally (?)
Chapter 3 Lists, Stacks, and Queues
8.3 Vectors Copyright © 2008 Pearson Addison-Wesley. All rights reserved. 1.
The List Container and Iterators
Data Structures & Programming
Data Structures & Programming
Presentation transcript:

Chapter 3 Lists, Stacks, and Queues Abstract Data Types, Vectors Sections 3.1, 3.2, 3.3, 3.4 Abstract Data Types (ADT) Iterators Implementation of Vector

Abstract Data Type (ADT) High-level definition of data types An ADT specifies A collection of data A set of operations on the data or subsets of the data ADT does not specify how the operations should be implemented Examples list, stack, queue, deque, priority queue, table (map), associative array, set, graph, digraph How are they different? Class Class template ADT

List ADT Objects/data Operations A0, A1, A2, … A N-1 Size of the List is N Operations Up to the designer of a List, for example, printList() makeEmpty() Find() Insert() Remove() findKth() etc

Iterators: Motivation Need a way to navigate through the items in a container. An example: navigating over vector v. for (int i = 0; i != v.size(); i++ ) cout << v[i] << endl; However, doubly-linked list would need a different form We want a general approach to navigate elements for different implementations of an ADT

Iterators A generalized type that helps in navigating a container A way to initialize at the front and back of a list A way to move to the next or previous position A way to detect the end of an iteration A way to retrieve the current value Implemented as nested types of containers in STL Examples: Iterator type for vector<int> defined as vector<int>::iterator itr; Iterator type for list<string> defined as list<string>::iterator itr;

Getting an Iterator Two methods in all STL containers iterator begin ( ) Returns an iterator to the first item in the container iterator end ( ) Returns an iterator representing end marker in the container (that is, the position after the last item) Example for (int i = 0; i != v.size(); i++ ) cout << v[i] << endl; can be written using iterators as for(vector<int>::iterator itr=v.begin(); itr!=v.end(); ++itr) cout << *itr << endl;

Iterator Methods Iterators have methods Many methods use operator overloading itr++ and ++itr advance the iterator to next location *itr  return reference to object stored at iterator itr’s location itr1 == itr2 true if itr1 and itr2 refer to the same location, else false itr1 != itr2 true if itr1 and itr2 refer to different locations, else false

Container Operations Requiring Iterators Adding element iterator insert(iterator pos, const object &x) Add x in list before interator pos Returns iterator representing position of inserted item Removing element iterator erase(iterator pos) Remove element at position pos Returns iterator representing position of item following pos Removing elements in a range iterator erase(iterator start, iterator end) Remove elements from start to end (not including end)

Iterator example Removing every other elements in a list

The Vector Implementation of List ADT Extends the notion of array by storing a sequence of arbitrary objects Informally, we call it Vector ADT Elements of vector ADT can be accessed by specifying their index

vector in C++ STL Collection  Elements of some proper type T Operations int size ( )  returns the number of elements in the vector void clear ( )  removes all elements from the vector bool empty ( ) returns true if the vector has no elements void push_back ( const Object &x ) adds x to the end of the vector void pop_back ( ) Removes the object at the end of the vector Object & back ( ) Returns the object at the end of the vector Object & front ( ) Returns the object at the front of the vector

vector in C++ STL (contd.) More Operations Object & operator[] ( int index ) Returns the object at location index (without bounds checking) Both accessor and mutator versions int capacity ( ) Returns the internal capacity of the vector Number of elements the container can hold without further memory allocation void resize( int newSize, const Object& val = Object() ) Change the size of the vector Newly created elements will be initialized to val

Implementing the vector Class Implementing Vector as first-class type Can be copied Memory it uses is automatically reclaimed Vector maintains A primitive C++ array The array capacity The current number of items stored in the vector Operations Copy constructor operator= Destructor to reclaim primitive array All the other operators we saw earlier

vector Implementation template <typename T> class vector { public: // lots of member functions typedef T * iterator; private: int theSize; int theCapacity T *Array };

vector Member Functions - 1 vector(int initialSize=1) : theSize(initialSize),theCapacity(initialSize+1) {Array = new T[theCapacity];} ~vector() {delete [] Array;} void pop_back() {theSize--;} O(1) iterator begin() {return Array;} iterator end() {return Array + theSize;} T &operator[](int index) {return Array[index];} O(1)

vector Member Functions - 2 vector &operator=(vector &rhs) { if(this != &rhs) // Prevents self-copy delete Array; theSize = rhs.size(); theCapacity = rhs.theCapacity; Array = new T[ capacity() ]; for(int k=0; k<size(); k++) Array[k] = rhs.Array[k]; } 16 16

vector Member Functions - 3 void reserve(int N) { if(N < theSize) return; T *old = Array; Array = new T[N]; for(int k=0;k<theSize;k++) Array[k] = old[k]; theCapacity = N; delete [] old; } O(N) Array old void push_back(T &x) { if(theSize==theCapacity) reserve(2*theSize); // Assumes theSize > 0 Array[theSize++] = x; } 17 17

Amortized Analysis of push_back Consider the time for N push_backs Time for copying the data = N*O(1) = O(N) Let 2k <= N < 2k+1 Time for call to reserve = O(1 + 2 + 4 + ... + 2k+1) = O(2k+2-1) = O(2N) = O(N) So, the total amortized time per push_back is O(1) 18 18