Wstęp do programowania. Stosy i kolejki. Piotr Chrząstowski-Wachtel

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

E S - uniwersum struktury stosu

Struktury danych (I): kolejka, stos itp.

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

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

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

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

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

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

Algorytmy i Struktury Danych.

Programowanie i struktury danych 1 / 44

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

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

Wstęp do programowania. Procedury i funkcje. Piotr Chrząstowski-Wachtel

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych.

Programowanie obiektowe

Struktury danych: stos, kolejka, lista, drzewo

Ćwiczenie laboratoryjne. Oprogramowanie i badanie stosu lub kolejki w środowisku Visual Basic 2005

Algorytmy i struktury danych. wykład 5

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Wstęp do programowania. Dziel i rządź. Piotr Chrząstowski-Wachtel

Podstawowe struktury danych

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

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

Informatyka 1. Przetwarzanie tekstów

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

Algorytmy i struktury danych

Teoretyczne podstawy informatyki


Wstęp do programowania. Zastosowania stosów i kolejek. Piotr Chrząstowski-Wachtel

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

Algorytmy i struktury danych

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

Algorytmy i Struktury Danych

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

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Struktury danych. przez użytkownika, jak to ma miejsce w przypadku zwykłych zmiennych statycznych.

Wstęp do programowania. Drzewa podstawowe techniki. Piotr Chrząstowski-Wachtel

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

Listy, kolejki, stosy

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

Temat: Struktury danych do reprezentacji grafów. Wybrane algorytmy grafowe.

Język programowania PASCAL

Porządek symetryczny: right(x)

2:8,7 3:9,4 / \ / \ / \ / \ 4:7,3 5:8 6:9,2 7:4

Wstęp do Programowania potok funkcyjny

Technologie Informatyczne Wykład VII

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

Wstęp do programowania

1) Grafy eulerowskie własnoci algorytmy. 2) Problem chiskiego listonosza

Instrukcje podsumowanie. Proste: - przypisania - wejścia-wyjścia (read, readln, write, writeln) - pusta - po prostu ; (średnik) Strukturalne:

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

Dynamiczne struktury danych

Wstęp do programowania. Różne różności

Zofia Kruczkiewicz, Algorytmu i struktury danych, Wykład 14, 1

Terminarz rozgrywek Ekstraklasy w sezonie 2016/2017

Sortowanie topologiczne skierowanych grafów acyklicznych

Podstawy informatyki 2

Obliczenia na stosie. Wykład 9. Obliczenia na stosie. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację.

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

Programowanie obiektowe

Przykładowe B+ drzewo

Ingerencja w kod systemu operacyjnego (przerwania) Programowanie na niskim poziomie (instrukcje specjalne) Trudności implementacyjne (alg.

Algorytmy i Struktury Danych.

synchronizacji procesów

synchronizacji procesów

Wstęp do Programowania potok funkcyjny

Lista 5 Typy dynamiczne kolejka

Algorytmy i Struktury Danych.

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

Podstawy informatyki 2. Podstawy informatyki 2. Wykład nr 2 ( ) Plan wykładu nr 2. Politechnika Białostocka. - Wydział Elektryczny

Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację.

Wstęp do Programowania potok funkcyjny

Marcin Matusiak i Łukasz Stasiak

Drzewa podstawowe poj

Sztuczna Inteligencja i Systemy Doradcze

Algorytmy i struktury danych

Podstawy Programowania. Listy i stosy

Programowanie obiektowe

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

Programowanie w VB Proste algorytmy sortowania

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

20. Pascal i łączenie podprogramów Pascala z programem napisanym w C

FUNKCJA REKURENCYJNA. function s(n:integer):integer; begin if (n>1) then s:=n*s(n-1); else s:=1; end;

INFORMATYKA DANE.

Stos LIFO Last In First Out

Wprowadzenie do Sztucznej Inteligencji

Wprowadzenie do Sztucznej Inteligencji

Etap 2 - Budowa interfejsu. typedef struct ELEMENT* stos; struct ELEMENT { dane Dane; stos Nastepny; }; struct kolejka { stos Poczatek, Koniec; };

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Wstęp do Programowania potok funkcyjny

Wykład 6. Dynamiczne struktury danych

Struktury dynamiczne

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)

Lista, Stos, Kolejka, Tablica Asocjacyjna

PODSTAWY INFORMATYKI wykład 6.

Dynamiczne struktury danych

Transkrypt:

Wstęp do programowania Stosy i kolejki Piotr Chrząstowski-Wachtel

Stosy Stosy elementów ze zbioru A, to struktury danych, które umożliwiają wykonanie następujących operacji i funkcji {var x:typa; s:stack of typa}: Empty(s) czy stos s jest pusty? Init(s) utwórz pusty stos s Push(s,x) włóż na stos s wartość x Pop(s,x) zdejmij ze stosu s element i przypisz go x ==================================== Top(s,x) podaj wartość x na szczycie stosu s Full(s) czy stos s jest pełny? Clear(s) wyczyść stos s 2

Kolejki Kolejki elementów ze zbioru A, to struktury danych, które umożliwiają wykonanie następujących operacji i funkcji {var x:typa; k:kolejka of typa}: Pusta(k) czy kolejka k jest pusta? TwórzPustą(k) utwórz pustą kolejkę k Wstaw(k,x) włóż do kolejki k wartość x Pobierz(k,x) usuń z kolejki k element i przypisz go x ======================================= Pierwszy(k,x) podaj wartość x na początku kolejki k Pełna(k) czy kolejka k jest pełna? Usuń(k) wyczyść kolejkę k 3

