Podstawowe struktury danych



Podobne dokumenty
Podstawowe struktury danych

Struktury danych: stos, kolejka, lista, drzewo

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

Dynamiczne struktury danych

Listy, kolejki, stosy

Programowanie obiektowe

Struktura danych. Sposób uporządkowania informacji w komputerze. Na strukturach danych operują algorytmy. Przykładowe struktury danych:

Wstęp do programowania. Listy. Piotr Chrząstowski-Wachtel

Wstęp do programowania

Dynamiczne struktury danych

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Podstawy programowania 2. Przygotował: mgr inż. Tomasz Michno

Struktura danych. Sposób uporządkowania informacji w komputerze. Na strukturach danych operują algorytmy. Przykładowe struktury danych:

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

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

wykład Organizacja plików Opracował: dr inż. Janusz DUDCZYK

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

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

Podstawy Programowania 2 Jednokierunkowa lista liniowa. Plan. Jednokierunkowa lista liniowa. Jednokierunkowa lista liniowa. Notatki. Notatki.

Algorytmy i struktury danych

Teoretyczne podstawy informatyki

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

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

Algorytmy i Struktury Danych. (c) Marcin Sydow. Sortowanie Selection Sort Insertion Sort Merge Sort. Sortowanie 1. Listy dowiązaniowe.

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

. Podstawy Programowania 2. Jednokierunkowa lista liniowa. Arkadiusz Chrobot. 28 marca 2017

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


Algorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane

ALGORYTMY I STRUKTURY DANYCH

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)

Teoretyczne podstawy informatyki

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Algorytmy i struktury danych. wykład 5

Programowanie w VB Proste algorytmy sortowania

Lista, Stos, Kolejka, Tablica Asocjacyjna

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

Sortowanie. Bartman Jacek Algorytmy i struktury

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

Java Collections Framework

Sortowanie przez wstawianie Insertion Sort

Tadeusz Pankowski

Algorytmy i struktury danych. Wykład 6 Tablice rozproszone cz. 2

Algorytmy i Struktury Danych

KOLEJKA (QUEUE) (lista fifo first in, first out)

Algorytmy i Struktury Danych.

Podstawy Informatyki. Wykład 6. Struktury danych

Przykładowe B+ drzewo

Laboratorium nr 7 Sortowanie

WSTĘP DO INFORMATYKI. Struktury liniowe

ALGORYTMY I STRUKTURY DANYCH

Wysokość drzewa Głębokość węzła

< K (2) = ( Adams, John ), P (2) = adres bloku 2 > < K (1) = ( Aaron, Ed ), P (1) = adres bloku 1 >

Jeszcze o algorytmach

liniowa - elementy następują jeden za drugim. Graficznie możemy przedstawić to tak:

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

Algorytmy sortujące i wyszukujące

Lista liniowa dwukierunkowa

Algorytmy i Struktury Danych.

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

Podstawy Programowania. Listy i stosy

Grafem nazywamy strukturę G = (V, E): V zbiór węzłów lub wierzchołków, Grafy dzielimy na grafy skierowane i nieskierowane:

Tablice z haszowaniem

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał

Bazy danych. Plan wykładu. Model logiczny i fizyczny. Operacje na pliku. Dyski. Mechanizmy składowania

Programowanie i struktury danych 1 / 44

Algorytmy i Struktury Danych.

PLAN WYKŁADU BAZY DANYCH HIERARCHIA MECHANIZMÓW SKŁADOWANIA PRZECHOWYWANIA BAZ DANYCH

Teoretyczne podstawy informatyki

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

Materiał uzupełniający do ćwiczen z przedmiotu: Programowanie w C ++ - ćwiczenia na wskaźnikach

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je.

Wykład 6_1 Abstrakcyjne typy danych stos Realizacja tablicowa i za pomocą rekurencyjnych typów danych

INFORMATYKA DANE.

Listy i operacje pytania

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania

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

Architektura komputerów

Algorytmy i złożoności Wykład 5. Haszowanie (hashowanie, mieszanie)

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

TEORETYCZNE PODSTAWY INFORMATYKI

Programowanie i struktury danych

Algorytmy i Struktury Danych.

TEORETYCZNE PODSTAWY INFORMATYKI

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Tablice z haszowaniem

Algorytmy i struktury danych

ZASADY PROGRAMOWANIA KOMPUTERÓW

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

