Ajánlott, 2024

Szerkesztő Választása

A Stack és a Queue közötti különbség

A stack és a Queue mind a nem primitív adatstruktúrák. A főbb különbségek a verem és a sor között az, hogy a stack a LIFO-t (utolsó in-out) használja az adatelemek eléréséhez és hozzáadásához, míg a Queue FIFO (First in first out) módszert használ az adatelemek eléréséhez és hozzáadásához.

A veremnek csak egy vége van, amely megnyitja az adatelemek megnyomására és feltöltésére, a másik oldalon a Queue mindkét vége nyitva van az adatelemek enqueuing és dequeuing számára.

A verem és a várakozási sor az adatelemek tárolására használt adatstruktúrák, és valójában valamilyen valós világegyenértéken alapulnak. Például a verem egy CD halmaza, ahová kivehet és CD-t helyezhet a CD-köteg tetején. Hasonlóképpen, a sor a színházi jegyek sora, ahol az első helyen álló személy, vagyis a sor eleje lesz szolgálva, és az új személy érkezik meg a sor hátoldalán (a sor hátsó vége).

Összehasonlító táblázat

Az összehasonlítás alapjaKazalsorban áll
Működési elvLIFO (Utoljára először)FIFO (Először először)
SzerkezetUgyanaz a vége az elemek beillesztéséhez és törléséhez.Az egyik végét a behelyezésre használjuk, azaz a hátsó véget és egy másik véget használjuk az elemek törlésére, azaz az elülső végre.
Az alkalmazott mutatók számaEgyKét (egyszerű soros esetben)
A végrehajtott műveletekPush és PopEnqueue és dequeue
Üres állapot vizsgálataTop == -1Front == -1 || Front == Hátsó + 1
Teljes állapot vizsgálata
Top == Max - 1Hátsó == Max - 1
VáltozatokNincs változata.Változatokkal rendelkezik, mint például körkörös sor, elsőbbségi sor, kétszeresen befejezett sor.
VégrehajtásegyszerűbbÖsszehasonlítóan összetett

A verem meghatározása

A Stack egy nem primitív lineáris adatszerkezet. Ez egy rendezett lista, ahol az új elem hozzáadásra kerül, és a meglévő elemet csak az egyik végéről törli, amelyet a verem tetejének neveznek (TOS). Mivel az összes törlés és beillesztés egy verembe a verem tetejéről történik, az utolsó hozzáadott elem lesz az első, amelyet eltávolítunk a veremből. Ez az oka annak, hogy a verem az utolsó lista (LIFO) listája.

Ne feledje, hogy a veremben gyakran elérhető elem a legfelső elem, míg az utolsó elérhető elem a verem alján található.

Példa

Néhányan kekszet (vagy Poppint) fogyaszthatnak. Ha feltételezzük, csak a fedél egyik oldala szakadt, és a kekszeket egyenként elveszik. Ez az, amit poppingnek neveznek, és hasonlóan, ha néhány kekszet egy ideig később meg akarunk őrizni, visszahelyezzük őket a csomagba ugyanazon szakadt végen keresztül, amit rámenősnek neveznek.

A sor meghatározása

A sor egy lineáris adatstruktúra, amely a nem primitív típusú kategóriába tartozik. Hasonló típusú elemek gyűjteménye. Az új elemek felvétele az egyik végén a hátsó vég. Hasonlóképpen, a meglévő elemek törlése a másik végén, a Front-end néven történik, és logikailag egy első FIFO (FIFO) típusú lista.

Példa

A mindennapi életünkben sok olyan helyzetben találkozunk, ahol ki kell várnunk a kívánt szolgáltatást. Ez a várakozási sor várakozásnak tekinthető.

Kulcs különbségek a verem és a sor között

  1. A stack követi a LIFO-mechanizmust, a másik viszont a FIFO-mechanizmust követi az elemek hozzáadásához és eltávolításához.
  2. Egy veremben ugyanazt a véget használjuk az elemek beillesztéséhez és törléséhez. Éppen ellenkezőleg, két különböző véget használnak a sorban az elemek beillesztéséhez és törléséhez.
  3. Mivel a Stacknek csak egy nyílt vége van, az az oka, hogy csak egy mutatót használunk a verem tetejére. A várakozási sor azonban két mutatót használ a sor elejére és hátuljára.
  4. A stack két műveletet ismertet, amelyek a push és pop néven ismertek, míg a Queue-ban úgynevezett enqueue és dequeue.
  5. A verem végrehajtása könnyebb, míg a sorok végrehajtása trükkös.
  6. A sorban vannak olyan változatok, mint a kör alakú sor, a prioritási sor, a kétszeresen befejezett sor stb. Ezzel szemben a veremnek nincs változata.

Verem végrehajtása

