Download presentation
Presentation is loading. Please wait.
Published byMaximilian McBride Modified over 9 years ago
1
What are ADTs, STL Intro, vector, list, queue, stack Learning & Development Team http://academy.telerik.com Telerik Software Academy
2
1. Basic Abstract Data Types 1.List 2.Linked List 3.Stack 4.Queue 2. ADTs in STL 1.STL Intro 2.Iterators 3.Vector, list, stack, queue 2
3
Basic Data Structures
4
An Abstract Data Type (ADT) is a data type together with the operations, whose properties are specified independently of any particular implementation ADT are set of definitions of operations Can have several different implementations Different implementations can have different efficiency
5
Linear structures Lists: fixed size and variable size Stacks: LIFO (Last In First Out) structure Queues: FIFO (First In First Out) structure Trees Binary, ordered, balanced, etc. Dictionaries (maps) Contain pairs (key, value) Hash tables: use hash functions to search/insert
7
Data structure (container) that contains a sequence of elements Can have variable size Elements are arranged linearly, in sequence Can be implemented in several ways Statically (using array fixed size) Dynamically (linked implementation) Using resizable array
8
Implemented by an array Direct access by index (fast) Insertion and deletion and resizing are slow operations L21871236119 0 1 2 3 4 5 6 7
9
Dynamic (pointer-based) implementation Direct access to first/last element No access by index go through all previous elements (slow) Insertion and deletion are fast Resizing – add new element at the end or beginning 2next7next head4next5next null
11
LIFO (Last In First Out) structure Elements inserted (push) at “top” Elements removed (pop) from “top” Useful in many situations E.g. the execution stack of the program Can be implemented in several ways Statically (using array) Dynamically (linked implementation)
13
FIFO (First In First Out) structure Elements inserted at the tail (Enqueue) Elements removed from the head (Dequeue) Useful in many situations Print queues, message queues, etc. Can be implemented in several ways Statically (using array) Dynamically (using pointers)
14
Introduction, Basic ADT Implementations
15
Standard Template Library C++ Library Implements a lot of computer science fundamentals Container classes, Algorithms Iterators Mostly template-based Algorithms decoupled from containers through iterators 15
16
Containers Data structures, hold collections of elements Different benefits and downsides Implement fundamental Abstract Data Types Sequence, Associative, String, Adaptors… Iterators Provide access to container elements Used to "traverse" containers 16
17
Algorithms Fundamental algorithms over collections or single Hook up with iterators to access container elements Function objects Wrap functions/methods into objects Implement () operator – called like functions Called by algorithms and containers to act over elements (elements passed as parameters) 17
18
Live Demo
19
Mechanism for traversing container elements
20
"Smart" pointers to objects Specific for each container type Each container defines how it’s iterators work If we have an iterator to one element Increase/decrease it to get the other elements Types: Input, Output Forward iterator, Bidirectional iterator Random access iterator 20
21
Fast data structures to store elements
22
Store collections of other objects Has methods to access elements Types By traversability: Forward – elements ordered, Forward Iterators Reversible – have Bidirectional iterators Random access – have Random access iterators By storage: sequence, adaptors, associative 22
23
Vector, List, Deque, Queue, Stack
24
Vector ( #include ) Defined: template vector Sequence, Random Access Stores a sequence of elements in contiguous memory Manages memory effectively Fast at retrieving elements by index and adding elements at the end Slow insertion/deletion in middle or beginning 24
25
Declaring and initializing a vector Vector size and is obtained by calling size() #include //required header … vector numbers; numbers.push_back(42); //numbers is now {42} numbers.push_back(13); //numbers is now {42, 13} int consoleNumber; cin>>consoleNumber; numbers.push_back(consoleNumber) vector numbers; numbers.push_back(42);numbers.push_back(13); cout<<numbers.size(); //prints 2
26
Accessing vector elements Done the same way as with arrays, i.e. [] Traversing a vector is the same as traversing an array (e.g. with a for loop) Element access does not depend on vector size vector numbers; numbers.push_back(42);numbers.push_back(13); cout<<numbers[1]; //prints 13 cout<<endl; numbers[1] = numbers[0]; cout<<numbers[1]; //prints 42
27
Live Demo
28
List ( #include ) Defined: template list Sequence, Reversible Stores a sequence of elements in a doubly- linked list Fast at deletion/insertion anywhere No random access to elements Have to traverse list to get to an item 28
29
Declaring and initializing a list List size and is obtained by calling size() List elements can be removed from front and back fast list numbers; numbers.push_back(2);numbers.push_front(1);numbers.push_back(3); numbers.pop_front();numbers.pop_back();
30
Accessing list elements front and back methods provide first and last element access Only way to get access to all elements – traversal by iterator cout<<numbers.front();cout<<numbers.back(); list ::iterator numbersIterator; for(numbersIterator = numbers.begin(); numbersIterator != numbers.end(); numbersIterator != numbers.end(); numbersIterator++) numbersIterator++){ cout<<*numbersIterator<<endl; cout<<*numbersIterator<<endl;}
31
Live Demo
32
Queue ( #include ) Defined: template queue Sequence Adaptor First in, First out structure (FIFO) Stores a sequence of elements Provides access only to first element Can remove only at front Can add only at back 32
33
Declaring and initializing a queue Queue size is obtained by calling size() Queues allow removing elements only from the front of the sequence queue q; q.push(1);q.push(2);q.push(3); q.pop();
34
Accessing queue elements front and back methods provide first and last element access Other types of access to queue elements are meaningless The idea of the queue is to restrict access and be FIFO cout<<q.front();cout<<q.back();
35
Live Demo
36
Stack ( #include ) Defined: template stack Sequence adaptor Last in, First out structure (LIFO) Stores a sequence of elements Provides access only to last element Can remove or add elements only at back/top 36
37
Declaring and initializing a stack Stack size is obtained by calling size() Stacks allow removing elements only from the back (top) of the sequence stack s; s.push(1);s.push(2);s.push(3); s.pop();
38
Accessing stack elements top method provides first element access Other types of access to stack elements are meaningless The idea of the stack is to restrict access and be LIFO cout<<s.top();
39
Live Demo
40
форум програмиране, форум уеб дизайн курсове и уроци по програмиране, уеб дизайн – безплатно програмиране за деца – безплатни курсове и уроци безплатен SEO курс - оптимизация за търсачки уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop уроци по програмиране и уеб дизайн за ученици ASP.NET MVC курс – HTML, SQL, C#,.NET, ASP.NET MVC безплатен курс "Разработка на софтуер в cloud среда" BG Coder - онлайн състезателна система - online judge курсове и уроци по програмиране, книги – безплатно от Наков безплатен курс "Качествен програмен код" алго академия – състезателно програмиране, състезания ASP.NET курс - уеб програмиране, бази данни, C#,.NET, ASP.NET курсове и уроци по програмиране – Телерик академия курс мобилни приложения с iPhone, Android, WP7, PhoneGap free C# book, безплатна книга C#, книга Java, книга C# Николай Костов - блог за програмиране http://algoacademy.telerik.com
41
41 1. …
Similar presentations
© 2024 SlidePlayer.com Inc.
All rights reserved.