Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

сиаод / 1-34 / 6.Очередь. Массивы

.pdf
Скачиваний:
66
Добавлен:
11.05.2015
Размер:
256.18 Кб
Скачать

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)