Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
chast3.doc
Скачиваний:
8
Добавлен:
03.11.2018
Размер:
345.09 Кб
Скачать

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

б. P

M-1 M M+1

INFO

NIL

INFO

NIL

N-1

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]