Podstawy Informatyki. Struktura programu Stałe i zmienne. Wykład 4. Struktury danych

Podobne dokumenty
Podstawy Informatyki. Wykład 6. Struktury danych

Podstawy Informatyki. Wykład 4. Struktury danych

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

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

Typy danych. 2. Dane liczbowe 2.1. Liczby całkowite ze znakiem i bez znaku: 32768, -165, ; 2.2. Liczby rzeczywiste stało i zmienno pozycyjne:

ALGORYTMY I STRUKTURY DANYCH

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

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

INFORMATYKA DANE.

Podstawy Programowania C++

ALGORYTMY I STRUKTURY DANYCH

Drzewa poszukiwań binarnych

Lista liniowa dwukierunkowa

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

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych

Podstawy programowania skrót z wykładów:

Algorytmy i Struktury Danych

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Przykładowe B+ drzewo

Lab 9 Podstawy Programowania

Algorytmy i struktury danych. wykład 5

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

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

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

Tadeusz Pankowski

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

ZASADY PROGRAMOWANIA KOMPUTERÓW

Struktury danych: stos, kolejka, lista, drzewo

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

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

Listy, kolejki, stosy

Teoretyczne podstawy informatyki

Podstawy Informatyki. Metody dostępu do danych

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

Programowanie obiektowe

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Definicja pliku kratowego

Wykład X. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2016 Janusz Słupik

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Algorytm. Krótka historia algorytmów

Porządek symetryczny: right(x)

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

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

Programowanie obiektowe

Algorytmy i Struktury Danych

Informatyka I. Wykład 4. Tablice. Dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

Matematyka dyskretna - 7.Drzewa

Podstawy Informatyki. Metalurgia, I rok. Wykład 3 Liczby w komputerze

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Grafy (3): drzewa. Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków. UTP Bydgoszcz

Podstawy Programowania

Dynamiczne struktury danych

Drzewo. Drzewo uporządkowane ma ponumerowanych (oznaczonych) następników. Drzewo uporządkowane składa się z węzłów, które zawierają następujące pola:

Definicje. Algorytm to:

Algorytm. Słowo algorytm pochodzi od perskiego matematyka Mohammed ibn Musa al-kowarizimi (Algorismus - łacina) z IX w. ne.

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

Wstęp do programowania

Wykład 1: Wskaźniki i zmienne dynamiczne

Wykład 14. Środowisko przetwarzania

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

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

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Wykład 2. Drzewa zbalansowane AVL i 2-3-4

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

Abstrakcyjne struktury danych - stos, lista, drzewo

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Ogólne wiadomości o grafach

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Drzewa binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np.

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

. Podstawy Programowania 2. Drzewa bst - część pierwsza. Arkadiusz Chrobot. 22 maja 2016

Algorytmy sortujące i wyszukujące

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

Wstęp. #define include include include include include include

Wstęp do informatyki

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

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

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

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

Podstawowe struktury danych

Struktury Danych i Złożoność Obliczeniowa

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

Języki programowania obiektowego Nieobiektowe elementy języka C++

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop

Język ludzki kod maszynowy

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Teoretyczne podstawy informatyki

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

UNIWERSYTET GDAŃSKI MATERIAŁY DYDAKTYCZNE DO PRZEDMIOTU MATEMATYKA DYSKRETNA. pod redakcją: Hanna Furmańczyk Karol Horodecki Paweł Żyliński

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

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

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

Algorytmy i Struktury Danych

Sortowanie. Bartman Jacek Algorytmy i struktury

Algorytm. Słowo algorytm pochodzi od perskiego matematyka Mohammed ibn Musa al-kowarizimi (Algorismus - łacina) z IX w. ne.

Transkrypt:

