Listy.

Slides:



Advertisements
Podobne prezentacje
ALGORYTMY I STRUKTURY DANYCH
Advertisements

PRAM.
STRUKTURY DANYCH.
Sortowanie przez scalanie
Algorytmy sortowania i porządkowania
Algorytmy sortowania i przeszukiwania
Rekurencja 1 Podprogram lub strukturę danych nazywamy rekurencyjną, (recursive subprogram, recursive data structure) jeżeli częściowo składa się z samej.
Standardowa biblioteka języka C++
Schemat blokowy M START KONIEC
Wskaźniki repetytorium Wskaźniki int Y = 1, X = 2; X = 5; int *p = &X; Y X p 4 4 p = &Y; *p = 4; 5.
Dynamiczne struktury danych Listy, Kolejki, Stosy
Programowanie I Rekurencja.
PROGRAMOWANIE STRUKTURALNE
Elementarne struktury danych Piotr Prokopowicz
pseudokody algorytmów
ZŁOŻONOŚĆ OBLICZENIOWA
ALGORYTMY GEOMETRYCZNE.
Model danych oparty na listach
Tablice.
Instrukcje 1 Definicje wstępne Formalny opis akcji wykonywanej przez komputer nazywamy instrukcją ( statement), Każda instrukcja kończona jest średnikiem.
Dynamiczne struktury danych 1
Rzędy wielkości funkcji
PASCAL (2) dr Anna Kwiatkowska.
Typy wskaźnikowe, dynamiczne struktury danych
Podstawy programowania
Podstawy programowania II
Algorytmy i struktury danych
Zbiór do posortowania mieści się w pamięci
Podstawy programowania II
Operacje na strukturach listowych
Algorytmy i struktury danych
PHP: warunki, pętle, switch, break, continue
Listy, stosy i kolejki..
formalnie: Algorytmy genetyczne i wstęp do algorytmów ewolucyjnych
Złożone typy danych Listy Tworzenie elastycznych baz danych
Tworzenie programów, etapów oraz określanie wymagań etapowych
C# Platforma .NET CZ.3 Kuba Ostrowski.
Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 8.
Dynamiczne struktury danych
Wykład 7 Synchronizacja procesów i wątków
PL/SQL – dalsza wędrówka
Algorytmy i Struktury Danych
Metody numeryczne szukanie pierwiastka metodą bisekcji
Powtórzenie wyk ł adu 10 Fizyczna organizacja danych w bazie danych. Indeksy.
PHP Instrukcja warunkowa if Damian Urbańczyk. Warunek? Instrukcję warunkową wykorzystujemy wtedy, gdy chcemy sprawdzić pewien fakt, który może być prawdziwy.
Algorytmy i Struktury Danych Struktury Danych
Algorytmy równoległe Algorytm równoległy pozwala na wykonywanie w danej chwili więcej niż jednej operacji. EREW - wyłączny odczyt i wyłączny zapis; CREW.
Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2006/ /11/2006Prof. dr hab. Elżbieta Richter-Wąs Wykład 6 Model danych oparty.
Zbiory dynamiczne.
ASP.NET Dostęp do bazy danych z poziomu kodu Elżbieta Mrówka-Matejewska.
ALGORYTMY I STRUKTURY DANYCH
STOS. STL (ang. Standard Template Library) jest to biblioteka zawierająca algorytmy, pojemniki, iteratory oraz inne konstrukcje w formie szablonów, gotowe.
Temat: Tworzenie bazy danych
Czym jest PHP? ● Językiem programowania przeznaczonym do tworzenia i generowania dynamicznych stron WWW. Działa po stronie serwera: Klient Żądanie strony.
Indeksy drzewiaste. ISAM ISAM - INDEXED SEQUENTIAL ACCESS METHOD Problem: –Dany jest plik uporządkowany – w jaki sposób zrealizować efektywnie zapytanie.
Strumienie, Wczytywanie, Zapisywanie, Operacje na plikach
Rozdział 5 REKURENCJA.
Programowanie Obiektowe – Wykład 5
Kolejka priorytetowa.
Drzewa.
Zbiory rozłączne.
Programowanie Obiektowe – Wykład 2
Fizyczna organizacja danych w bazie danych Wykład 7
Algorytmy i struktury danych
Dane, zmienne, instrukcje
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
Instrukcja warunkowa if
Format rozkazu Tryby adresowania.
Zapis prezentacji:

Listy

Zbiór dynamiczny Zbiór dynamiczny to zbiór wartości pochodzących z pewnego określonego uniwersum, którego zawartość zmienia się w trakcie działania programu. Elementy zbioru dynamicznego musimy co najmniej umieć porównać pod względem identyczności (czy dwa elementy są równe albo różne). W multizbiorze elementy mogą się powtarzać.

Dynamiczne struktury danych Dynamiczna struktura danych, to struktura danych pozwalająca na przechowywanie zbioru dynamicznego; rozmiar tej struktury dostosowuje się do rozmiaru danych. W zbiorze dynamicznym musimy umieć realizować operację dodania nowego elementu do zbioru i usunięcia ze zbioru wskazanego elementu. Tablica dynamiczna jest dynamiczną strukturą danych. Zastosowanie: przechowywanie pewnego zbioru danych, którego zawartość będzie się zmieniać w trakcie pracy programu.

Słownik Słownik (ang. dictionary) to struktura danych pozwalająca efektywnie realizować następujące operacje: insert(x) – dodanie nowego elementu x do zbioru dynamicznego, delete(x) / remove(x) – usunięcie elementu o wartości x ze zbioru dynamicznego, search(x) – sprawdzenie czy w zbiorze dynamicznym znajduje się element o wartości x. Multizbiór to zbiór dynamiczny, w którym mogą się powtarzać elementy o takich samych wartościach. Struktura danych jest homogeniczna, jeśli składa się z elementów tego samego typu.

Lista Lista (ang. list) to homogeniczna struktura danych służąca do reprezentowania zbioru dynamicznego, w której elementy ułożone w ciąg (struktura sekwencyjna). Element listy nazywa się węzłem (ang. node); każdy węzeł zawiera pole info służące do przechowywania jednej wartości z pewnego określonego uniwersum oraz pole next ze wskaźnikiem na następny element listy (ostatni element listy ma w polu next wpisany wskaźnik pusty). Pierwszy węzeł listy jest nazywany głową (ang. head) albo początkiem listy. Dostęp do elementów listy jest sekwencyjny – a więc dojście do elementu k-tego wymaga przejścia przez kolejne elementy listy od pierwszego do docelowego. Zastosowanie: lista najlepiej nadaje się do danych, które będą przetwarzane sekwencyjnie.

Lista Lista jednokierunkowa (ang. single linked list) to lista, po której można się poruszać tylko od głowy do ogona – w każdym węźle jest tylko wskaźnik do następnika. Lista dwukierunkowa (ang. double linked list) to lista, po której można się poruszać w obu kierunkach: w stronę głowy i w stronę ogona – w każdym węźle są dwa wskaźniki next do następnika i prev do poprzednika.

Lista Lista cykliczna to lista, w której ostatni węzeł posiada wskaźnik do pierwszego węzła. Lista dwukierunkowa może być cykliczna. Lista z wartownikiem to lista, w której na końcu umieszczony jest węzeł zwany wartownikiem – wartownik nie przechowuje danych, pełni rolę pomocniczą w nawigacji po liście. Lista z wartownikiem może być cykliczna lub dwukierunkowa. Gdy dane pochodzą z uniwersum z porządkiem liniowym, to dane w liście można przechowywać w sposób uporządkowany – mamy w tedy do czynienia z listą uporządkowaną.

