Ebben a cikkben a kétvégű sorról vagy deque-ről lesz szó. Először egy rövid leírást kell látnunk a sorról.
Mi az a sor?
A várólista egy olyan adatstruktúra, amelyben ami előbb következik, az előbb kimegy, és a FIFO (First-In-First-Out) házirendet követi. A beszúrás a sorba az egyik végétől, a hátsó vége vagy a farok, míg a törlés egy másik végről történik, amely a elülső vége vagy a fej a sorból.
java dátum a karakterlánchoz
A sorban állás valós példája a mozitermen kívüli jegysor, ahol a sorban elsőként belépő kapja meg először a jegyet, és aki utolsóként lép be a sorban, az kapja meg végül a jegyet.
Mi az a deque (vagy kétvégű sor)
A deque a Double Ended Queue rövidítése. A Deque egy lineáris adatstruktúra, amelyben a beillesztési és törlési műveletek mindkét végéről történnek. Azt mondhatjuk, hogy a deque a sor általánosított változata.
Bár a beillesztés és a törlés a deque-ben mindkét oldalon végrehajtható, nem követi a FIFO szabályt. A deque ábrázolása a következő:
A deque típusai
Kétféle deque létezik -
- Korlátozott beviteli sor
- Korlátozott kimeneti sor
Korlátozott beviteli sor
A korlátozott beviteli sorban a beillesztés csak az egyik végén, míg a törlés mindkét végén végrehajtható.
Kimenet korlátozott sor
A korlátozott kimeneti sorban a törlési művelet csak az egyik végén, míg a beillesztés mindkét végén végrehajtható.
Deque-n végrehajtott műveletek
A következő műveletek alkalmazhatók a deque-n:
- Beillesztés elöl
- Beillesztés hátul
- Elöl törlés
- Törlés hátul
A deque-ben a fent felsorolt műveletek mellett betekintési műveleteket is végezhetünk. Peek művelettel megkapjuk a deque elülső és hátsó elemeit. Tehát a fenti műveleteken kívül a következő műveletek is támogatottak deque-ben:
c# oktatóanyag
- Szerezd meg az első elemet a deque-ből
- Szerezd meg a hátsó elemet a deque-ből
- Ellenőrizze, hogy a deque megtelt-e vagy sem
- Ellenőrzi, hogy a deque üres-e vagy sem
Most értsük meg a deque műveletet egy példa segítségével.
Beillesztés az elülső végén
Ebben a műveletben az elemet a sor elülső végéről illeszti be. A művelet végrehajtása előtt először ellenőriznünk kell, hogy a sor megtelt-e vagy sem. Ha a sor nem tele, akkor az elemet az alábbi feltételekkel lehet beszúrni a kezelőfelületről:
- Ha a sor üres, a hátsó és az elülső rész is 0-val inicializálódik. Most mindkettő az első elemre mutat.
- Ellenkező esetben ellenőrizze az elülső rész helyzetét, ha az eleje kisebb, mint 1 (elülső<1), then reinitialize it by front = n - 1, azaz a tömb utolsó indexe.1),>
Beillesztés a hátsó végén
Ebben a műveletben az elem a sor hátsó végéről kerül beillesztésre. A művelet végrehajtása előtt először újra meg kell vizsgálnunk, hogy a sor megtelt-e vagy sem. Ha a sor nem tele, akkor az elem beszúrható hátulról az alábbi feltételekkel:
- Ha a sor üres, a hátsó és az elülső rész is 0-val inicializálódik. Most mindkettő az első elemre mutat.
- Ellenkező esetben növelje a hátulsót 1-gyel. Ha a hátsó rész utolsó indexe (vagy mérete - 1), akkor ahelyett, hogy 1-gyel növelnénk, 0-val kell egyenlővé tenni.
Törlés az elején
Ebben a műveletben az elem törlődik a sor elejéről. A művelet végrehajtása előtt először ellenőriznünk kell, hogy a sor üres-e vagy sem.
Ha a sor üres, azaz front = -1, akkor ez az alulcsordulás feltétele, és nem tudjuk végrehajtani a törlést. Ha a sor nem tele, akkor az elemet az alábbi feltételekkel lehet beszúrni a kezelőfelületről:
Ha a deque csak egy elemet tartalmaz, állítsa be a hátsó = -1 és front = -1 értéket.
latex lista
Ellenkező esetben, ha az eleje a végén van (ez azt jelenti, hogy eleje = méret - 1), állítsa be az elejét = 0.
python maradék operátor
Ellenkező esetben növelje az elejét 1-gyel (azaz front = front + 1).
Törlés a hátsó végén
Ebben a műveletben az elem törlődik a sor hátsó végéről. A művelet végrehajtása előtt először ellenőriznünk kell, hogy a sor üres-e vagy sem.
Ha a sor üres, azaz front = -1, akkor ez az alulcsordulás feltétele, és nem tudjuk végrehajtani a törlést.
Ha a deque csak egy elemet tartalmaz, állítsa be a hátsó = -1 és front = -1 értéket.
Ha hátul = 0 (hátsó elöl van), akkor állítsa hátul = n - 1.
Ellenkező esetben csökkentse a hátsót 1-gyel (vagy hátul = hátsó -1).
Üres ellenőrzés
Ez a művelet annak ellenőrzésére szolgál, hogy a deque üres-e vagy sem. Ha front = -1, az azt jelenti, hogy a deque üres.
Ellenőrizze tele
Ez a művelet annak ellenőrzésére szolgál, hogy a deque megtelt-e vagy sem. Ha elöl = hátul + 1, vagy elöl = 0 és hátul = n - 1, az azt jelenti, hogy a deque megtelt.
A deque összes fenti műveletének időbonyolultsága O(1), azaz állandó.
A deque alkalmazásai
- A Deque veremként és sorként is használható, mivel mindkét műveletet támogatja.
- A Deque palindrom ellenőrzőként használható azt jelenti, hogy ha a karakterláncot mindkét végéről olvassuk, akkor a karakterlánc ugyanaz lenne.
Deque megvalósítása
Most pedig lássuk a deque megvalósítását C programozási nyelven.
hogyan kell használni a mysql munkapadot
#include #define size 5 int deque[size]; int f = -1, r = -1; // insert_front function will insert the value from the front void insert_front(int x) { if((f==0 && r==size-1) || (f==r+1)) { printf('Overflow'); } else if((f==-1) && (r==-1)) { f=r=0; deque[f]=x; } else if(f==0) { f=size-1; deque[f]=x; } else { f=f-1; deque[f]=x; } } // insert_rear function will insert the value from the rear void insert_rear(int x) { if((f==0 && r==size-1) || (f==r+1)) { printf('Overflow'); } else if((f==-1) && (r==-1)) { r=0; deque[r]=x; } else if(r==size-1) { r=0; deque[r]=x; } else { r++; deque[r]=x; } } // display function prints all the value of deque. void display() { int i=f; printf(' Elements in a deque are: '); while(i!=r) { printf('%d ',deque[i]); i=(i+1)%size; } printf('%d',deque[r]); } // getfront function retrieves the first value of the deque. void getfront() { if((f==-1) && (r==-1)) { printf('Deque is empty'); } else { printf(' The value of the element at front is: %d', deque[f]); } } // getrear function retrieves the last value of the deque. void getrear() { if((f==-1) && (r==-1)) { printf('Deque is empty'); } else { printf(' The value of the element at rear is %d', deque[r]); } } // delete_front() function deletes the element from the front void delete_front() { if((f==-1) && (r==-1)) { printf('Deque is empty'); } else if(f==r) { printf(' The deleted element is %d', deque[f]); f=-1; r=-1; } else if(f==(size-1)) { printf(' The deleted element is %d', deque[f]); f=0; } else { printf(' The deleted element is %d', deque[f]); f=f+1; } } // delete_rear() function deletes the element from the rear void delete_rear() { if((f==-1) && (r==-1)) { printf('Deque is empty'); } else if(f==r) { printf(' The deleted element is %d', deque[r]); f=-1; r=-1; } else if(r==0) { printf(' The deleted element is %d', deque[r]); r=size-1; } else { printf(' The deleted element is %d', deque[r]); r=r-1; } } int main() { insert_front(20); insert_front(10); insert_rear(30); insert_rear(50); insert_rear(80); display(); // Calling the display function to retrieve the values of deque getfront(); // Retrieve the value at front-end getrear(); // Retrieve the value at rear-end delete_front(); delete_rear(); display(); // calling display function to retrieve values after deletion return 0; }
Kimenet:
Szóval ennyi a cikkről. Remélem, a cikk hasznos és informatív lesz az Ön számára.