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

Podobne dokumenty
E S - uniwersum struktury stosu

Algorytmy i Struktury Danych. Anna Paszyńska

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

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

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

Lista, Stos, Kolejka, Tablica Asocjacyjna

Programowanie obiektowe

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Kiedy potrzebne. Struktura (rekord) Struktura w języku C# Tablice struktur. struktura, kolekcja

Wstęp do programowania

Algorytmy i Struktury Danych.

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

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

Monitory. Jarosław Kuchta

Algorytmy i Struktury Danych.

Podstawy Programowania 2 Kolejki i ich zastosowania. Plan. Kolejki i ich klasyfikacja. Kolejki i ich klasyfikacja Kolejki dwustronne. Notatki.

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)

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

Marcin Matusiak i Łukasz Stasiak

TEMAT : KLASY DZIEDZICZENIE

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

Podstawowe struktury danych

Algorytmy i Struktury Danych.

. Podstawy Programowania 2. Kolejki i ich zastosowania. Arkadiusz Chrobot. 21 marca 2016

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

Dynamiczne struktury danych

Przychodnia 0. Stwórz projekt aplikacja konsolowa lub WPF (przemyśl wybór, bo zmiana może być czasochłonna). 1. Stwórz abstrakcyjną klasę Osoba.

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

Programowanie komputerowe. Zajęcia 4

Wykład 7 Abstrakcyjne typy danych słownik (lista symboli)

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

Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać)

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

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Struktury danych: stos, kolejka, lista, drzewo

Lista dwukierunkowa - przykład implementacji destruktorów

Projektowanie klas c.d. Projektowanie klas przykład

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz


Algorytmy i Struktury Danych.

Programowanie w języku C++

Lista 5 Typy dynamiczne kolejka

Struktury. Przykład W8_1

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

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

Programowanie i struktury danych 1 / 44

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

Stos LIFO Last In First Out

STL: Lekcja 1&2. Filozofia STL

Listy, kolejki, stosy

Wykłady opracowane zostały w oparciu o materiały prof. dr hab. Jerzego Weresa. Poznań 2009/2010 Algorytmy i struktury danych Krzysztof Nowakowski 2

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Klasy i obiekty cz II

Programowanie i struktury danych

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

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

Programowanie obiektowe

Wykład 4: Klasy i Metody

. Podstawy Programowania 2. Algorytmy dfs i bfs. Arkadiusz Chrobot. 2 czerwca 2019

Algorytm DFS Wprowadzenie teoretyczne. Algorytm DFS Wprowadzenie teoretyczne. Algorytm DFS Animacja. Algorytm DFS Animacja. Notatki. Notatki.

Język ludzki kod maszynowy

W powyższym kodzie utworzono wyliczenie dni tygodnia.

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Operatory na rzecz typu TString

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

#include <iostream.h> #include <conio.h>

Programowanie 2. Język C++. Wykład 3.

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Język C++ wykład VIII

. Podstawy Programowania 2. Algorytmy z nawrotami. Arkadiusz Chrobot. 9 czerwca 2019

Temat: Dynamiczne liniowe struktury danych - stos, kolejka, lista. 1. Wady i zalety struktury tablicy

Pola i metody statyczne. Klasy zawierające pola i metody statyczne

Algorytmy i Struktury Danych.

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Programowanie obiektowe

Algorytmy i język C++

Wstęp do programowania 2

STRUKTURY DANYCH. Janusz Marecki

Szablony funkcji i szablony klas

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Podstawy Programowania 2 Algorytmy z nawrotami. Plan. Wstęp

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

Zaawansowane programowanie w C++ (PCP)

Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )

Wprowadzenie do szablonów klas

Różne właściwości. Różne właściwości. Różne właściwości. C++ - klasy. C++ - klasy C++ - KLASY

Struktury danych (I): kolejka, stos itp.

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

Dynamiczne struktury danych

Programowanie obiektowe i C++ dla matematyków

Szablony klas, zastosowanie szablonów w programach

Programowanie obiektowe

Narzędzia informatyczne w językoznawstwie

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski.

Komputerowe systemy na rynkach finansowych. wykład 5. MQL4 - funkcje operujące na obiektach wykresu

Języki programowania imperatywnego

Podstawy programowania w języku C++

Transkrypt:

KOLEJKA (QUEUE) (lista fifo first in, first out) Kolejki są listami, których elementy można wstawiać z jednego końca (rear-tył) a usuwać z drugiego (front - przód). Operacje: 1. MAKENULL(Q) czyni kolejkę pustą 2. FRONT(Q) zwraca pierwszy element kolejki 3. ENQUEUE(x,Q) wstaw x do kolejki 4. DEQUEUE(Q) usuwa pierwszy element z kolejki 5. EMPTY(Q) zwraca true gdy kolejka jest pusta, w przeciwnym wypadku zwraca false Przykład Załóżmy, że wstawiliśmy element a. Teraz chcemy wstawić kolejny element b. Ponieważ do kolejki wstawiamy zawsze na koniec, więc element b znajdzie się na końcu za elementem a. Gdybyśmy chcieli wstawić kolejny element c, to znajdzie się on na końcu za elementem b. Kolejka wygląda następująco: a b c Możemy usunąć tylko element z przodu kolejki (on ma pierwszeństwo, pozostałe elementy muszą czekać na swoją kolej). Tak więc możemy usunąć tylko element a. Kolejka po usunięciu elementu a wygląda następująco: b c Teraz element b jest pierwszym elementem możemy go usunąć

