- •14.1Тип запись в Turbo Pascal
- •14.2 Тип указатель
- •14.4Файлы
- •14.4.1 Типизированные файлы
- •14.4.2Файлы последовательного доступа
- •14.4.3 Файлы произвольного доступа.
- •14.4.4 Нетипизированные файлы.
- •15. 1. Структура программы и простые типы данных
- •15.2. Основные операции
- •15.3. Математические функции
- •15.3.7. Функции ввода и вывода
- •17.1.Переключатель.
- •18.1 Циклы в си
14.2 Тип указатель
Программные объекты, которые порождаются с помощью соответствующих описаний называются статическими. Память за ними закрепляется на все время работы программы.
Данные, созданием и уничтожением которых управляет сам программист, внутренне строение которых формируется по особому закону, но количество, взаимное расположение и взаимосвязи которых могут изменяться в процессе выполнения программы, называются динамическими.
При объявлении данных динамической структуры в разделе описания указывается не сама переменная, а только ссылка на нее. Такая организация данных позволяет динамически занимать и освобождать память в процессе работы блока программы.
Это осуществляется с помощью типа указателя.
Синтаксис:
type
<тип указатель>=^<тип>;
Var
<идентификатор>:<тип-указатель>;
Или
Var
<идентификатор>:^<тип>;
14.2.1Операции над указателями
Над указателями выполняются следующие простейшие действия:
1.Объявление ссылочной переменной
Type
Pp=^integer;
Var
Pa,Pb:Pp;
2.Выделение области памяти
Это осуществляется с помощью процедуры New, она выделяет область памяти из области «куча» соответствующий тому типу, который описан для указателя Pa или Pb и записывает ее адрес в указатель.
New(Pa), New(Pb);
3.Операция взятия указателя
Для этого служит унарная операция ”@”.
Var
I:integer;
Pp:^integer;
…
Pp:=@I;
Переменная Pp получит в качестве своего значения указатель на переменную I или адрес переменной I.
4.Занесение информации
Pa^:=1;
Pb^:=2;
5.Операция сравнения
Type
Pp=^integer;
Var
Pa,Pb:Pp;
…
Rez:=Pa=Pb;
Или
If Pa<>nil
Then
…
6.Копирование информации
Pa^:=Pb^;
В область памяти одной переменной заноситсы значение хранившееся в другой.
7.Копирование адреса
Pa:=Pb;
Обе ссылочные переменные ссылаются на одну и ту же область памяти.
8.Освобождение памяти
Процедура Dispose(A) освобождает область памяти на которую указывает ссылочная переменная А, после чего эта область становится доступной для распределения под другие динамические переменные.
14.3 Создание и обработка односвязного списка
Список-это данные динамической структуры, которые представляют собой совокупность линейно связанных однородных элементов, для которых разрешается добавлять и удалять элементы, расположенные в любом месте списка.
Списки бывают односвязные и двусвязные. Рассмотрим процедуру создания и редактирования односвязного списка по принципу ссылки вперед.
1. T
N=1
2. B,T
N=2
3. B,T,P
N=3
1. B,P T
N=2
2б B,P T,P
N=2
Программа данной процедуры:
Procedure vvkl(var:Tlink, var N:integer;);
Var
T,P:Tlink;
C:Char;
Begin
N:=0;
Repeat
New(T);
N:=N+1;
Write(‘значение полей информации? ’);
Readln(T^.info.x, T^.info.y);
If N=1 then B=t else p^.link=t;
P:=T;
Write(‘знак окончания созданного списка’);
Readln(C);
Until C=’Y’
T^.link=NIL;
End;
Вставка и удаление элемента односвязного списка.
Вставка описывается как процедура.
B
1
INFO
link
2а.
INFO
link
B,T
1
INFO
link
INFO
link
…
M-1 M
Удаление элемента односвязного списка практически идентично вставке вплоть до блока:
……………….
1
INFO
link
INFO
link
INFO
link
…
M-1 M
2
INFO
link
INFO
link
INFO
link
…
M-1 M M+1
INFO
NIL
INFO
NIL
N-1