- •25. Процедуры, управляющие работой буфера ввода-вывода для текстовых файлов.
- •10) Процедура Close(f)
- •11) Процедура SetTextBuf (f, Buf [, Size])
- •26 Сравнительная характеристика внутренней структуры представления информации в текстовом файле и файле с типом. Достоинства и недостатки использования текстового файла и файла с типом.
- •I. Представление числовой информации.
- •II. Представление текстовой информации.
- •1) Процедуры Reset и Rewrite
- •2) Процедура Blockread
- •3) Процедура Blockwrite
- •28 Проверка операций ввода-вывода
- •29 Ссылочный тип. Назначение. Синтаксис задания. Представление в памяти. Виды указателей. Операции над указателями.Общие сведения
- •32.Динамические цепочки. Объявление. Алгоритм формирования цепочки.
- •34 Двунаправленные списки
- •38 Очередь lifo
- •39 Очередь fifo
- •40Таблицы
- •42Поиск записи в дереве
38 Очередь lifo
Наиболее часто в программировании используются очереди второго вида
– стеки. Принцип их работы – «Последний пришел – первый вышел».
В стеке доступна единственная позиция, называемая вершиной стека – это позиция, в которой находится последний по времени поступления в стек элемент.
Наиболее быстрое выполнение операций над стеком обеспечивает его представление в виде динамической цепочки звеньев (однонаправленного списка). Вершиной стека обычно является первое звено цепочки. Заглавное
звено в цепочке стека не нужно, так как в стеке доступна только его вершина.
При использовании структуры однонаправленного списка стек задается с помощью описания типа, приведенного в примере 7.7, и дополнительно может
быть введен тип указателя, представляющего стек как единую структуру, то есть ссылка на вершину стека Stek:
Type
<Задание стека по примеру 7.7>; Stek = Adres1;
Реальный стек вводится с помощью описания переменной:
Q^.Element := El;
Q^.Adrcled := St; St := Q
End;
Номера операторов в данной программе соответствуют номерам этапов
алгоритма занесения элемента в стек.
Б. Выбор элемента из стека
Пусть в программе имеется описание типа, приведенное в примере 7.7.
Алгоритм выбора элемента из стека:
Прочитать значение из вершины стека.
Запомнить ссылку на старую вершину. Исключить первое звено из стека. Уничтожить первое звено.
Пример 7.14.
Процедура выбора элемента из стека. Первый параметр задает нужный стек (если их несколько), во второй передается значение из вершины стека.
Procedure Vibor (Var St: Stek; Var A: <Тип_элементов_стека>);
Var
Q: Adres1; Begin
A := St^.Element;
Q := St;
St := St^.Adrcled; Dispose (Q)
End;
Номера операторов в данной программе соответствуют номерам этапов
алгоритма выбора элемента из стека.
Если необходимо ускорить процедуру выбора, то операторы Q := St и
Dispose(Q) можно не применять. Однако это приведет к неэффективному использованию памяти.
В. Создание стека
Пусть в программе имеется описание типа, приведенное в примере 7.7.
Для создания стека может быть использована процедура Zanes из примера
Пример 7.15.
Создание стека. Ввод исходного текста в стек. Признак окончания текста– точка.
…
Var
St: Adres1; Bykva: Char;
Begin
St := Nil;
Read (Bykva);
While Bykva <>’.’ Do Begin
Zanes (St, Bykva);
Read (Bykva) End
End.
39 Очередь fifo
Принцип работы – “Первый пришел, первый вышел”.
Для организации такой очереди используются две ссылочные переменные типа Adres1 (см. пример 7.7): Left – для указания начала и Right – для указания
конца очереди.
Добавление элемента в очередь осуществляется в соответствии со значением Right. Затем значение Right изменяется и указывает на последний
занесенный элемент.
Выборка элементов из очереди происходит, исходя из значения Left.
Затем Left изменяется и указывает на следующий элемент очереди.
Если в очереди один элемент, значение Right равно значению Left. Такое
Равенство может использоваться как признак окончания очереди при последовательном выборе элементов из нее.
А. Занесение элемента в очередь
Пусть в программе имеется описание типа, приведенное в примере 7.7.
Алгоритм занесения элемента в очередь:
Cоздание нового звена.
Занесение в последнее звено адреса нового звена.
Занесение Nil в поле Adrcled нового звена.
Занесение элемента в информационное поле нового звена.
Созданное звено сделать концом очереди.
Пример 7.16.
Процедура занесения элемента в очередь. Первый параметр – Right – адрес последнего занесенного элемента, второй – заносимое в очередь значение.
Procedure Dobavl (Var Right: Adres1; El: <Тип_элементов_очереди>);
Var Q: Adres1; Begin
New (Q);
Right^.Adrcled := Q; Q^.Adrcled := Nil;
Q^.Element := El; Right:=Q
End;
Б. Выбор элемента из очереди
Пусть в программе имеется описание типа, приведенное в примере 7.7.
Алгоритм выбора элемента из очереди:
Чтение значения из начала очереди.
Запоминание ссылки на начало очереди.
Исключение первого звена из начала очереди.
Уничтожение первого звена.
Пример 7.17.
Процедура выбора элемента из очереди. Параметр Left используется для передачи адреса начала очереди. В параметр Elem передается значение из начала очереди.
Procedure Udal (Var Left: Adres1; Var Elem: <Тип_элементов_очереди>);
Var Q:Adres1; Begin
Elem := Left^.Element;
{10} Q := Left;
{11} Left := Left^.Adrcled; Dispose(Q)
End;
В. Организация очереди
Пусть в программе имеется описание типа, приведенное в примере 7.7.
Организация очереди основана на использовании операции занесения элемента в очередь
Пример 7.18.
Организация очереди. Ввод исходного текста в очередь. Признак окончания текста – точка. Используется процедура Dobavl занесения элемента в очередь (см. пример 7.16).
...
Var
Right, Left: Adres1; Bykva: Char;
Begin
Read (Bykva);
New (Left);
Left^.Adrcled := Nil; Left^.Element := Bykva;
Right := Left;
Read (Bykva);
While Bykva <>’.’ Do Begin
Dobavl (Right, Bykva);
Read (Bykva)
End
End.