Zalecane, 2024

Wybór Redakcji

Różnica między stosem a kolejką

Stack i Queue są nieprostymi strukturami danych. Główne różnice między stosem a kolejką są takie, że stos używa metody LIFO (last in first out) do uzyskiwania dostępu i dodawania elementów danych, podczas gdy kolejka używa metody FIFO (First in first out) do uzyskiwania dostępu i dodawania elementów danych.

Stos ma tylko jeden koniec otwarty do popychania i poppingu elementów danych z drugiej strony Kolejka ma oba końce otwarte do zagnieżdżania i odkładania elementów danych.

Stos i kolejka to struktury danych używane do przechowywania elementów danych i są oparte na rzeczywistych odpowiednikach świata. Na przykład stos jest stosem płyt CD, na których można wyjąć i włożyć CD na wierzch stosu płyt CD. Podobnie, kolejka jest kolejką do biletów do teatru, gdzie osoba stojąca na pierwszym miejscu, tj. Przednia strona kolejki zostanie obsłużona jako pierwsza, a nowa osoba pojawiąca się pojawi się w tylnej części kolejki (tylny koniec kolejki).

Wykres porównania

Podstawa do porównaniaStosKolejka
Zasada działaniaLIFO (Last in First out)FIFO (pierwsze weszło pierwsze)
StrukturaTen sam koniec służy do wstawiania i usuwania elementów.Jeden koniec służy do wstawiania, tj. Tylny koniec, a drugi koniec służy do usuwania elementów, tj. Przedniego końca.
Liczba użytych wskaźnikówJedenTwo (w prostym przypadku kolejki)
Operacje wykonaneNaciśnij i popZdejmij i zdejmij
Badanie pustego stanuPoczątek == -1Przód == -1 || Przód == Tył + 1
Badanie pełnej kondycji
Top == Max - 1Tył == Max - 1
WariantyNie ma wariantów.Ma warianty takie jak cykliczna kolejka, kolejka priorytetowa, podwójnie zakończona kolejka.
RealizacjaProstszeStosunkowo skomplikowane

Definicja stosu

Stos to nieprosta liniowa struktura danych. Jest to uporządkowana lista, w której dodawany jest nowy element, a istniejący element jest usuwany tylko z jednego końca, zwanego wierzchołkiem stosu (TOS). Ponieważ usuwanie i wstawianie do stosu odbywa się od góry stosu, ostatni dodany element będzie pierwszym, który zostanie usunięty ze stosu. Z tego powodu stos jest nazywany listą typu "pierwsze weszło-pierwsze wyszło" (LIFO).

Zauważ, że elementem często dostępnym w stosie jest najwyższy element, podczas gdy ostatni dostępny element znajduje się na dole stosu.

Przykład

Niektórzy z was mogą jeść ciastka (lub Poppins). Jeśli zakładasz, tylko jedna strona okładki jest rozdarta, a herbatniki są wyjmowane jeden po drugim. To się nazywa popping, i podobnie, jeśli chcesz zachować trochę herbatników przez jakiś czas, włożysz je z powrotem do tego samego rozdartego końca, co nazywa się pchaniem.

Definicja kolejki

Kolejka jest liniową strukturą danych w kategorii typu niepochodzącego. Jest to zbiór podobnych elementów. Dodanie nowych elementów odbywa się na jednym końcu nazywanym tylnym końcem. Podobnie, usuwanie istniejących elementów odbywa się na drugim końcu zwanym Front-endem, a logicznie jest to lista typu First in first out (FIFO).

Przykład

W naszym codziennym życiu spotykamy się z wieloma sytuacjami, w których czekamy na oczekiwaną usługę, tam musimy dostać się do linii oczekiwania na naszą kolej, aby uzyskać serwis. Ta kolejka oczekiwania może być traktowana jako kolejka.

Kluczowe różnice między stosami a kolejkami

  1. Stos następuje za mechanizmem LIFO z drugiej strony Kolejka działa zgodnie z mechanizmem FIFO, aby dodawać i usuwać elementy.
  2. W stosie ten sam koniec służy do wstawiania i usuwania elementów. Wręcz przeciwnie, dwa różne końce są używane w kolejce do wstawiania i usuwania elementów.
  3. Ponieważ stos ma tylko jeden otwarty koniec, jest to powód używania tylko jednego wskaźnika do wskazania góry stosu. Ale kolejka używa dwóch wskaźników do określenia przedniego i tylnego końca kolejki.
  4. Stack wykonuje dwie operacje znane jako push i pop, podczas gdy w Queue jest znane jako kolejkowanie i usuwanie.
  5. Implementacja stosu jest łatwiejsza, natomiast kolejkowanie jest trudne.
  6. Kolejka ma warianty takie jak kolejka cykliczna, kolejka priorytetowa, podwójnie zakończona kolejka itd. Natomiast stos nie ma wariantów.

Implementacja stosu

Stos można zastosować na dwa sposoby:

  1. Implementacja statyczna wykorzystuje tablice do utworzenia stosu. Statyczna implementacja jest techniką bez wysiłku, ale nie jest elastycznym sposobem tworzenia, ponieważ deklaracja wielkości stosu musi być wykonana podczas projektowania programu, po tym czasie rozmiar nie może być zmieniany. Ponadto implementacja statyczna nie jest bardzo wydajna pod względem wykorzystania pamięci. Ponieważ tablica (dla implementowania stosu) jest zadeklarowana przed rozpoczęciem operacji (w czasie projektowania programu). Teraz, jeśli liczba elementów do posortowania jest znacznie mniejsza w stosie, statycznie przydzielona pamięć zostanie zmarnowana. Z drugiej strony, jeśli w stosie jest więcej elementów, które mają być przechowywane, nie możemy zmienić rozmiaru tablicy, aby zwiększyć jej pojemność, aby mógł on pomieścić nowe elementy.
  2. Dynamiczna implementacja jest również nazywana połączoną reprezentacją listy i używa wskaźników do implementacji struktury danych stosu.

