Struktury danych: Stos i Kolejka

Posted by Przemysław Owsianik on 2021-10-02
<h2>Stos</h2> <p>Kolejną, podstawową strukturą danych, która znajduje częste zastosowanie, jest stos (ang. stack). Jest to liniowa struktura danych, którą można zaimplementować, bazując tak na tablicy jak i na liście. Mimo tego, że „z zewnątrz” tablica i lista to struktury w miarę do siebie podobne, stos znacznie się od nich różni. Czym?</p> <p><b>Krótka charakterystyka:</b></p> <p>Nazwa ‚stos’ nie została nadana przypadkowo. W danym momencie tylko jeden z elementów przechowywanych na stosie jest dostępny – ostatni dodany. Z tego względu mówi się, że stos jest strukturą typu <b>LIFO </b>(Last In First Out). Ostatni dodany staje się pierwszym (gdzieś już to słyszeliśmy ;)) ściąganym ze stosu.</p> <p><b>Sposoby implementacji:</b></p> <p>Jeżeli chcemy zaimplementować stos na bazie&nbsp;listy, możemy zrobić to w ten sposób, że częścią składową obiektu stosu jest lista, której pierwszy węzeł wskazuje na ostatnio dodany element na stosie. Należy pamiętać, że wraz z tą implementacją Stos przejmuje praktycznie wszelkie zalety i wady listy. Implementacja ta jest prosta, ale wydajnościowo odpowiada liście. Stos możemy zaimplementować też na bazie&nbsp;tablicy.</p> <p>Stos możemy wyobrażać sobie w taki sposób:</p> <img src="/static/img/blog/stack-227x300.png" alt="" class=" postImage" /> <p><b>Podstawowe operacje:</b></p> <ol> <li>&nbsp; Umieszczanie elementu na stosie(Push): Wstawiamy element na „szczyt” stosu.&nbsp;&nbsp;</li> <li>&nbsp; Ściąganie elementu ze stosu(Pop): Usuwamy (i zwracamy) element ze szczytu.&nbsp;&nbsp;<br></li> </ol> <h2>Kolejka</h2> <p>Kolejka(ang. queue) jest bardzo podobna do stosu. Różni się jednak od niego w pewnych detalach.</p> <p><b>Krótka charakterystyka:</b></p> <p>Podobnie jak w przypadku stosu, nazwa „Kolejka” doskonale obrazuje działanie tej struktury danych. Pierwszy element, który „stanął” w kolejce, jest pierwszym, który z niej wyjdzie. Natomiast każdy nowy element musi stanąć na jej końcu.Kolejka jest więc nazywana strukturą typu&nbsp;<b>FIFO</b>(First In First Out).&nbsp;&nbsp;</p> <img src="/static/img/blog/Queue.png" alt="" class=" postImage" /> <p><b>Sposoby implementacji:</b></p> <p>Kolejkę implementujemy w sposób podobny do stosu. Bazą również może być lista lub tablica.</p> <p><b>Kolejka priorytetowa:</b></p> <p>Jest to wariant kolejki, gdzie elementy są wstawiane, według swojego priorytetu. Element o najwyższym priorytecie znajduje się na końcu (czyli najbliżej „wyjścia”) kolejki.</p>