
6.Очередь. Абстрактный тип данных очередь. Реализация очереди с помощью массива.
Очередь (первым пришел – первым вышел")– линейный последовательный список, в котором все включения производятся в конце списка (в хвосте очереди), а исключения – в начале (в голове очереди).
Для индикации хвоста и головы очереди организуются два указателя. f - указатель головного элемента, r - адресует первый свободный слот, следующий за хвостовым.
Операции:
1.создать пустую очередь,
2.поместить эл-т,
3.забрать эл-т,
4.получить знач. э-та стоящ. в начале очереди,
5.проверка на пустоту,
6.удалить очередь.
Основные операции над очередью – включение и исключение элемента. Реализация очереди на массиве: f - указатель для начала и r - для конца очереди.
Описание:
Const maxQuene =100
type TypeElem тип элементов очереди array Quene [1...MaxQuene] of typeElem int r=1, F=1
Поместить эл-т в очередь EnQueue(Queue, y):
1)queue[r]← y; новый элемент заносится в слот, адресуемый указателем B;
2)r ← r + 1; после чего указатель необходимо передвинуть к следующему пустому слоту (вправо).
Исключение из очереди DeQueue(Queue, y):
1)y ←queue[f]; извлекается элемент, адресуемый указателем f;
2)f ← f + 1; после чего f перемещается к следующему заполненному слоту. Текущая длина очереди r - f .
Получить значение первого элементата FrontQueue(Queue, y):
1)y←Queue[f];
Проверка на пустоту IsEmpty(Queue)
1)if f=r then return true else return false
Недостаток: в процессе включения новых элементов в очередь, организованную таким образом рано или поздно наступит переполнение
Добавление в кольцевую очередь EnQueue(Queue,y):
1)Queue[r]←y;
2)if r = MaxQuene then r←1 else r←r + 1;
Исключение элемента из кольцевой очереди DeQueue(Queue,y):
1)y←Queue[r];
2)if f = MaxQuene then f ← 1 else f ← f + 1;
Определение числа элементов в очереди: if r < f then k := MaxQuene + r – f else k := r – f.
Выч. затраты: O(1)