Implementacja kolejki

Kolejkę można zaimplementować na dwa sposoby:

  1. Implementacja statyczna : Jeśli kolejka jest zaimplementowana przy użyciu tablic, dokładna liczba elementów, które chcemy zapisać w kolejce, musi być wcześniej zapewniona, ponieważ rozmiar tablicy musi zostać zadeklarowany w czasie projektowania lub przed rozpoczęciem przetwarzania. W takim przypadku początek tablicy stanie się początkiem kolejki, a ostatnia lokalizacja tablicy będzie działała jako tylna strona kolejki. Poniższa relacja powoduje, że całe elementy istnieją w kolejce po zaimplementowaniu za pomocą tablic:
    przód - tył + 1
    Jeśli "tył <przód" nie będzie elementu w kolejce lub kolejka będzie zawsze pusta.
  2. Dynamiczna implementacja : Implementowanie kolejek za pomocą wskaźników, główną wadą jest to, że węzeł w połączonej reprezentacji zużywa więcej pamięci niż odpowiadający element w reprezentacji tablicowej. Ponieważ istnieją co najmniej dwa pola w każdym węźle jeden dla pola danych i inne dla przechowywania adresu następnego węzła, podczas gdy w połączonym przedstawieniu istnieje tylko pole danych. Zaletą korzystania z połączonej reprezentacji staje się oczywiste, gdy wymagane jest wstawienie lub usunięcie elementu w środku grupy innych elementów.

Operacje na stosie

Podstawowe operacje, które można obsługiwać na stosie, są następujące:

  1. PUSH : kiedy nowy element jest dodawany do wierzchołka stosu, znany jest jako operacja PUSH. Przesunięcie elementu w stos wywołuje dodanie elementu, ponieważ nowy element zostanie wstawiony u góry. Po każdej operacji wypychania góra jest zwiększana o jeden. Jeśli tablica jest pełna i nie można dodać nowego elementu, nazywa się to stanem STACK-FULL lub STACK OVERFLOW. PUSH OPERATION - funkcja w C:
    Biorąc pod uwagę stos jest zadeklarowany jako
    int stack [5], top = -1;
    void push()
    {
    int item;
    if (top < 4)
    {
    printf ("Enter the number") ;
    scan ("%d", & item) ;
    top = top + 1;
    stack [top] = item;
    }
    else
    {
    printf (" Stack is full");
    }
    }
  2. POP : Kiedy element jest usuwany z góry stosu, jest znany jako operacja POP. Stos jest zmniejszany o jeden, po każdej operacji pop. Jeśli na stosie nie pozostanie żaden element, a pop zostanie wykonany, to spowoduje to BRAK WARIANTU, co oznacza, że ​​twój stos jest pusty. POP OPERATION - funkcje w C:
    Biorąc pod uwagę stos jest zadeklarowany jako
    int stack [5], top = -1;
    void pop()
    {
    int item;
    if (top >= 4)
    {
    item = stack [top];
    top = top - 1;
    printf ("Number deleted is = %d", item) ;
    }
    else
    {
    printf (" Stack is empty");
    }
    }

Operacje w kolejce

Podstawowe operacje, które można wykonać w kolejce, to:

  1. Enqueue : Aby wstawić element do kolejki. Funkcja operacji wygładzania w C:
    Kolejka jest zadeklarowana jako
    int queue [5], Front = -1 and rear = -1;
    void add ()
    {
    int item;
    if ( rear < 4)
    {
    printf ("Enter the number") ;
    scan ("%d", & item) ;
    if (front == -1)
    {
    front =0 ;
    rear =0 ;
    }
    else
    {
    rear = rear + 1;
    }
    queue [rear] = item ;
    }
    else
    {
    printf ("Queue is full") ;
    }
    }
  2. Dequeue : Aby usunąć element z kolejki. Funkcja operacji przycinania w C:
    Kolejka jest zadeklarowana jako
    int queue [5], Front = -1 and rear = -1;
    void delete ()
    {
    int item;
    if ( front ! = -1)
    {
    item = queue [ front ] ;
    if (front == rear)
    {
    front =-1 ;
    rear =-1 ;
    }
    else
    {
    front = front + 1;
    printf ("Number deleted is = %d", item) ;
    }
    }
    else
    {
    printf ("Queue is empty") ;
    }
    }

Aplikacje Stack

  • Parsowanie w kompilatorze.
  • Maszyna wirtualna Java.
  • Cofnij w edytorze tekstu.
  • Przycisk Wstecz w przeglądarce internetowej.
  • Język PostScript dla drukarek.
  • Implementowanie wywołań funkcji w kompilatorze.

Aplikacje kolejki

  • Bufory danych
  • Asynchroniczny transfer danych (plik IO, rury, gniazda).
  • Przydział żądań na udostępnionym zasobie (drukarka, procesor).
  • Analiza ruchu.
  • Określ liczbę kas kasowych w supermarkecie.

Wniosek

Stack i Queue to liniowe struktury danych, które różnią się pod wieloma względami, takimi jak mechanizm pracy, struktura, implementacja, warianty, ale obie są używane do przechowywania elementów na liście i wykonywania operacji na liście, takich jak dodawanie i usuwanie elementów. Chociaż istnieją pewne ograniczenia prostej kolejki, która jest odzyskiwana za pomocą innych typów kolejki.

Top