Lista Wyszukiwanie wartości w liście jednokierunkowej – wersja iteracyjna Search(wezeł *w, x) -> boolean { while (w.info != x) { if (w.next != null) w := w.next; else return false; } return true; Czas: O(n) gdzie n to ilość elementów na liście Pamięć: O(1)

Lista Wyszukiwanie wartości w liście jednokierunkowej – wersja rekurencyjna Search(wezeł *w, x) -> boolean { if (w == null) return false; if (w.info == x) return true; return Search(w.next, x); } Czas: O(n) gdzie n to ilość elementów na liście Pamięć: O(n) zależy od liczby wywołań rekurencyjnych

Lista Wyszukiwanie wartości w liście jednokierunkowej z wartownikiem – wersja rekurencyjna Search(wezeł *w, x, wezel *wart) -> boolean { wart.info = x; while (w.info != x) w := w.next; return w != wart; } Czas: O(n) gdzie n to ilość elementów na liście Pamięć: O(1)

Lista Wyszukiwanie wartości w liście posortowanej – wersja rekurencyjna Search(wezeł *w, x) -> boolean { if (w == null) return false; if (w.info == x) return true; if (w.info > x) return false; return Search(w.next, x); } Czas: O(n) gdzie n to ilość elementów na liście Pamięć: O(n) zależy od liczby wywołań rekurencyjnych

Lista Wstawianie elementu do listy nieuporządkowanej: na początek listy, na koniec, na zadaną pozycję. Wstawianie elementu do listy uporządkowanej: wstawiamy zachowując uporządkowanie Usuwanie elementu z listy: usuwanie elementu z zadanej pozycji, usuwanie elementu o zadanej wartości.

Listy Technika zwracania wskaźnika do struktury po zmodyfikowaniu (semitrwałe struktury danych). Przykład: wstawienie elementu na zadaną pozycję: insert(węzeł *w, x, pos) -> węzeł* { if (pos < 0) error; if (w == null and pos > 0) error; if (pos > 0) { w.next := insert(w.next, x, pos-1); return w; } else return new węzeł(x, w); } wywołanie: head := insert(head, x);

Listy Operacje słownikowe na liście n- elementowej wymagają: czasu O(n), pamięci O(1) gdy używamy iteracji albo O(n) gdy korzystamy z rekurencji.

Listy Zadanie: podział listy na dwie równe podlisty (z dokładnością do 1 elementu). Rozwiązanie: dwa wskaźniki, jeden robi podwójne skoki, drugi pojedyncze; po dotarciu na koniec listy pierwszego wskaźnika, drugi wskazuje na węzeł środkowy. split(węzeł *h) -> (węzeł*, węzeł*) { węzeł *p = head; węzeł *q = head; if (p == null) return (null, null); while (q != null) { q := q.next; if (q == null) break; q := q.next; if (q != null) p := p.next; } q := p.next; p.nex; := null; return (head, q); }

Listy Zadanie: należy scalić dwie posortowane lisy . Rozwiązanie: do końca listy wynikowej doczepiamy mniejszy spośród głów pozostałych list. merge(węzeł *g, węzeł *h) -> węzeł* { if (g == null) return h; if (h == null) return g; węzeł *r = g; if (g.info < h.info) g := g.next; else { r := h; h := h.next; } węzeł *s = r; while (g != null and h != null) if (g.info < h.info) { r.next := g; r := r.next; g := g.next; } else { r.next := h; r := r.next; h := h.next; } if (g != null) r.next := g; else r.next := h; return s; }

Zadanie Zdefiniuj klasę reprezentującą węzeł listy jednokierunkowej wraz z operacjami wstawiania nowego elementu na zadaną pozycję, usuwania węzła z zadanej pozycji i sprawdzania czy określony element znajduje się na liście. Węzeł listy zdefiniuj jako szablon przy pomocy template<typename T>. Zdefiniuj klasę reprezentującą listę jako opakowanie dla struktury zbudowanej na węzłach. W klasie tej opakuj metodę wstawiającą do listy, usuwającą z listy i sprawdzającą czy element występuje na liście. Dodatkowo dopisz metody: wstawiająca element na początek listy, na koniec listy, usuwającą pierwszy i usuwającą ostatni element na liście. Listę zdefiniuj jako szablon przy pomocy template<typename T>.