Podstawy Informatyki Wykład 4 Języki programowania Kompilacja proces, w którym program w języku wysokiego poziomu jest tłumaczony na język adresów symbolicznych (asembler). Program realizujący ten proces nazywany jest kompilatorem. Interpreter program tłumaczący każdą instrukcję na instrukcje poziomu maszyny i natychmiast ją wykonujący. ortran Cobol Pascal, C++ Snobol Prolog Lisp elphi Java do obliczeń numerycznych. język dla przedsiębiorstw i handlu (mechanizmy definiowania struktury pliku) języki uniwersalne manipulowanie tekstami i napisami oparty na logice faktów przetwarzanie list, obliczenia symboliczne Początek deklaracje komentarze instrukcje Koniec Pascal: Program nazwa; begin... end. Struktura programu Stałe i zmienne Podstawowymi obiektami występującymi w programie są stałe i zmienne. Ich znaczenie jest takie samo jak w matematyce. Stałe i zmienne muszą posiadać nazwę i posiadają przypisaną wartość. Nazwa jest ciągiem znaków, z których pierwszy musi być literą, np.: x, alfa, pierwiastek, Obowiązują tylko znaki SCII (abc...z, BC...XYZ). Nie ma polskich liter ani greckich. Charakter zmiennych jest deklarowany we wstępnej części programu (zazwyczaj zaraz na początku, przed instrukcjami właściwymi programu) Zmienne są różnych typów: całkowite (integer):, 2, 28 rzeczywiste (real): 0.456, -734.29 logiczne (logical): true, false znakowe (character): imie, adres itp. Tablice Tablica jest to struktura danych zawierająca uporządkowany zbiór obiektów tego samego typu i odpowiada matematycznemu pojęciu wektora, macierzy, zmiennych indeksowych, itp. 2 3 4 5 6 7 a S = a + + a 2 +... a n

