Басецкий Олег Олегович МГТУ им. Н.Э.Баумана

advertisement
Басецкий Олег Олегович МГТУ им. Н.Э.Баумана
Есть запись, строки. Каждая строка – число. Например,
4
4.5
21.543
1
124.12
Нужно:
1. Прочитать запись в двунаправленную очередь
Двунаправленная очередь – структура данных, для которой доступны операции:
•Добавить число в начало очереди;
•Добавить число в конец очереди;
•Изъять число из начала очереди;
•Изъять число из конца очереди
2 После загрузки посчитать длину полученной очереди, используя только
доступные для нее операции и ограниченное число вспомогательной памяти
(переменных).*
*. В частности, запрещается использовать вторую очередь в качестве переменной.
В качестве операции сравнения элементов может использоваться только
операция сравнения чисел.
После расчета очередь должна остаться в первоначальном виде и естественно,
что структура очереди должна быть реализована в общем виде, без ориентации
на алгоритм. Сам алгоритм должен быть реализован без использования какихлибо особенностей выбранного языка программирования.
1.Чтение в очередь
Основным преимуществом двунаправленной очереди, является возможность записи
чисел как в левый так и правый концы очереди.
Схема двунаправленной очереди
Вставка элемента с конца очереди:
R←R+1; X[R]←Y //R – указатель ячейки правого конца, X[] - элемент очереди,
Y — соответсвующий элемент записи.
В случае, если заполнение очереди происходит постоянно, то, во
избежание переполнения памяти, неоходимо работать с M узлами, образующих
колько (т.е. После X[M] следует X[1]):
Вставка в очередь:
X←Y:
Если R=M, то R←1
в противном случае R←R+1
Если R=F //то избыток элементов F —ячейка, перед начальным элементом
очереди.
X[R]←Y.
2. Длина очереди
Блок-схема алгоритма определения длины очереди
Словесное описание алгоритма и пояснение блок-схемы:
1) Чтение осуществляется по алгоритму, приведенному выше в части 1.
2) M — маркер, является суммой X[R] и X[R-1] (крайнего правого и
предпоследнего элементов исходной очереди).
3) Счетчик цикла i – длина очереди
4) операцией изъять из начала и операцией добавить в конец получаем R=L
(для n=i-1 левых элементов), где L – левый элемент очереди.
Download