Struktury Danych i Złożoność Obliczeniowa

Podobne dokumenty
Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.)

Programowanie Komponentowe Zarządzanie obiektami: kontenery

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Programowanie w C++ Wykład 7. Katarzyna Grzelak. 23 kwietnia K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40

Struktury Danych i Złożoność Obliczeniowa

Struktury danych: stos, kolejka, lista, drzewo

Wykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy

Kontenery i iteratory. Wykorzystanie kontenerów w praktyce.

Algorytmy i Struktury Danych

Dynamiczne struktury danych

Algorytmy i Struktury Danych. Co dziś? Drzewo decyzyjne. Wykład IV Sortowania cd. Elementarne struktury danych

Lista, Stos, Kolejka, Tablica Asocjacyjna

WSTĘP DO INFORMATYKI. Struktury liniowe


STL Standardt Template Library (wprowadzenie)

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Kompletna dokumentacja kontenera C++ vector w -

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego.

Abstrakcyjne struktury danych - stos, lista, drzewo

Wstęp do programowania

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

Listy, kolejki, stosy

Java Collections Framework

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Teoretyczne podstawy informatyki

Programowanie i struktury danych

ALGORYTMY I STRUKTURY DANYCH

Wykład 4. Klasa List Kolejki Stosy Słowniki

INFORMATYKA. Podstawy programowania w języku C. (Wykład) Copyright (C) 2005 by Sergiusz Sienkowski IME Zielona Góra

java.util.* :Kolekcje Tomasz Borzyszkowski

Kurs II, zajęcia 1. Tomasz Kulczyński, Błażej Osiński, Wojciech Śmietanka. Stos, kolejka i lista. Stos. Kolejka. Lista dwukierunkowa

Programowanie obiektowe

dodatkowe operacje dla kopca binarnego: typu min oraz typu max:

Algorytmy i struktury danych. wykład 5

STL: Lekcja 1&2. Filozofia STL

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

Algorytmy i struktury danych

Programowanie w C++ z użyciem kontenerów - parę przykładów programów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ

Programowanie obiektowe

Zaawansowane programowanie w języku C++ Biblioteka standardowa

Kolekcja (kontener) to po prostu obiekt, który grupuje wiele elementów w jeden twór.

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne

Podstawy Informatyki. Wykład 6. Struktury danych

Teoretyczne podstawy informatyki

Zadanie projektowe nr 1

Programowanie obiektowe

Drzewa BST i AVL. Drzewa poszukiwań binarnych (BST)

Programowanie i struktury danych. Wykład 4 Dr Piotr Cybula

Kolekcje. Na podstawie:

Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)!

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

dr inż. Paweł Myszkowski Wykład nr 11 ( )

WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

PLAN WYKŁADU BAZY DANYCH INDEKSY - DEFINICJE. Indeksy jednopoziomowe Indeksy wielopoziomowe Indeksy z użyciem B-drzew i B + -drzew

Teoretyczne podstawy informatyki

Programowanie Obiektowo Zorientowane w języku C++ Biblioteka STL

Struktury dynamiczne

Deklaracja struktury w C++

Tadeusz Pankowski

Struktury danych (I): kolejka, stos itp.

Pojemniki Pojemnik to obiekt, którego zadaniem jest przechowywanie innych obiektów.

STL Standard Template Library

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

Spis treści 1. Wstęp 2. Projektowanie systemów informatycznych

Opisy efektów kształcenia dla modułu

INFORMATYKA DANE.

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

ID2ZSD2 Złożone struktury danych Advanced data structures. Informatyka II stopień ogólnoakademicki stacjonarne

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Programowanie i struktury danych 1 / 44

Stos LIFO Last In First Out

Zaawansowane programowanie w C++ (PCP)

wstęp do informatyki i programowania część testowa (25 pyt. / 60 min.)

Wykład 3 Składnia języka C# (cz. 2)

Algorytmy i. Wykład 3: Stosy, kolejki i listy. Dr inż. Paweł Kasprowski. FIFO First In First Out (kolejka) LIFO Last In First Out (stos)

ZASADY PROGRAMOWANIA KOMPUTERÓW

Jak Windows zarządza pamięcią?

Szablon klasy std::vector

PROE wykład 7 kontenery tablicowe, listy. dr inż. Jacek Naruniec

Rok akademicki: 2013/2014 Kod: JFT s Punkty ECTS: 5. Poziom studiów: Studia I stopnia Forma i tryb studiów: Stacjonarne

Aby uzyskać zaliczenie w pierwszym terminie (do 30 stycznia 2018) rozliczyć trzeba co najmniej 8 projektów, po 4 z każdej z części: C++ oraz Python.

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Biblioteka standardowa C++

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

ALGORYTMY I STRUKTURY DANYCH

Zaawansowane algorytmy i struktury danych

Wykład 8: klasy cz. 4

Programowanie obiektowe i C++ dla matematyków

Kurs programowania. Wykład 9. Wojciech Macyna

Szablony klas, zastosowanie szablonów w programach

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

Szablon klasy std::list

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

Sortowanie bąbelkowe

dr inż. Jarosław Forenc

Algorytmy i Struktury Danych. Anna Paszyńska

Transkrypt:

Struktury Danych i Złożoność Obliczeniowa Zajęcia 1 Podstawowe struktury danych

Tablica Najprostsza metoda przechowywania serii danych, zalety: prostota, wady: musimy wiedzieć, ile elementów chcemy przechowywać (bądź w trakcie kompilacji, bądź w czasie tworzenia tablicy), konieczność znalezienia ciągłego miejsca w pamięci.

Tablica Przykład tworzenia tablicy w sposób statyczny, przykład tworzenia tablicy w sposób dynamiczny, przykład tworzenia dynamicznej tablicy dwuwymiarowej, konieczność pamiętania o zwalnianiu zaalokowanej pamięci, jakie mamy wartości domyślne? *

Wektor (std::vector<t>) Jeden z elementów biblioteki standardowej (STL), w bibliotece STL (w przestrzeni nazw std) występuje jako szablon (ang. template), w porównaniu do klasycznych tablic: prostsze stosowanie, umożliwia płynną regulację pojemności, dostęp do elementów w ten sam sposób (przeciążony operator indeksowania), również potrzebuje ciągłej przestrzeni w pamięci.

Wektor (std::vector<t>) Najprostszy przykład, przykład utworzenia i wykorzystania tablicy dwuwymiarowej na wektorach, uwaga: każdy z wierszy może mieć inną długość, brak konieczności zwalniania pamięci (pamięć zwalnia destruktor a to jest wykonywane automatycznie), jakie mamy wartości domyślne? *

Lista Jak jest skonstruowana lista?

Lista Początek listy to wskaźnik

Przykładowa lista Lista

Lista Lista cykliczna Lista dwukierunkowa

Lista (std::list<t>) Konstrukcja listy dwukierunkowej, cechy: szybsze działanie przy operacjach dodawania i usuwania w dowolnym miejscu niż tablica/wektor, brak możliwości użycia operatora indeksowania, nie wymaga ciągłości pamięci, na której operuje, wygodne operowanie przy przeszukiwaniu przy pomocy iteratorów (występują również w wektorze). występuje również w prostszej wersji: std::slist<t>, gdzie mamy do czynienia z listą jednokierunkową.

Lista (std::list<t>) Prosty przykład wykorzystania listy, (1) przykład wyświetlenia elementów parzystych z listy intów z wykorzystaniem iteratorów (2) *

Kolejka (std::queue<t>) Kontener o nieco węższych zastosowaniach niż poprzednio przedstawione, dzięki temu intuicyjne zastosowania, implementacja kolejki typu FIFO, W porównaniu do listy nie umożliwia iterowania ani innego dostępu do elementów wewnątrz kolejki; mamy dostęp tylko do elementu pierwszego i ostatniego poprzez metody front() i back(),

Kolejka (std::queue<t>) Przykłady wykorzystania kolejki: elementy do przetworzenia w ramach jakiegoś algorytmu, kolejka może być wykorzystana jako bufor między dwoma interfejsami (jeden interfejs nadaje, drugi przetwarza, ale zdarzenia mogą mieć miejsce asynchronicznie), najprostsze algorytmy np. w routerach wykorzystują kolejki pakiety przychodzą, są kolejkowane i kolejno przesyłane do odpowiednich odbiorców.

Deque (std::deque<t>) Deque to Double-Ended Queue (czyli kolejka o dwóch końcach), jest to swoiste skrzyżowanie listy i wektora, kosztem nieco mniejszej wydajności zyskujemy na uniwersalności: możliwość iterowania po wszystkich elementach, możliwość wykorzystania operatora indeksu, aby dostać się natychmiastowo do konkretnego elementu, brak konieczności wykorzystania ciągłego fragmentu pamięci.

Deque (std::deque<t>) Przykład wykorzystania deque'a, * dodajemy elementy z przodu, z tyłu, używamy operatora indeksowania, usuwamy elementy z dowolnej strony.

Stos (std::stack<t>) Stos to struktura typu LIFO, bardzo prosta struktura, która umożliwia de facto trzy operacje: dodanie elementu na szczyt stosu, usunięcie elementu ze szczytu stosu, sprawdzenie, co znajduje się na szczycie stosu, jest to adapter ( wrapper ) na kontener typu deque, ale można wykorzystać również inny kontener (np. vector lub list),

Stos (std::stack<t>) Uwaga: nie należy mylić std::stack<t> ze stosem ani stertą jako element programu bądź systemu operacyjnego.

Kopiec binarny Struktura drzewiasta (choć nie implementowana jako drzewo) w której każdy węzeł ma dwoje dzieci (za wyjątkiem najniższego poziomu drzewa) i mają one wartości większe niż rodzic, na najniższym poziomie drzewa elementy układane są od lewej do prawej strony.

Kopiec binarny Przykład kopca binarnego:

Kopiec binarny Cechy: zawsze element o najmniejszej wartości będzie na górze kopca, po dodaniu lub usunięciu elementu, drzewu trzeba przywrócić własność kopca (można użyć funkcji STL: std::make_heap), można sobie wyobrazić kopiec w wersji min i max, najwygodniej zaimplementować kopiec w postaci tablicy:

Informacje Szczegóły związane z każdą z zaprezentowanych reprezentacji danych można znaleźć tutaj: http://www.sgi.com/tech/stl/

Pytania?

Zadania?