Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Использование указателей. Списки





Список представляет собой совокупность динамических объектов одного типа, упорядоченных с помощью ссылок.

Объекты называются элементами списка. Элементом списка обычно является запись, которая содержит, по крайней мере, два поля (рис. 2.13):

- информационное;

 
 

- указатель.

 
 

Сам список представляется в виде рис. 2.14.

Каждый элемент списка имеет указатель на соседа. У последнего элемента указатель – Nil. Элементы списка и указатели описываются так:

 

Type

Указатель = ^Эл_Списка; {Опережающее описание }

{допускается только в этом случае }

Эл_Списка = Record

Инф_поле: Тип_Инф_поля;

Поле_указателя: Указатель; {Этот тип уже определен выше}

End;

Тип информационного элемента - любой (скалярный, строка, массив и т. д.).

 

Пример. Тype

Ptr = ^El;

El = Record

Buk: Char;

Ukaz: Ptr;

End;

Var

tUk, PrUk, NUk, q: Ptr; {Указатели на элемент списка}

ElSp: El; { Элемент списка (запись типа El) }

С помощью списков достаточно просто представляются очереди.

 

Очередь – это понятие, которое широко используется в вычислительной технике. Список позволяет моделировать операции добавления элементов в очередь и выборки из нее.

Основные операции над списками:

1) переход от одного элемента к другому (следующему);

2) включение нового элемента в список;

3) удаление элемента из списка.

 

1) Первая операция выполняется просто: значению переменной-указателю, которая сейчас указывает на некоторый элемент, необходимо присвоить значение, находящееся в поле указателя этого элемента (см. рис. 2.15):

tUk: = tUk^.Ukaz

 
 

В результате tUk станет ссылкой на следующий элемент или Nil, если элемент последний.

 

2) Удаление элемента из списка выполняется наиболее просто, если имеется ссылка (указатель) на элемент, предшествующий удаляемому. При этом сначала переносятся ссылки, а потом удаляется элемент (освобождается занимаемая им динамическая память). Ссылка на удаляемый элемент не должна теряться, пока он не будет уничтожен или включен в другой список, иначе из него получится " мусор".

Процесс удаления элемента, расположенного в списке после элемента, на который указывает ссылка PrUk, иллюстрируется рис. 2.16, а фрагмент соответствующей программы может иметь вид, приведенный далее.

 

 
 

{Запомним указатель на удаляемый элемент}

tUk: = PrUk^.Ukaz;

{Полю указателя элемента, стоящего перед удаляемым, присвоим}

{ значение поля указателя удаляемого элемента }

PrUk^.Ukaz: = PrUk^.Ukaz^.Ukaz;

 

На этом удаление элемента из списка закончено: связь этого элемента с предыдущим разорвана. Но элемент продолжает занимать память и для его физического удаления нужно выполнить процедуру:

Dispose (tUk); {Физически удалили элемент }

Если нет необходимости освобождать память, то иногда полезно записать в поле указателя удаленного элемента Nil:

tUk^.Ukaz: = Nil.

 

 
 

3) Включение в список элемента, на который имеется указатель NUk, после элемента, на который имеется указатель PrUk, иллюстрирует рис. 2.17. Для выполнения этой операции нужно задать ссылку из вставляемого элемента на следующий (она равна ссылке из предыдущего элемента на следующий – см. рис. 2.17, а), а затем – изменить ссылку из предыдущего элемента на вставляемый (см. рис. 2.17, б). Существующая связь разрывается последней, чтобы не потерять элемент.

 

Фрагмент программы будет иметь вид

New(NUk); {Создали вставляемый элемент}

Readln(NUk^.Buk);

Nuk^.Ukaz: =PrUk^.Ukaz; {Ссылка из вставляемого на следующий}

PrUk^.Ukaz: = Nuk; {Ссылка из предыдущего на вставляемый}


 







Дата добавления: 2014-12-06; просмотров: 643. Нарушение авторских прав; Мы поможем в написании вашей работы!




Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...


Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...


Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...


Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Понятие массовых мероприятий, их виды Под массовыми мероприятиями следует понимать совокупность действий или явлений социальной жизни с участием большого количества граждан...

Тактика действий нарядов полиции по предупреждению и пресечению правонарушений при проведении массовых мероприятий К особенностям проведения массовых мероприятий и факторам, влияющим на охрану общественного порядка и обеспечение общественной безопасности, можно отнести значительное количество субъектов, принимающих участие в их подготовке и проведении...

Тактические действия нарядов полиции по предупреждению и пресечению групповых нарушений общественного порядка и массовых беспорядков В целях предупреждения разрастания групповых нарушений общественного порядка (далееГНОП) в массовые беспорядки подразделения (наряды) полиции осуществляют следующие мероприятия...

Принципы, критерии и методы оценки и аттестации персонала   Аттестация персонала является одной их важнейших функций управления персоналом...

Пункты решения командира взвода на организацию боя. уяснение полученной задачи; оценка обстановки; принятие решения; проведение рекогносцировки; отдача боевого приказа; организация взаимодействия...

Что такое пропорции? Это соотношение частей целого между собой. Что может являться частями в образе или в луке...

Studopedia.info - Студопедия - 2014-2025 год . (0.012 сек.) русская версия | украинская версия