Deo zbornika Učimo algoritme

Red (queue)

Red je linearna struktura u kojoj se elementi dodaju isključivo na jednom kraju, a oduzimaju isključivo na drugom kraju. Strukturu reda lako je predočiti analogijom sa istim pojmom u svakodnevnom životu – npr. redom ispred blagajne u dućanu. Svaka nova osoba koja dođe zauzima mjesto na kraju reda, a osoba sa početka reda plaća svoju robu i odlazi. Drugi uobičajeni naziv za ovu strukturu je “FIFO” lista (eng. first in – first out).

Implementacija

Struktura reda može se u računalu implementirati na različite načine, a najčešće se koristi jedan niz i dvije varijable (pokazivača) koje sadrže lokacije početka i kraja reda, odnosno lokacije početnog i krajnjeg elementa u redu.

Sledi prosta implementacija reda u Javascriptu:

red = []
red.push(2)           // red je sada [2]
red.push(5)           // red je sada [2, 5]
element = red.shift() // red je sada [5]
console.log(element)  // stampa 2

Malo naprednija implementacija, sa klasom omotačem, izgledala bi otprilike ovako:

class Red {
    constructor() {
      this.niz = []
    }

    dodaj(el) {
        this.niz.push(el)
    }

    ukloni() {
        return this.niz.shift()
    }
}

red = new Red()
red.dodaj(2)           // red je sada [2]
red.dodaj(5)           // red je sada [2, 5]
element = red.ukloni() // red je sada [5]
console.log(element)   // stampa 2

Vežba

Potrebno je simulirati red u prodavnici. Mogući događaju su da nova mušterija stane na kraj reda, da naplatimo mušteriji koja je prva u redu, i da ta mušterija koja je platila ode.

Analiziranjem problema možemo doći do zaključka da su nam i ovde potrebne 3 metode. Prva metoda treba da ubacuje element u skup, druga da izbacuje iz skupa element koji je prvi ubačen ukoliko posmatramo samo elemente koji se trenutno nalaze u skupu, dok treća treba da odgovara na pitanje koji je element od trenutnih u skupu prvi bio ubačen.

Koristeći strukturu queue možemo rešiti ovaj problem. Primetimo da je vremenska složenost opisanih metoda O(1).

Literatura

  • N. Pavković, D. Marjanović, N. Bojčetić, Programiranje i algoritmi II, Zagreb, 2005.
  • Petlja.org, Strukture podataka