laczego tablice? Jeśli n=3, to nie tak ważne. jeśli n=00? - deklarujemy jedną zmienną tablicową a nie 00 zwykłych. - w programie można łatwo odwołać się do elementu, którego numer jest wyliczany, np.: k=2*i- la i=5 mamy k=9 o zmiennej tablicowej odwołujemy się: x:=[9], lub x:=[k], a nawet x:=[2*i-] Proste? gdyby nie było zmiennych tablicowych? laczego tablice, cd. Przykład programu: k=2*i- wybierz k z: : x:= 2: x:=2 3: x:=3... 9: x:=9... 00: x:=00 Bez sensu! Wyrażenia Wyrażenia są zapisem operacji, które wykonywane są na zmiennych i stałych. Wyrażenie składa się ze stałych, zmiennych i łączących je operatorów. Operatory: +, -, *, / Kolejność wykonywania działań określają nawiasy i priorytet operatorów. Np.: x = 2.5 a - x y x = 2.5*a - x*y y = (a+b)*(x-2*y)+2.5/(x-5) W poszczególnych językach mogą występować różnice w operatorach. Instrukcje wejścia/wyjścia Umożliwiają komunikowanie się programu z użytkownikiem. Umożliwiają czytanie danych jak również wypisywanie komunikatów i wyników prowadzonych obliczeń. Np.: Pascal - read(a,b); { z klawiatury wprowadzamy : np. 2 5 writeln(a); {drukujemy na ekranie wartość a (np. 2 Podprogram fragment programu wykonujący te same działania dla różnych argumentów. Podprogramy mogą być wywoływane z argumentami (parametrami): podprogram (argument_, argument_2,..., argument_3) Procedura podprogram, który nie zwraca wartości procedura(lista_argumentów){... unkcja podprogram, który zwraca wartość typ_wartości_zwracanej funkcja(lista_argumentów){ typ_wartości_zwracanej wynik;... return wynik; //zwróć wynik Przykład wykorzystania podprogramu. Program (analizator tekstu) przetwarza i analizuje tekst pod kątem wyszukiwania określonego ciągu znaków. program analizator{ otwórz_plik_do_analizy(p,"nazwa"); int licznik_, licznik_2=0; //zmienne typu całkowitego do //przechowywania liczby wystąpień szukanych ciągów znaków licznik_=szukaj(p,"wektor"); //WYWOŁNIE POPROGRMU licznik_2=szukaj(p,"."); wypisz("w pliku ",p," słowo wektor występuje ",licznik_,"razy. ", "W pliku jest ", licznik_2," zdań"); //koniec programu int szukaj(plik, ciąg_znaków){ int licznik=0; wskaźnik=0; //wskazuje początek słowa w pliku słowo zmienna typu ciąg znaków while( koniec_pliku(plik) ){ //dopóki nie ma końca pliku słowo=weź_słowo(plik,wskaźnik); //funkcja zwraca słowo wskazywane przez wskaźnik w pliku if(słowo == ciąg_znaków) licznik=licznik+; przesuń_wskaźnik(plik,wskaźnik); //funkcja przesuwa wskaźnik w pliku na następne słowo return licznik; //zwróć licznik //koniec funkcji szukaj

Zalety podprogramów zmniejszenie rozmiaru algorytmu dobrze napisany i przemyślany podprogram stanowi kolejną elementarną instrukcję zwiększenie czytelności i przejrzystości algorytmu Stosowanie podprogramów daje możliwość budowy złożonego algorytmu stopniowo, a nie stosując od razu wyłącznie dozwolone instrukcje elementarne: w pierwszym etapie tworzony jest algorytm wysokiego poziomu, zawierający nie tylko instrukcje elementarne, ale także instrukcje, których szczegółowe realizacje zostaną napisane później. Kolejny krok to uszczegółowienie tych instrukcji. instrukcja wp I instrukcja wp II instrukcja wp II instrukcja wp II instrukcja wp III instrukcja wp III instrukcja elementarna instrukcja elementarna instrukcja elementarna Metoda zstępująca (analityczna) Typ danych określa zbiór wartości, do którego należy obiekt Typy proste: liczbowe: całkowite, zmiennoprzecinkowe, w formacie dziesiętnym, dwójkowym, itp. znakowe: słowa zapisane w różnych alfabetach logiczne: prawda/fałsz Zmienne Służą do przechowywania w pamięci pojedynczych obiektów Odwoływanie się do zmiennych. Niech X będzie zmienną całkowitą. wypisz(x); //wypisz wartość zmiennej X X -2; //przypisz zmiennej X wartość 2 X X + 5; //zwiększ wartość X o 5 Typy danych Metoda wstępująca (syntetyczna) przeciwieństwo metody zstępującej W programowaniu struktura danych jest sposobem składowania danych na komputerze tak, by mogły być efektywnie wykorzystane. Często staranne dobranie struktury danych pozwala na zastosowanie wydajniejszego algorytmu. Przykładowe struktury danych to: rekord, zwany w niektórych językach po prostu strukturą tablica lista stos kolejka drzewo i jego liczne odmiany (np. drzewo binarne) graf Struktura danych zbiór elementów. Każdy element składa się z jednego lub więcej części (słów maszynowych), zwanych polami. Przykład elementu struktury danych p Pole p jest wskaźnikiem (dowiązaniem) Pola,, dowolnego typu TOP Wskaźnik (dowiązanie) podstawowy sposób reprezentowania złożonych struktur danych. owiązanie puste symbol Λ, symbol uziemienia Na pierwszą wartość wskazuje wartość zapisana w zmiennej TOP TOP to zmienna wskaźnikowa zmienna, której wartościami są wskaźniki (dowiązania). Wszystkie odwołania do elementów struktury odbywają się bezpośrednio przez zmienne (lub stałe) wskaźnikowe pośrednio przez pola elementów struktury zawierające wskaźniki Listy liniowe Projekt reprezentacji struktury danych: zdefiniowanie informacji (danych), które będą przechowywane zdefiniowanie operacji wykonywanych na danych Wybór struktury danych zależy od powyższych czynników i determinuje funkcjonalność struktury. Lista liniowa ciąg n 0 elementów X[], X[2],.., X[n], w którym względna pozycja elementu zdefiniowana jest w porządku liniowym. la n > 0 X[] jest pierwszym elementem, X[n] ostatnim i jeśli < k < n, to k-ty element X[k] leży za elementem X[k-] i przed elementem X[k+].

Listy Podstawowe operacje na liście: dostęp do k-tego elementu listy. Cel: odczyt lub modyfikacja zawartości pól elementu wstawianie nowego elementu przed lub po k-tym elemencie usuwanie k-tego elementu wyznaczenie liczby elementów listy znajdowanie elementu listy o zadanej wartości jednego z pól Stos (ang. LIO) lista liniowa, dla której operacje wstawiania i usuwania (oraz odczytu) elementu dotyczą tylko jednego końca listy Kolejka (ang. IO) lista liniowa, dla której operacje wstawiania dotyczą jednego końca, a operacje usuwania (i odczytu) drugiego końca Kolejka dwustronna lista liniowa, dla której wszystkie operacje wstawiania i usuwania (i odczytu) dotyczą dowolnego końca listy lub zdejmowanie Stos wierzchołek dno Usuwanie pierwszy lub usuwanie lewy Kolejka ostatni lub usuwanie prawy Kolejka dwustronna Tablice jednowymiarowe (wektory) Służą do przechowywania w pamięci określonej (skończonej) liczby obiektów tego samego typu 0-cio elementowa tablica liczb całkowitych o nazwie T -8 indeks elementu w tablicy T 2 7 Odwołanie się do i-tego elementu tablicy T: T[i], np. 3-20 4 element tablicy T wypisz(t[i]); //wypisz wartość i-tego elementu tablicy T T[i] 8; //i-temu elementowi tablicy T przypisz wartość 8 5 7 6 9 7-34 8 2 9 5 0 3 Tablice dwuwymiarowe (macierze) Służą do przechowywania w pamięci określonej (skończonej) liczby obiektów tego samego typu Tablica o nazwie M, o 5-ciu wierszach i 0-ciu kolumnach i elementach całkowitych 2 3 wiersz 4 5 kolumna element M[4][3] 4 6 7 8 2 3 5 9 0 27 Odwołanie się do elementu o indeksie i i j tablicy M: M[i][j], np. wypisz(m[i][j]); //wypisz wartość elementu z wiersza i i kolumny j tablicy T M[i][j] 27; //elementowi tablicy M o indeksie i i j przypisz //wartość 27 Jeżeli n = m, gdzie n liczba wierszy, m liczba kolumn tablicy dwuwymiarowej, to tablicę nazywamy kwadratową. Przekątna główna tablicy kwadratowej: indeksy wiersza i kolumny są równe (i=j) Tablice dwuwymiarowe cd. Każdą tablicę dwuwymiarową można przekształcić w tablicę jednowymiarową: Niech M tablica dwuwymiarowa o n wierszach i m kolumnach, T tablica jednowymiarowa o k = n*m elementach Wtedy i=..n, j=..m M[i][j] = T[m*(i-)+j] Tablice wielowymiarowe Niech wymiar tablicy X będzie równy 3. Tablica tworzy wtedy prostopadłościan, a element jest wskazywany przez 3 indeksy: X[i][j][k] Wektor wektorów struktura złożona z wektora, którego elementy wskazują na wektory różnej długości. wskaźnik element element element... element element wskaźnik... wskaźnik element element element element element... element Realizacja listy liniowej tablice () Metoda najprostsza: umieszczenie elementów listy liniowej w kolejnych komórkach (lokacjach) pamięci: dd(x[i+]) = dd(x[i]) + c dd funkcja zwracająca adres początku elementu listy c liczba słów na jeden element listy Jeśli L 0 adres bazowy hipotetycznego elementu X[0], to dd(x[i]) = L 0 + ci Najczęściej za pomocą tablicy realizowany jest stos. Zmienna T nazywana jest wskaźnikiem stosu. Operacje na stosie: T=0 stos pusty T T + ; X[T] Y wkładanie elementu Y na stos Y X[T]; T T zdejmowanie elementu ze stosu, gdy stos jest niepusty

Realizacja listy liniowej tablice (2) Realizacja kolejki lub kolejki dwustronnej. Przechowywane są dwa wskaźniki: (front) i R (rear). Operacje na kolejce dwustronnej: =R=0 kolejka pusta R R + ; X[R] Y wkładanie elementu Y na koniec kolejki Y X[]; + usuwanie elementu z początku kolejki Usprawnienie reprezentacji kolejki dwustronnej (lepsze wykorzystanie pamięci, problem przetaczającej się kolejki): X[],.., X[M] elementy ustawione w cykl, tak, że po X[M] następuje element X[]. Wtedy operacje mają postać: jeśli R=M, to R, wpp R R + ; X[R] Y Y X[]; jeśli =M, to, wpp + ; Realizacja listy liniowej tablice (3) Problem przepełnienia (overflow, nadmiar elementów) Problem niedomiaru (underflow, brak elementów) Postać operacji dla stosu i kolejki dwustronnej: X Y (włóż na stos) T T+; jeśli T > M, to przepełnienie; X[T] Y; Y X (usuń ze stosu) X Y (wstaw do kolejki) Y X (usuń z kolejki) jeśli T=0, to niedomiar; Y X[T]; T T ; jeśli R=M, to R, wpp R R+; jeśli =R, to przepełnienie; X[R] Y; jeśli =R, to niedomiar; Y X[]; jeśli =M, to, wpp +; Lista realizacja wskaźnikowa irst Porównanie realizacji listy liniowej z wykorzystaniem tablicy i wskaźników Struktura ze wskaźnikami wymaga dodatkowego pola na przechowywanie wskaźnika. Operacja usunięcia elementu z listy jest prosta wymaga jedynie zmiany wskaźnika w odpowiednim elemencie. W przypadku sekwencyjnego przydziału pamięci operacja ta wymaga przemieszczenia całego fragmentu listy do innych lokacji pamięci. Program wykorzystujący listę wskaźnikową musi pamiętać wskaźnik do pierwszego elementu listirst. irst elementu w środek listy wskaźnikowej jest prostą operacją. Wymaga zmiany wskaźników w dwóch elementach. irst Porównanie realizacji listy liniowej z wykorzystaniem tablicy i wskaźników cd. Odwołania do dowolnego elementu listy jest szybsze w przypadku tablic. ostęp do k-tego elementu listy w postaci tablicy jest stały, dla listy wskaźnikowej wymaga k przejść po wskaźnikach. Operacja łączenia list wskaźnikowych jest prostsza niż list przy użyciu tablic. Lista wskaźnikowa umożliwia budowę skomplikowanych struktur, np. zmienna liczba list o zmiennej długości: element listy głównej jest wskaźnikiem do listy podrzędnej, lub elementy struktury mają wiele dowiązań i połączone są równocześnie w różnych porządkach, odpowiadając różnym listom. Operacje przeglądania kolejnych elementów listy są szybsze dla list sekwencyjnych. o tworzenia listy wskaźnikowej niezbędny jest mechanizm przydzielania, zwalniania, sprawdzania, czy można pamięć przydzielić, czyli gospodarowania pamięcią. Sterta zbiór wszystkich elementów przeznaczonych do dynamicznego przydzielania. Uwaga: Zakłada się, że element listy ma postać: info link Stos realizacja poprzez listę wskaźnikową. Zmienna wskaźnikowa T wskazuje na wierzchołek stosu. T=Λ stos pusty Włożenie informacji Y na stos T (wykorzystanie dodatkowej zmiennej wskaźnikowej P): P new (element); info(p) Y; link(p) T; T P; Przypisanie informacji do Y z wierzchołka stosu i zdjęcie ze stosu tej informacji: jeśli T =Λ to niedomiar; wpp{ P T; T link(p); Y info(p); delete(p); T

Kolejka realizacja poprzez listę wskaźnikową. Lista cykliczna ostatni element listy wskazuje na pierwszy element. Kolejka pusta: =Λ i R=dd(); Operacja wstawiania nowego elementu do kolejki: P new(element); info(p) Y; link(p) Λ; link(r) P; R P; Operacja usuwania elementu z kolejki: jeśli =Λ to niedomiar; wpp{ P ; link(p); Y info(p); delete(p); jeśli =Λ to R=dd(); P, nowy element R R R Podstawowe operacje na listach cyklicznych: PTR = Λ lista pusta Wstaw element Y z lewej strony: P new(element); info(p) Y; jeśli PTR=Λ to PTR link(p) P; wpp{ link(p) link(ptr); link(ptr) P; Wstaw element Y z prawej strony: Wstaw Y z lewej strony; PTR P; PTR Usuń z listy lewy element: jeśli PTR=Λ to niedomiar wpp{ P link(ptr); Y info(p); link(ptr) link(p); jeśli PTR=P to PTR Λ; delete(p); rzewa rzewo jest hierarchicznym ułożeniem danych. E. rzewo jest to zbiór T jednego lub więcej elementów zwanych węzłami, takich że:. istnieje jeden wyróżniony węzeł zwany korzeniem drzewa 2. pozostałe węzły (bez korzenia) są podzielone na m 0 rozłącznych zbiorów T,.., T m, z których każdy jest drzewem. rzewa T,.., T m są nazywane poddrzewami korzenia. Pierwszy obiekt zwany jest korzeniem, kolejne obiekty traktowane są jako jego potomstwo: węzły, liście węzły nie mające potomstwa. roga w drzewie sekwencja węzłów w drzewie odpowiadających przejściu w kierunku od korzenia do liścia. węzeł korzeń Pojęcia: rodzic liść przodek potomek rodzeństwo (dwa węzły są rodzeństwem, gdy mają tego samego ojca) droga rzewa binarne rzewo binarne jest skończonym zbiorem węzłów, który jest albo pusty, albo zawiera korzeń oraz dwa drzewa binarne. B E C Każdy węzeł przechowuje dwa wskaźniki: do lewego poddrzewa LLINK i prawego poddrzewa RLINK T jest wskaźnikiem do drzewa Jeśli T = Λ - drzewo puste Wpp T jest adresem korzenia drzewa, a LLINK(T) wskazuje lewe poddrzewo, RLINK(T) wskazuje prawe poddrzewo. B E T C Przechodzenie drzewa Jest to systematyczne przeglądanie węzłów w taki sposób, ze każdy węzeł jest odwiedzony dokładnie jeden raz. Przejście drzewa wyznacza porządek liniowy w drzewie. Sposoby przechodzenia drzewa binarnego: preorder (porządek przedrostkowy) inorder (porządek wrostkowy) postorder (porządek przyrostkowy) Rekurencyjna definicja porządków przechodzenia drzewa binarnego: Jeśli drzewo jest puste, stop Wpp wykonaj: Przechodzenie preorder Przechodzenie inorder Odwiedź korzeń Przejdź lewe poddrzewo Przejdź lewe poddrzewo Odwiedź korzeń Przejdź prawe poddrzewo Przejdź prawe poddrzewo Przechodzenie postorder Przejdź lewe poddrzewo Przejdź prawe poddrzewo Odwiedź korzeń Porządek preorder: B C E G H I Porządek inorder: B E G C H I Porządek postorder: B G E H I C B E C G H I

lgorytm: przechodzenie drzewa binarnego w porządku inorder Niech T będzie wskazuje na drzewo binarne. lgorytm korzysta z pomocniczego stosu S. K. Inicjalizowanie. Utwórz stos pusty S; P T (P jest pomocniczą zmienną wskaźnikową). K2. Sprawdzenie, czy P = Λ? Jeśli P = Λ, to K4. K3. S P (włóż P na stos S); Niech P LLINK(P); Idź do K2. K4. Jeśli stos S = Λ, koniec algorytmu; B C Wpp P S; K5. Odwiedzenie P. Odwiedź NOE(P); E P RLINK(P); Idź do K2. G H I Przykłady wykorzystania drzew: drzewiasta struktura algorytmów diagramy organizacyjne przedsiębiorstw, drzewa gry Sortowanie drzewiaste Rozważamy drzewo binarne każdy węzeł ma co najwyżej dwóch potomków, zwanych lewostronnym i prawostronnym. lgorytm sortowania drzewiastego:. przekształć listę wejściową w binarne drzewo poszukiwań T 2. obejdź drzewo T w porządku inorder i wypisz każdy element przy okazji drugich odwiedzin. Binarne drzewo poszukiwań T: każdy element binarnego drzewa poszukiwań ma tę własność, że jego lewostronne potomstwo jest mniejsze co do wartości od tego elementu, a prawostronne potomstwo jest większe. procedura obejdz_drzewo(t){ if(t==0) koniec; //jeśli drzewo T jest puste else{ obejdz_drzewo(lewe(t)); wypisz(korzen(t)); //wpisz element danych znajdujący się w korzeniu obejdz_drzewo(prawe(t)); Przykład sortowania drzewiastego (etap ) Budowa binarnego drzewa poszukiwań T 28 76 06 402 00 46 354 08 2 28 396 35 Procedura obejdz_drzewo(t) Przykład sortowania drzewiastego (2) 28 76 28 402 76 402 46 06 354 08 46 06 354 08 28 00 2 396 28 00 2 396 35 35 46 28 35 35 28 35 46 28 46 76 28 76 06 00 00 00 06 2 2 2 06 76 28 402 354 354 396 396 396 354 402 08 08 08 402 28 Bazy danych i bazy wiedzy Przykłady baz danych: dane finansowe i osobowe przedsiębiorstwa dane katalogowe biblioteki rezerwacja biletów lotniczych Podstawowe modele baz danych relacyjny organizacja danych w postaci tabel hierarchiczny organizacja danych w postaci drzew lub sieci (realizacja obiektowa) Rozwinięciem baz danych są bazy wiedzy