Zmienne i struktury dynamiczne

Marcin Matusiak i Łukasz Stasiak

1 Wskaźniki i listy jednokierunkowe

Temat: Liniowe uporzdkowane struktury danych: stos, kolejka. Specyfikacja, przykładowe implementacje i zastosowania. Struktura słownika.

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

Wykład 5. Sortowanie w czasie liniowologarytmicznym

Transkrypt:

Podstawowe struktury danych 1) Listy Lista to skończony ciąg elementów: q=[x 1, x 2,..., x n ]. Skrajne elementy x 1 i x n nazywamy końcami listy, a wielkość q = n długością (rozmiarem) listy. Szczególnym przypadkiem jest lista pusta: q = [ ]. Podstawowe abstrakcyjne operacje na listach q =[x 1, x 2,..., x n ] i r =[y 1, y 2,..., y m ] dla 1 i j n to: dostęp do elementu listy - q[i] = x i ; podlista - q[i..j] = [x i, x i+1,..., x j ] ; złożenie - q&r = [x 1,..., x n, y 1,...,y m ] ; Na podstawie operacji podstawowych można zdefiniować inne operacje, np. wstawianie elementu x za element x i, na liście q: q[1..i] & [x] & q[i+1.. q ]. W operacjach na listach ograniczamy się zwykle do zmian ich końców: a) front(q) = q[1] - pobierz lewy koniec listy b) push(q,x) = [x]&q - wstaw element na lewy koniec c) pop(q) =q[2.. q ] - usuń bieżący lewy koniec d) rear(q) = q[ q ] - pobierz prawy koniec listy e) inject(q,x) =q&[x] -wstaw element na prawy koniec f) eject(q) =q[1.. q -1 ] - usuń bieżący prawy koniec

W zależności od możliwości wykonania różnych operacji wyróżniemy: kolejkę podwójną - wszystkie sześć operacji stos - tylko operacje front, push, pop kolejkę - tylko operacje front, pop, inject Dwie podstawowe implementacje (reprezentacje) listy q =[x 1, x 2,..., x n ] to: tablicowa - q[i] = x i, gdzie 1 i n, dowiązaniowa W implementacjach pojedynczej liniowej i podwójnej liniowej dowiązanie prowadzące do listy wskazuje na pierwszy element na liście. W implementacji pojedynczej cyklicznej i podwójnej cyklicznej dowiązanie prowadzące do listy wskazuje na element ostatni.

Aby dowiązana struktura nigdy nie była pusta dodaje się na początku listy element pusty zwany GŁOWĄ lub WARTOWNIKIEM listy. Operacje na listach o stałej złożoności czasowej: a) w implementacji pojedynczej liniowej: operacje stosu, wstawianie jednego elementu za drugi, usuwanie następnego elementu, b) w implementacji pojedynczej cyklicznej: te co w a) oraz złożenie i operacje rear i inject, c) w implementacji podwójnej cyklicznej: te co w b) oraz eject, wstawianie jednego elementu przed drugim, odwracanie listy. LISTY JEDNOKIERUNKOWE Lista jednokierunkowa jest oszczędną pamięciowo strukturą danych, pozwalającą grupować dowolną - ograniczoną tylko ilością dostępnej pamięci - liczbę elementów: liczb, znaków, rekordów. Do budowy listy używane są dwa typy rekordów: - informacyjny - wskaźniki, dowiązania do początku listy (głowa) i końca listy (ogon) - robocze - pole wartości i wskaźnik do następnego elementu listy Dzięki rekordowi informacyjnemu mamy ciągły dostęp do niektórych operacji, np. dołączanie elementu na koniec listy. Głowa, ogon i następny to wskaźniki, wartość to dowolna wielkość (znanego typu).

Wskaźniki NULL oznaczają adresy pamięci pod którymi nie ma żadnej zmiennej. Przykład listy jednokierunkowej:

Pola głowa i ogon pozwalają na przeglądanie elementów listy i dołączanie nowych elementów. Przykład (pseudokod) przeglądania elementów listy: adres_tmp=info.głowa; while (adres_tmp <> NULL ) { if(adres_tmp.wartość == x) { Wypisz "Znalazłem szukany element" opuść procedurę } else adres_tmp=adres_tmp.następny } Wypisz "Nie znalazłem elementu" Dokładanie nowych elementów (dwa podejścia): 1)potraktowanie listy jak worek nie-uporządkowanych elementów i umieszczanie nowych elementów na początku

