Abstraktní datové typy FRONTA

Podobné dokumenty
Homer. prvky. délka. přední 0 zadní 4. Použití fronty BUS STOP. 3 Lisa. 2 Bart. 4 Maggie. 1 Marge. Grafické znázornění předchozí animace:

Radomíra Duží L Datový typ množina

FRONTA. Podobně jako u zásobníku lze prvek z fronty vyjmout pouze za takové podmínky, že je na řadě. Avšak jeho hodnotu můžeme přečíst kdykoliv.

Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu

1. D Y N A M I C K É DAT O V É STRUKTUR Y

Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620

Zásobník (LIFO) Opakem zásobníku LIFO je fronta FIFO (First In, First Out první dovnitř, první ven)

Konstruktory a destruktory

Lineární spojový seznam (úvod do dynamických datových struktur)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Implementace binárního stromu směrníky

Binární vyhledávací stromy

1. Implementace funkce počet vrcholů. Předmět: Algoritmizace praktické aplikace (3ALGA)

Dynamické datové typy a struktury

Implementace slovníku bitovým vektorem

Anotace. Spojové seznamy, haldy. AVL-stromy, A-B stromy. Martin Pergel,

Datový typ prioritní fronta Semestrální práce z předmětu 36PT

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Datové struktury. alg12 1

Předmět: Algoritmizace praktické aplikace

Programování v C++, 2. cvičení

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

ADT prioritní fronta. Haldy. Další operace nad haldou. Binární halda. Binomické stromy. Časová složitost jednotlivých operací.

Binární vyhledávací strom. Proč binární? Vyhledávání

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

Základní datové struktury

Lineární datové struktury

ADT/ADS = abstraktní datové typy / struktury

Anotace. Pointery. Martin Pergel,

Tematický celek 03 - Cvičné příklady

Náznak ukázky syntaxe a sémantiky pro projekt. 1 Syntaktické prvky. Poslední aktualizace: 8.

Abstraktní datové typy

Vyhledávací stromy. Slouží jako pomůcka pro organizaci dat umožňující efektivní vyhledávání.

Algoritmizace prostorových úloh

Stromy, haldy, prioritní fronty

Amortizovaná složitost. Prioritní fronty, haldy (binární, d- regulární, binomiální, Fibonacciho), operace nad nimi a jejich složitost

Algoritmizace prostorových úloh

Dynamické datové struktury I.

O datových typech a jejich kontrole

Dynamické datové struktury IV.

Implementace aritmetického stromu pomocí směrníků

Spojové struktury. Spojová struktura (linked structure):

Cvičení 9 - Monitory. monitor m; var proměnné... procedure p; begin... end; begin inicializace; end;

TGH07 - Chytré stromové datové struktury

Semestrální práce 2 znakový strom

Spojový seznam. Jan Kybic.

Implementace LL(1) překladů

Základy algoritmizace. Hašování

Sada 1 - Základy programování

Programovací jazyk Pascal

Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově orientované programování.

Úvod do programovacích jazyků (Java)

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

Zadání k 2. programovacímu testu

součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

Programování v C++ 2, 7. cvičení

Syntaktická analýza. Implementace LL(1) překladů. Šárka Vavrečková. Ústav informatiky, FPF SU Opava

Datové typy a struktury

Řízení toku programu Programátor musí být schopen nějak ovlivňovat běh programu a k tomu má několik možností:

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

DATABÁZOVÉ A INFORMAČNÍ SYSTÉMY

Poslední nenulová číslice faktoriálu

Algoritmy výpočetní geometrie

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

Programování v C++ 3, 3. cvičení

Pokročilá algoritmizace amortizovaná složitost, Fibonacciho halda, počítačová aritmetika

Interpret jazyka IFJ2011

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2013/2014 Radim Farana. Obsah. Strom

Basic256 - úvod do programování Příklady. ing. petr polách

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

NMIN102 Programování /2 Z, Zk

Přednáška 3. Rekurze 1

Lineární datové struktury

Prioritní fronta, halda (heap), řazení

Definice uživatelského typu. Uživatelem definované typy. Součinové datové typy. Součtové datové typy. FLP - Uživatelem definované typy

Kolekce, cyklus foreach

9. přednáška - třídy, objekty

5 Rekurze a zásobník. Rekurzivní volání metody

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

ABSTRAKTNÍ DATOVÉ TYPY (ADT)

Matice sousednosti NG

Dynamické datové struktury III.

Rozklad problému na podproblémy

Da D to t v o é v ty t py IB111: Datové typy

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

autoři: Rudolf Bayer, Ed McCreight všechny vnější uzly (listy) mají stejnou hloubku ADS (abstraktní datové struktury)

Test z programování v jazyce VBA v rámci předmětu Počítače II Vzorová zadání a vypracování

Algoritmy a datové struktury

ROZHODOVACÍ PROCEDURY A VERIFIKACE PAVEL SURYNEK, KTIML

Algoritmy na ohodnoceném grafu

Základy algoritmizace c2005, 2007 Michal Krátký, Jiří Dvorský1/39

Volné stromy. Úvod do programování. Kořenové stromy a seřazené stromy. Volné stromy

ABSTRAKTNÍ DATOVÉ TYPY

CZ.1.07/1.5.00/

