Skip to content

Archives

  • styczeń 2022
  • grudzień 2021
  • listopad 2021
  • październik 2021
  • wrzesień 2021

Categories

  • Brak kategorii
Trend RepositoryArticles and guides
Articles

Struktury danych: Stacks and Queues – Designveloper

On 19 grudnia, 2021 by admin
  • Why Stacks and Queues?
  • Czym jest stos?
  • Analiza złożoności
  • Zastosowania stosów
  • Co to jest kolejka?
  • Analiza złożoności
  • Zastosowania kolejek

Why Stacks and Queues?

W przeciwieństwie do tablicy, w stosach i kolejkach, nie ma operacji dostępu losowego (nie możemy uzyskać dostępu do elementu bezpośrednio za pomocą 'indeksu’). Zwykle mamy mniej metod/działań, które możemy wykonać, takich jak push(), pop(), peek(), enqueue(), dequeue(), z których wszystkie zajmują się wyłącznie elementem na początku lub końcu struktury danych.

Struktury danych

Ale…

Pytanie: To brzmi tak ograniczająco, ponieważ możemy uzyskać dostęp tylko do pierwszego lub ostatniego elementu w strukturze danych. Dlaczego mielibyśmy kiedykolwiek chcieć używać czegoś takiego? Dlaczego po prostu nie użyjemy tablic dla większej elastyczności?

Odpowiedź: Stosy i kolejki są zazwyczaj „strukturami danych wyższego poziomu” zbudowanymi na wierzchu struktur niższego poziomu (tablica lub lista połączona), aby ograniczyć operacje, które możemy na nich wykonać. To jest korzyść, jeśli chcemy mieć ograniczony dostęp.

Mając tę ograniczoną zdolność na strukturze danych jest zaletą, ponieważ możemy kontrolować, kto używa tej struktury danych, która wykonuje tylko właściwe operacje, które są wydajne. Na przykład, nie będziemy musieli się zastanawiać, czy ktoś losowo wstawił element do środka naszej listy, psując niektóre inwarianty. Uratowało nas to przed wieloma problemami. Przyjrzyjmy się im dokładniej.

Czym jest stos?

Czym jest stos

Stos jest jednokońcową liniową strukturą danych, która modeluje rzeczywisty stos poprzez dwie podstawowe operacje, mianowicie push i pop.

Na poniższym obrazku widzimy, że jeden element danych jest usuwany z wierzchołka stosu, a drugi jest do niego dodawany. Istnieje wskaźnik górny wskazujący na blok na szczycie stosu. Dzieje się tak dlatego, że elementy w stosie zawsze są usuwane i dodawane na wierzchołek stosu. To zachowanie jest powszechnie znane jako LIFO (Last In First Out).

Operacje na stosie

Poniżej przedstawiono 2 podstawowe operacje, które można wykonać na stosie.

  • Funkcja Push: Dodaj element na wierzchołek stosu
  • Funkcja Pop: Usuń górny element (i może go zwrócić)

Wizualizacja podstawowych operacji stosu

Ponadto, dla stosu przewidziano następujące dodatkowe funkcje w celu sprawdzenia jego stanu.

  • Funkcja Peek: Zwraca najwyższy element stosu bez jego usuwania lub kasowania
  • Funkcja isEmpty: Sprawdź, czy stos jest pusty, czy nie
  • Funkcja isFull: Sprawdź, czy stos jest pełny, czy nie

Wszystko operuje na wierzchołku stosu. Nie mamy dostępu do niczego innego poza wierzchołkiem. Jest to krytyczne w zrozumieniu, jak to działa.

Analiza złożoności

Poniższa tabela złożoności zakłada, że zaimplementowałeś stos za pomocą listy połączonej

Zastosowania stosów

Kiedy i gdzie jest używany stos? Używamy stosu w programowaniu, nawet tego nie zauważając, oto kilka przykładów:

  • Może być używany do oceny wyrażeń (np.: algorytm shunting-yard do parsowania i oceny wyrażeń matematycznych).
  • Może być używany do implementacji wywołań funkcji w programowaniu rekurencyjnym.
  • Używany przez mechanizmy cofania w edytorach tekstu do cofania napisanego przez nas tekstu (Cmd + Z w Mac OS i Ctrl + Z w Windows)
  • Używany w przeglądarce do nawigacji w tył i do przodu
  • Może być używany do wyszukiwania w głąb (DFS) na grafie
  • Używany za kulisami do obsługi rekurencji poprzez śledzenie poprzednich wywołań funkcji

Co to jest kolejka?

Co to jest kolejka

Kolejka jest również liniową strukturą danych, która modeluje kolejki świata rzeczywistego poprzez posiadanie dwóch podstawowych operacji, mianowicie enqueue (możemy myśleć o tym jako o „wejściu do kolejki”) i dequeue (możemy również myśleć o tym jako o „usunięciu z kolejki”). Struktura ta została nazwana „kolejką” ze względu na fakt, że przypomina prawdziwą kolejkę – (gdzie ludzie czekają w kolejce).

Każda kolejka ma przód i tył (czasami nazywany „tyłem”). Przez tył wstawiamy elementy, a przez przód je usuwamy.

Kolejka jest strukturą FIFO (First In First Out – element umieszczony jako pierwszy może być dostępny jako pierwszy), którą można powszechnie spotkać w wielu językach programowania.

Operacje kolejkowe

Poniżej przedstawiono 3 podstawowe operacje, które można wykonać na kolejce.

  • Funkcja Enqueue: Dodaj element do końca kolejki
  • Funkcja Dequeue: Usuń element z początku kolejki
  • Funkcja Peeking: Podglądanie wartości z przodu kolejki bez jej usuwania

Analiza złożoności

Jak widzimy na obrazku, operacje enqueuing i dequeuing zajmują stały czas O(1). Jednak sprawdzenie, czy element jest zawarty w kolejce jest liniowo czasowe O(n), ponieważ potencjalnie musielibyśmy przeskanować wszystkie elementy.

Wewnętrznie istnieje również usuwanie elementów (nie dequeuing). Wymaga to czasu liniowego, ponieważ musimy przeskanować wszystkie elementy w najgorszym przypadku.

Zastosowania kolejek

  • Używane do zarządzania wątkami w wielowątkowości.
  • Może być używane do efektywnego śledzenia x ostatnio dodanych elementów
  • Zarządzanie żądaniami serwera WWW, gdzie chcemy, aby pierwszeństwo było pierwsze. Na przykład: W danym momencie nasz serwer WWW może obsłużyć tylko maksymalnie 50 osób jednocześnie.
Aplikacja kolejki

Jeśli w krótkim czasie przyjdzie 70 żądań, to nie będziemy w stanie obsłużyć ich wszystkich. Dlatego webserver wyskakuje z kolejki tylko 50 żądań, a pozostałe 20 wstrzymuje. Kiedy webserwer kończy przetwarzanie żądania, odkłada następne do obsłużenia i robi to tak długo, aż kolejka jest pusta.

  • Breadth-first search (BFS) graph traversal
  • Używane do implementacji systemów kolejkowania (np.: kolejki priorytetowe)
  • Używane w drukarce sieciowej: Drukarka może obsłużyć tylko jedno żądanie w tym samym czasie. Jeśli więc przyjdą inne żądania, gdy drukarka jest zajęta, program zarządzający drukarką nie odrzuci tych żądań, ale umieści je w kolejce oczekujących na wykonanie. Pierwszy wniosek zostanie obsłużony jako pierwszy (FIFO).

Mamy nadzieję, że ten artykuł dał ci obraz stosów i kolejek w umyśle. Nie zapomnij zasubskrybować naszego bloga i śledzić Designvelopera na Facebooku, Twitterze i LinkedIn.

A oto inne artykuły, które mogą Ci się spodobać:

  • Co to jest architektura aplikacji internetowych?
  • Struktury danych i ich zastosowania
  • Co to jest notacja Big O?

.

Dodaj komentarz Anuluj pisanie odpowiedzi

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Archiwa

  • styczeń 2022
  • grudzień 2021
  • listopad 2021
  • październik 2021
  • wrzesień 2021

Meta

  • Zaloguj się
  • Kanał wpisów
  • Kanał komentarzy
  • WordPress.org
  • DeutschDeutsch
  • NederlandsNederlands
  • SvenskaSvenska
  • DanskDansk
  • EspañolEspañol
  • FrançaisFrançais
  • PortuguêsPortuguês
  • ItalianoItaliano
  • RomânăRomână
  • PolskiPolski
  • ČeštinaČeština
  • MagyarMagyar
  • SuomiSuomi
  • 日本語日本語

Copyright Trend Repository 2022 | Theme by ThemeinProgress | Proudly powered by WordPress