Wpisany przez Michał Knasiecki,
01 sierpnia 2005 22:56
Kolejka jest strukturą liniowo uporządkowanych danych w której dołączać nowe dane można jedynie na koniec kolejki a usuwać z początku. Procedura usunięcia danych z końca kolejki jest taka sama, jak w przypadku
stosu, z tą różnicą, że usuwamy dane od początku a nie od końca.
Pierwszy element (a dokładniej wskaźnik do jego miejsca w pamięci) musi zostać zapamiętany, by możliwe było usuwanie pierwszego elementu w czasie stałym O(1). Gdybyśmy tego nie zrobili, aby dotrzeć do pierwszego elementu należałoby przejść wszystkie od elementu aktualnego (czyli ostatniego), co wymaga czasu O(n).
Działanie na kolejce jest intuicyjnie jasne, gdy skojarzymy ją z kolejką ludzi np. w sklepie. Każdy nowy klient staje na jej końcu, obsługa odbywa się jedynie na początku.
Schemat kolejki wygląda następująco:
Przykład w JavaScript:
Obraz kolejki:
Pierwszy element (a dokładniej wskaźnik do jego miejsca w pamięci) musi zostać zapamiętany, by możliwe było usuwanie pierwszego elementu w czasie stałym O(1). Gdybyśmy tego nie zrobili, aby dotrzeć do pierwszego elementu należałoby przejść wszystkie od elementu aktualnego (czyli ostatniego), co wymaga czasu O(n).
Działanie na kolejce jest intuicyjnie jasne, gdy skojarzymy ją z kolejką ludzi np. w sklepie. Każdy nowy klient staje na jej końcu, obsługa odbywa się jedynie na początku.
Schemat kolejki wygląda następująco:
Przykład w JavaScript:
Obraz kolejki:
Implementacje
Autor | Język programowania | Komentarz | Otwórz | Pobierz | Ocena |
Kamil Dworak | C# | Visual Studio 2008 | .cs | .cs | ***** / 11 |
Michał Knasiecki | C/C++ | .cpp | .cpp | ***** / 16 | |
Marian | C/C++ | C++ z użyciem struktury jednokierunkowej | .cpp | .cpp | ***** / 18 |
Marian | C/C++ | C++ z użyciem struktury dwukierunkowej | .cpp | .cpp | ***** / 11 |
Kamil Dworak | Java | JDK 1.6 | .java | .java | ***** / 5 |
Tomasz Lubiński | JavaScript | .js | .js | ***** / 4 | |
Jakub Konieczny | Python | .py | .py | ***** / 5 |
Poprawiony: 29 października 2012 11:05