Kö (programmering)

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 26 maj 2021; kontroller kräver 3 redigeringar .

Queue  är en abstrakt datatyp med först-in-först-ut-elementåtkomstdisciplin ( FIFO , engelska  först in, först ut ). Att lägga till ett element (vanligtvis betecknat med ordet enqueue - lägg i en kö) är endast möjligt i slutet av kön, sampling - endast från början av kön (som vanligtvis kallas ordet dequeue - ta bort från kön), medan det valda elementet tas bort från kön.

Sätt att implementera en kö

Det finns flera sätt att implementera en kö i programmeringsspråk.

Array

Det första sättet representerar kön som en array och två heltalsvariabler start och slut.

Pekar vanligtvis startpå köns huvud, end elementet som kommer att fyllas när ett nytt element kommer in i kön. När ett element läggs till i kön skrivs det q[end]nya köelementet till och endminskas med ett. Om värdet på end blir mindre än 1, så går vi en slags slinga runt arrayen, och värdet på variabeln blir lika med n. Att extrahera ett element från kön görs på liknande sätt: efter att ha extraherat ett element q[start]från kön startreduceras variabeln med 1. Med sådana algoritmer kommer en cell från kön nalltid att vara ledig (eftersom en kö med nelement inte kan urskiljas från en tom), vilket kompenseras av algoritmernas enkelhet.

Fördelar med denna metod: liten besparing av minne är möjlig i jämförelse med den andra metoden; lättare att utveckla.

Nackdelar: Det maximala antalet element i kön begränsas av storleken på arrayen. När det svämmar över kräver det omallokering av minne och kopiering av alla element till en ny array.

Länkad lista

Den andra metoden bygger på att arbeta med dynamiskt minne. Kön representeras som en linjär lista , där tillägg/borttagning av element kommer strikt från dess respektive ändar.

Fördelar med denna metod: storleken på kön begränsas endast av mängden minne.

Nackdelar: svårare att utveckla; mer minne krävs; när man arbetar med en sådan kö är minnet mer fragmenterat; köandet är något långsammare.

Implementering på två stackar

Kömetoder kan implementeras baserat på två stackar S1 och S2som visas nedan:

procedurkö ( x ): S1.push( x ) dequeue() funktion: om S2 är tom: om S1 är tom: rapportera fel: kön är tom tills S1 är tom: S2.push(S1.pop()) returnera S2.pop()

Denna implementeringsmetod är mest bekväm som grund för att bygga en beständig kö . .

Köer på olika programmeringsspråk

Köer är implementerade i nästan alla utvecklade programmeringsspråk. CLI tillhandahåller klassen System.Collections.Queue för detta, med metoderna Enqueue och Dequeue. STL har också klasskön <>, definierad i huvudfilkön. Den använder samma terminologi (push och pop) som stackar .

Använda köer

Kön i programmering används, som i verkligheten, när du behöver utföra vissa åtgärder i den ordning de tas emot, och utföra dem sekventiellt. Ett exempel är arrangemanget av evenemang i Windows. När användaren utför någon åtgärd på applikationen anropas inte motsvarande procedur i applikationen (trots allt, för närvarande kan applikationen utföra andra åtgärder), men ett meddelande skickas till honom som innehåller information om den vidtagna åtgärden, detta meddelande är i kö, och endast när meddelanden som kom tidigare bearbetas kommer applikationen att utföra den nödvändiga åtgärden.

BIOS- tangentbordsbufferten är organiserad som en ringarray, vanligtvis 16 maskinord lång, och två pekare: till nästa element i det och till det första lediga elementet.

Se även

Länkar