Tematická oblast: Programování 2 (VY_32_INOVACE_08_2_PR) Anotace: Využití ve výuce: Použité zdroje:

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

Základní datové struktury III: Stromy, haldy

Synchronizace Mgr. Josef Horálek

Transkript:

Abstraktní datové typy FRONTA Fronta je lineární datová struktura tzn., že ke každému prvku s výjimkou posledního náleží jeden následník a ke každému prvku s výjimkou prvního náleží jeden předchůdce. Do fronty se vkládají prvky na konci a odebírají se na začátku (např. fronta nakupujících v obchodě), prvky jsou rušeny ve stejném pořadí, v jakém jsou do fronty vkládány (první dovnitř-první ven). Obr. č. 1 ven dovnitř 1 2 Frontu můžeme implementovat buď pomocí pole nebo pomocí lineárního seznamu. V případě implementace lineární seznamem se pak jedná o dynamickou datovou strukturu. 1. Operace na frontě - CREATE(Q) - vytvoří prázdnou frontu Q - FRONT(Q) - vrátí první prvek fronty Q - APPEND(x, Q) - vloží prvek x na konec fronty Q - SERVE(Q) - vymaže první prvek z Q - EMPTY(S) - vrátí TRUE, je-li fronta prázdná, jinak vrátí False 1

2. Implementace lineárním seznamem Při implementaci fronty lineárním seznamem vkládáme nový prvek vždy za prvek poslední. Abychom nemuseli pokaždé procházet celým seznamem pomocí pomocného ukazatele, deklarujeme dva ukazatele, jeden bude ukazovat na první vložený prvek (zacatek) a druhý na prvek poslední (konec). Ukazatel posledního prvku ukazuje NIL. Obr. č. 2 Fronta-lineární seznam zacatek konec 1. 2. 3. 4. NIL Deklarace: type PFronta = ^fronta; Fronta = record cislo: Integer; dalsi: Fronta; var zacatek, konec: PFronta; a) Vytvoření prázdné fronty CREATE Fronta je prázdná pokud neobsahuje žádný prvek, začátek i konec nastavíme na NIL. Procedure CREATE(q: PFronta); zacatek konec zacatek:= nil; konec:= nil; nil 2

b) Ověření, zda je fronta prázdná EMPTY Abychom mohli provádět další operace s frontou, musíme zjistit zda je fronta prázdná, nebo zda obsahuje nějaký prvek. Vycházíme z předpokladu, že pouze pokud je fronta prázdná, tak začátek ukazuje na NIL. function Je_EMPTY: Boolean; // Je_EMPTY=> je prázdná result:=zacatek=nil c) Vložení nového prvku do fronty - APPEND V případě vložení nového prvku do fronty, musíme rozlišit zda se jedná o prázdnou frontu, nebo o frontu, která již nějaký prvek obsahuje. V prvním případě vkládáme prvek na začátek fronty, v tom druhém za prvek vložený do fronty naposled, označený ukazatelem konec viz. obr. č. 3. Procedure APPEND(i: Integer; var q:pfronta); new(q); q^.cislo:=i; if Je_EMPTY then q^.dalsi:=nil; fronty else zacatek:=q; konec:=q konec^.dalsi:=q; konec:=q; konec^.dalsi:=nil // vložení prvku na začátek v případě prázdné // vložení prvku na konec fronty 3

Obr. č. 4 - přidání prvku do fronty zacatek konec q 1. 2. 3. 4. 5. NIL d) Zrušení prvního prvku fronty SERVE Pokud fronta obsahuje pouze jeden prvek, zrušíme prvek na který ukazuje začátek. V opačném případě přiřadíme na začátek fronty pomocný ukazatel (q), ukazatel na začátek (zacatek) posuneme na další prvek a prvek na který ukazuje pomocný ukazatel zrušíme. procedure SERVE(q: PFronta); if not Je_EMPTY then if zacatek=konec then dispose(zacatek); zacatek:=nil; konec:=nil else q:=zacatek; zacatek:=zacatek^.dalsi; dispose(q); Obr. č. 5 - odebrání prvku z fronty zacatek konec 1. 2. 3. 4. 5. q NIL 4

e) První prvek fronty FRONT Funkce Front je velmi jednoduchá, protože známe první prvek fronty. Ukazuje na něj ukazatel zacatek. function Front: Integer; // vrátí hodnotu prvního prvku result:= zacatek^.cislo; f) Výpis fronty procedure TForm1.Button6Click(Ser: TObject); // výpis fronty var q:pfronta; Memo1.Lines.Clear; q:=zacatek; while q<>nil do Memo1.Lines.Add(IntToStr(q^.cislo)); q:=q^.dalsi procedure TForm1.Button3Click(Ser: TObject); // výpis vloženého prvku var q: PFronta; App(StrToInt(Edit1.Text),q); Button4Click(Ser); Button6Click(Ser); procedure TForm1.Button5Click(Ser: TObject); var q: PFronta; Serve(q); Button4Click(Ser); Button6Click(Ser); // vypíše frontu bez odebraného prvku 5

procedure TForm1.Button4Click(Ser: TObject); // vypíše hodnotu prvního prvku if not Je_EMPTY then Label2.Caption:=('První prvek má hodnotu '+IntToStr(FRONT)) else Label2.Caption:=('Fronta neobsahuje žádný prvek') 6