Page 38 - 6110
P. 38

9.3 Черга
                                Черга  в  програмуванні  –  динамічна  структура  даних,  що
                            працює  за  принципом  “перший  прийшов  -  перший  пішов”  (FIFO:
                            first in, first out). У черги є голова (head) та хвіст (tail). Елемент, що
                            додається до черги, опиняється в її хвості. Елемент, що видаляється
                            з черги, знаходиться в її голові.
                                Така черга повністю аналогічна звичній “базарній” черзі, в якій
                            хто  перший  встав  в  неї,  той  першим  буде  обслуженим  (але,  на
                            відміну  від  реальної  черги,  імовірність  пройти  поза  чергою
                            виключена).

                                9.3.1 Основні операції з чергою
                                Еnqueue – “поставити в чергу”. Операція додавання елемента в
                            “хвіст” черги. При цьому довжина черги збільшується на одиницю.
                            Якщо  відбувається  намагання  додати  елемент  у  вже  заповнену
                            чергу, відбувається її переповнення (queue overflow).
                                Dequeue – “отримання з черги”. Операція, яка повертає елемент
                            з  голови  та  видаляє  його  з  черги,  таким  чином  встановлюючи
                            голову на наступний за видаленим елемент та зменшуючи довжину
                            на  одиницю.  При  намаганні  видалити  елемент  з  пустої  черги,
                            виникає ситуація “незаповнення” (queue underflow).

                                9.3.2 Реалізація черги на мовах програмування
                                Черга  може  бути  реалізована  за  допомогою  масива  Q[1...n],  в
                            якому  зберігаються  дані  та  двох  додаткових  змінних  head[Q]  та
                            tail[Q], в яких зберігаються індекси відповідно “голови” та “хвоста”
                            черги, lenght[Q] – довжина черги.

                                Тоді операції enqueue та dequeue запишуться так:

                                ENQUEUE (Q, x)
                                1 Q[tail[Q]] := x
                                2 if tail[Q] = length[Q]
                                3   then tail[Q] := 1
                                4   else tail[Q] := tail[Q] + 1

                                DEQUEUE (Q)
                                1 x := Q[head[Q]]
                                2 if head[Q] = length[Q]
                                3    then head[Q] := 1
                                4    else head[Q] := head[Q] + 1
                                5 return x


                                                            37
   33   34   35   36   37   38   39   40   41   42   43