Implementacja tablicowa stosu Type stacka = record T :array[1..n] of typa; top:integer Zakładamy, że stos ma co najwyżej n elementów typu A przechowywanych w tablicy T oraz że top jest indeksem pierwszego wolnego miejsca w tablicy na kolejny element. 4

Implementacja tablicowa stosu function Empty(const S:stackA):Boolean; Empty:= S.top=1 procedure Init(var S:stackA); S.top:=1 5

Implementacja tablicowa stosu procedure Push(var S:stackA; x:typa); S.T[S.top]:=x; Inc(S.top) procedure Pop(var S:stackA; var x:typa); Dec[S.top]; x:=s.t[s.top] 6

Implementacja tablicowa stosu procedure Top(const S:stackA; var x:typa); x:=s.t[s.top-1] function Full(const S:stackA):Boolean; Full:=S.top>n procedure Clear(var S:stackA); S.top:=1 {to samo co Init} 7

Dwa stosy w jednej tablicy Często stosujemy implementację dwóch stosów w jednej tablicy: można je oddzielnie przechowywać z obu końców (procedury wstawiania i usuwania są dualne). Procedura Pełny wymaga porównania obu wskażników wierzchołka stosu. 8

Implementacja listowa stosu type typa=integer; stacka=listaa; listaa=^record w:typa; nast:listaa...czyli zwykła lista elementów typu typa. 9

Implementacja listowa stosu function Empty(const S:stackA):Boolean; Empty:= S=nil procedure Init(var S:stackA); S:=nil 10

Implementacja listowa stosu procedure Push(var S:stackA; x:typa); var pom:stacka; new(pom); pom^.nast:=s; pom^.w:=x; S:=pom {Dodajemy nowy element na początku listy} 11

Implementacja listowa stosu procedure Pop(var S:stackA; var x:typa); var pom:stacka; pom:=s; x:=s^.w; S:=S^.nast; dispose(pom) {Usuwamy pierwszy element listy} 12

Implementacja listowa stosu procedure Top(var S:stackA; x:typa); x:=s^.w function Full(const S:stackA):Boolean; Full:=MaxAvail < sizeof(stacka^) 13

Implementacja listowa stosu procedure Clear(var S:stackA); var dummy:typa; while not Empty(S) do Pop(S,dummy) 14

Implementacja tablicowa kolejki Type kolejkaa = record T :array[0..n] of typa; pocz,kon:integer Zakładamy, że kolejka ma co najwyżej n elementów typu A przechowywanych w tablicy T. Indeksy pocz i kon odpowiadają odpowiednio pierwszemu elementowi w kolejce oraz pierwszemu wolnemu miejscu w tablicy na kolejny element. 15

Implementacja tablicowa kolejki Kolejka w tablicy 8 54 15 12 pocz kon 16

Implementacja tablicowa kolejki Użyteczna funkcja: function Next(j:Integer):Integer; if j=n then Next:=0 else Next:=j+1 {lub j:=j mod n + 1, co jest może i zgrabniejsze, ale droższe niż if } 17

Implementacja tablicowa kolejki function Pusta(const k:kolejkaa):boolean; Empty:= k.pocz=k.kon procedure TwórzPustą(var k:kolejkaa); k.pocz:=0; k.kon:=0; 18

Implementacja tablicowa kolejki procedure Wstaw(var k:kolejkaa; x:typa); k.t[k.kon]:=x; k.kon:=next(k.kon) procedure Pobierz(var k:kolejkaa; var x:typa); x:=k.t[k.pocz]; k.pocz:=next(k.pocz) 19

Implementacja tablicowa kolejki procedure Pierwszy(const k:kolejkaa; var x:typa); x:=k.t[k.pocz] function Pełna(const k:kolejkaa):boolean; Pełna := k.pocz=next(k.kon) procedure Usuń(var k:kolejkaa); k.kon:=k.pocz 20

Implementacja listowa kolejki type kolejkaa=record pocz,kon:listaa; k pocz kon 55 44 33 72 21

Implementacja listowa kolejki function Pusta(const k:kolejkaa):boolean; Empty:= k.pocz=nil procedure TwórzPustą(var k:kolejkaa); k.pocz:=nil; 22

Implementacja listowa kolejki procedure Wstaw(var k:kolejkaa; x:typa); if k.pocz=nil then new(k.pocz); k.pocz^.w:=x; k.kon:=k.pocz end else WstawZa(x,k.kon); k.kon:=k.kon^.nast end 23

Implementacja listowa kolejki procedure Pobierz(var k:kolejkaa; var x:typa); var pom:listaa; x:=k.pocz^.w; pom:=k.pocz; if k.pocz=k.kon then k.pocz:=nil else k.pocz:=k.pocz^.nast; dispose(pom) 24

Implementacja listowa kolejki procedure Pierwszy(const k:kolejkaa; var x:typa); x:=k.pocz^.w function Pełna(const k:kolejkaa):boolean; Pełna := MaxAvail < `sizeof(listaa^) 25

Implementacja listowa kolejki procedure Clear(var k:kolejkaa); var dowol:typa; while not Pusta(k) do Pobierz(k,dowol) 26

Implementacja listowa kolejki Można kolejkę ładnie zaimplementować w liście cyklicznej. Wtedy wskaźnik do listy jest ostatnim elementem kolejki. Wstawiamy za niego, modyfikując go, a pierwszy element jest zawsze następnikiem tego wskaźnika. 27