2) dokładanie elementów we właściwym ustalonym przez użytkownika porządku (całość listy musi być widziana jako posortowana) Możliwe są trzy przypadki: a) wstawiamy element na początek listy b) wstawiamy element na koniec listy c) wstawiamy element gdzieś w środku W każdym z przypadków musimy zapamietywać dwa wskaźniki - przed który element wstawić i po którym mamy to zrobić.

Podobnie postępujemy przy fuzji (łączeniu) list tak by wypadkowa lista pozostała uporządkowana. Podsumowując wady i zalety list jednokierunkowych: Wady nienaturalny dostęp do elementów niełatwe sortowanie Zalety małe zużycie pamięci elastyczność Lista w której elementy są już na samym początku wstawiane w określonym porządku, służy obok gromadzenia danych, także do ich porządkowania. W sytuacji, gdy jest tylko jedno kryterium sortowania struktura działa bardzo dobrze "sama" dbając o sortowanie.

Dla kilku kryteriów sortowania należy wprowadzić obok listy danych, także kilka list z wskaźnikami do danych - list tych powinno byś tyle ile kryteriów sortowania. Sortowanie w takich wypadku polega na porządkowaniu wskaźników bez ruszania listy danych. Nieposortowaną listę DANE można uporządkować według trzech kryteriów:

- imienia i nazwiska (Adam Fuks, Jan Kowalski, Michał Zaremba) - kodów ( 30, 34, 37) - kwot ( 1200, 2000, 3000 ) Tablicowa implemantacja list jest niezwykle prosta jeśli umówimy się, że i-temu indeksowi tablicy odpowiada i-ty element listy. Wymagana jest dodatkowa informacja wskazująca jak wiele elementów liczy lista (jak duża musi być tablica). Wadą jest marnotrawstwo pamięci bo najczęściej przydzielamy na tablicę większy obszar pamięci niż to zwykle potrzeba. Operacje na listach są w implementacji tablicowej proste: 1) front(q), x=q[1] - pobierz lewy koniec listy 2) push(q,x) - przesuń wszystkie elementy tablicy o jeden w prawo i q[1]=x - wstaw element na lewy koniec 3) pop(q), przesuń wszystkie elementy tablicy poza pierwszym o jeden w lewo - usuń bieżący lewy koniec 4) rear(q), x=q[n] - pobierz prawy koniec listy 5) inject(q,x), q[n+1]=x -wstaw element na prawy koniec 6) eject(q), n=n-1 - usuń bieżący prawy koniec

Dodatkowo: A) usunięcie k-tego elementu to - przesunąć w lewo elementy tablicy q[k+1]...q[n], n=n-1 B) wstawienie elementu na pozycję k to - przesunąć w prawo elementy tablicy q[k]...q[n], n=n+1 LISTY DWUKIERUNKOWE Listy jednokierunkowe są wygodne i zajmują mało pamięci. Operacje na nich zajmują dużo czasu. W liście dwukierunkowej komórka robocza zawiera wskaźniki do elementów: poprzedniego i następnego. pierwsza komórka na liście nie posiada swojego poprzednika (pole poprzedni zawiera NULL wskaźnik pokazujący pusty element pamięci) ostatnia komórka na liście nie posiada swojego następnika (pole następny zawiera NULL wskaźnik pokazujący pusty element pamięci) Lista dwukierunkowa jest kosztowna jeśli chodzi o pamięć, ale wygodna gdy chodzi o szybkość.

Usunięcie elementu listy dwukierunkowej: Lista cykliczna jest zamknięta w pierścień, wskaźnik ostatniego elementu wskazuje na pierwszy element. Elementy pierwszy i ostatni są umowne. STOSY Stos jest struktura danych, do której dostęp jest możliwy tylko od strony tzw. wierzchołka, czyli pierwszego wolnego miejsca znajdującego się na nim. Funkcje odkładania elementu X na stos ( push(x) ) i pobieranie go ze stosu ( pop(x) ) można opisać symbolicznie (wraz z kodem błędu s wprowadzonym przez użytkownika):

Tablicowa implementacja stosu wygląda analogicznie jak dla listy, ale z dostępnymi jedynie operacjami front, push, pop.