Wskaźnikowa implementacja kolejki z wykorzystaniem operacji na ADT List ) typedef int elementtype; typedef struct celltype Elementtype element; Celltype * next; Typedef Celltype * position; class Lista protected : position l;//wskaźnik do pierwszego elementu public: void Insert(elementtype x, position p); void Delete(position p); elementtype Retrieve(position p); position Locate(elementtype x); position First(); position Next(position p); position Previous(position p); position END(); ; Tworzymy obiekt tej klasy: List *Q=new Lista; Gdy mamy już obiekt Q typu Lista, chcemy na nim wykonać żądane operacje: Front: Enqueue: Dequeue, Makenull, Empty

FRONT zwraca pierwszy element kolejki Q->Retrieve(Q->First()); ENQUEUE(x) wstaw x do kolejki Q->Insert(x,Q->End()) DEQUEUE(Q) usuwa pierwszy element z kolejki Q->Delete(Q->First()) Empty, Makenull bez zmian

Tablicowa implementacja kolejki Kolejkę można zaimplementować jako listę zrealizowaną tablicowo, ale jest to bardzo kosztowne. (usuwając element trzeba przesunąć wszystkie pozostałe elementy). Efektywniejszym rozwiązaniem jest traktowanie tablicy jako koło, w którym pierwszy element tablicy jest następnym po ostatnim. Wtedy dołączenie elementu do kolejki powoduje przesunięcie rear o jedną pozycję zgodnie z ruchem wskazówek zegara.

Natomiast usunięcie elementu powoduje przesuniecie front o jedną pozycję zgodnie z ruchem wskazówek zegara. Zakładamy, że kolejka może zawierać tylko maxlen-1 elementów ( żeby rozróżnić kolejkę pustą od pełnej )

typedef int elementtype; typedef kolejka = struct elementtype Queue [maxlenght]; int front; int rear; Kolejka jest pusta, jeżeli rear jest tuż za front, na przykład: Kolejka jest pełna, jeżeli pomiędzy rear a front jest jedena pusta komórka. Na przykład:

const maxlength=50; typedef int elementtype; typedef int position; class Kolejka protected : elementtype Queue[maxlength]; position Front; // Indeks elementu czołowego position Rear; // Indeks ostatniego elementu public: Kolejka(); ~Kolejka(); int AddOne(int i); void Init(); void Enqueue(elementtype x); void Dequeue(); elementtype FrontElem(); void Makenul(); bool Empty(); ;

Operator Init powinien tworzyć obiekt oraz inicjować zmienne front i rear tak, aby kolejka była pusta. Przyjmujemy front=0, rear=maxlenght-1 // Zainicjuj kolejkę void Kolejka::Init1() Front=0; Rear= maxlength-1; Funkcja AddOne zwiększa o jeden zgodnie z relacją modulo. // Do 'i' dodaj '1' modulo Maxlength int Kolejka::AddOne(int i) return ((i + 1) % maxlength); //dzielenie modulo, daje resztę z dzielenia

Operacja EMPTY zwraca wartość true, gdy kolejka jest pusta, zwraca wartość false, gdy nie jest pusta // Sprawdź, czy kolejka jest pusta bool Kolejka::Empty() return (AddOne(Rear) == Front);

Operacja Enqueue wstawia element do kolejki (wstawia na koniec). Przykład. Załóżmy, że mamy kolejkę pustą wyglądającą następująco: Chcemy wstawić element x. W tym celu wołamy metodę O->Enqueue(x); Kolejka będzie wyglądać następująco

Po wywołaniu Q->Enqueue(y): Po wywołaniu Enqueue(z):

Metoda Enqueue powinna: -sprawdzać, czy jest miejsce w kolejce (czy kolejka nie jest pełna) Kolejka jest pełna, gdy: ( AddOne(AddOne(Rear)) = Front) - gdy nie jest pełna, to wstawiać element Wstawienie elementu polega na: Zaktualizowaniu pola rear (pole to wskazuje na ostatnio wstawiony element, chcemy, aby wskazywał na pierwszą wolną komórkę) Wstawieniu elementu void Kolejka::Enqueue(elementtype x) if ( AddOne(AddOne(Rear))!= Front) jest pełna Rear = AddOne(Rear); Queue[Rear] = x; // Kolejka nie

Operacja Dequeue usunięcie elementu z kolejki. Uwaga: Usuwamy element z początku kolejki!!! Załóżmy, że mamy kolejkę: Po wywołaniu metody Dequeue mamy:

Po kolejnym wywołaniu metody Dequeue mamy: Metoda Dequeue powinna: - sprawdzić, czy kolejka nie jest pusta - jeśli nie jest pusta, to zmodyfikować: Front void Kolejka ::Dequeue() if (!Empty()) Front= AddOne(Front);

Pozostałe operacje: // Zwróć pierwszy element z kolejki. Kolejka::FrontElem() if (!Empty()) return Queue[Front]; // Sprawdź, czy kolejka jest pusta bool Kolejka::Empty() return (AddOne(Rear) == Front); void Kolejka::Makenul() Front=0; Rear= maxlength-1;