A verem kétféleképpen alkalmazható:

  1. A statikus implementáció tömböket használ a verem létrehozásához. A statikus kivitelezés azonban könnyed technika, de nem a létrehozás rugalmas módja, mivel a verem méretének deklarációját a programtervezés során kell elvégezni, azt követően a méret nem változtatható meg. Emellett a statikus implementáció nem túl hatékony a memóriahasználat tekintetében. Mivel egy tömböt (a verem végrehajtásához) a művelet megkezdése előtt (a program tervezési idejében) jelent meg. Most, ha a rendezendő elemek száma kevésbé van a veremben, akkor a statikusan kiosztott memória elvesznek. Másrészről, ha több olyan elem van, amelyet a veremben tárolunk, akkor nem tudjuk megváltoztatni a tömb méretét, hogy növelje kapacitását, így új elemeket tud elhelyezni.
  2. A dinamikus implementációt összekapcsolt listaképzésnek is nevezik, és mutatókat használ az adatszerkezet veremtípusának megvalósításához.

Sor végrehajtása

A sor kétféleképpen valósítható meg:

  1. Statikus megvalósítás : Ha egy sorot tömbök segítségével valósítunk meg, akkor a sorban tárolni kívánt elemek pontos számát biztosítani kell, mivel a tömb méretét a tervezési időben vagy a feldolgozás megkezdése előtt kell bejelenteni. Ebben az esetben a tömb eleje a sor elejévé válik, és a sor utolsó helye a sor hátulja. A következő összefüggések a tömbök használatakor a sorban lévő összes elemet megadják:
    elöl - hátul + 1
    Ha a „hátsó <elülső”, akkor nem lesz elem a sorban, vagy a sor mindig üres lesz.
  2. Dinamikus megvalósítás : Sorok végrehajtása mutatókkal, a fő hátránya az, hogy a csatolt reprezentáció csomópontja több memóriát foglal el, mint egy megfelelő elem a tömb ábrázolásában. Mivel mindegyik csomópontban legalább két mező van az adatmező számára, és más a következő csomópont címének tárolásához, míg a kapcsolt ábrázolásban csak az adatmező van. A kapcsolt ábrázolás előnye nyilvánvalóvá válik, amikor egy elem elhelyezése vagy törlése más elemek közepén van.

Műveletek a Stack-en

Az alapműveletek, amelyek a veremben működtethetők, a következők:

  1. PUSH : ha egy új elemet hozzáadnak a köteg tetejéhez, akkor PUSH műveletnek nevezik. Egy elem elhelyezése a veremben az elem hozzáadására hívja fel a figyelmet, mivel az új elem a tetejére kerül. Mindegyik nyomási művelet után a felsőt egy-egy növeli. Ha a tömb tele van, és új elem nem adható hozzá, akkor azt STACK-FULL vagy STACK OVERFLOW néven hívják. PUSH OPERATION - funkció C-ben:
    Figyelembe véve, hogy a verem bejelentett
    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 : Ha egy elemet törölnek a köteg tetejéről, akkor POP műveletnek nevezik. A verem egyenként csökken, minden pop művelet után. Ha nincs elem a veremen, és a pop megjelenik, akkor ez STACK UNDERFLOW állapotot eredményez, ami azt jelenti, hogy a verem üres. POP OPERATION - funkciók C-ben:
    Figyelembe véve, hogy a verem bejelentett
    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");
    }
    }

Műveletek egy sorban

A sorban végrehajtandó alapvető műveletek a következők:

  1. Enqueue : Elem beillesztése egy sorba.Kapcsolási művelet funkció C:
    A várólistát mint
    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 : Elem törlése a sorból.Kapcsolási művelet funkció C:
    A várólistát mint
    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") ;
    }
    }

Stack alkalmazások

  • Összeállítás a fordítóban.
  • Java virtuális gép.
  • Visszavonás egy szövegszerkesztőben.
  • Vissza a webböngészőben.
  • PostScript nyelv a nyomtatókhoz.
  • Funkcióhívások végrehajtása egy fordítóban.

Queue alkalmazások

  • Adatpufferek
  • Aszinkron adatátvitel (IO fájl, csövek, aljzatok).
  • Kérések megosztása egy megosztott erőforráson (nyomtató, processzor).
  • Forgalmi elemzés.
  • Határozza meg a szupermarketben a pénztárak számát.

Következtetés

A stack és a Queue lineáris adatstruktúrák bizonyos módon különböznek egymástól, mint a munkamechanizmus, a szerkezet, a implementáció, a változatok, de mindkettőt a listában lévő elemek tárolására és a listán szereplő műveletek végrehajtására használják, mint például az elemek hozzáadása és törlése. Bár vannak olyan korlátozások az egyszerű sorban, amelyet más típusú sorok felhasználásával nyerünk vissza.

Top