Статическая реализация очереди


Пусть в очереди требуется сохранять целые числа, причем заранее известно их максимальное количество. Тогда для реализации очереди надо объявить массив и две переменные – указатель начала очереди First и указатель конца очереди Last. Будем считать, что очередь-массив заполняется (растет) от первых элементов массива к последним. Тогда указатель First будет определять первую занятую ячейку массива, а указатель Last - первую свободную ячейку. Тогда пустую очередь определим как First = Last = 1 (если индексация элементов массива начинается с 1), и при каждом добавлении нового элемента переменная Last увеличивается на 1, а при удалении на 1 увеличивается указатель First. Последовательность операций для массива из пяти элементов показана на следующей схеме:

 
 
         

 


1. Пустая очередь: First = Last =1

       

 

2. Добавлено первое число 15, First = 1, Last = 2

 
 
     

 


3. Добавлено второе число 33, First = 1, Last = 3

 
 
   

 


4. Добавлено третье число 07, First = 1, Last = 4

 
 
     

 


5. Удалено число 15, First = 2, Last = 4

 
 
       

 


6. Удалено число 33, First = 3 , Last = 4

 
 
     

 


7. Добавлено число 44, First = 3 , Last = 5

 

Рассмотренная выше простейшая реализация очереди-массива имеет один существенный недостаток: освобождающиеся при удалении ячейки в начале массива НЕ используются при последующих добавлениях, и поэтому при интенсивном использовании очереди быстро может возникнуть ситуация, когда указатель Last выходит за пределы массива, тогда как в начале массива есть свободные ячейки.

Для устранения этого недостатка можно использовать два подхода:

· при очередном удалении элемента из начала очереди сдвигать все элементы влево на одну ячейку, что при большом числе элементов в очереди может привести к большим вычислительным затратам

· более эффективно использовать так называемую кольцевую очередь, в которой при достижении указателем Last конца массива добавление производится в начало массива:

 

 

 
 
   

 


8. Добавлено число 11, First = 3 , Last = 6 (= 1)

 
 
 

 


9. Новое число 22 добавляется в первую ячейку:

First = 3 , Last = 2

 
 

 


10. Добавлено число 99, First = 3 , Last = 3

 

В этом случае добавление становится невозможным только если в массиве нет ни одной свободной ячейки, как в рассмотренном примере.

Для программной реализации удобно ввести переменную-счетчик числа элементов в очереди, с помощью которой легко отслеживаются состояния пустой и заполненной очереди.

Само добавление элемента в очередь выполняется следующим образом:

· проверить возможность добавления (в массиве есть свободные ячейки?)

· добавить элемент в массив по индексу Last

· изменить указатель Last на 1

· если Last выходит за пределы массива, то установить Last в 1

  • увеличить счетчик числа элементов в очереди

Удаление элемента из очереди:

· проверить возможность удаления (в очереди есть элементы?)

· извлечь элемент из массива по индексу First и выполнить с ним необходимые действия

· увеличить указатель First на 1

· если First выходит за пределы массива, то установить First в 1

· уменьшить счетчик числа элементов в очереди

 



Дата добавления: 2020-07-18; просмотров: 358;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.01 сек.