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

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

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





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

Объекты называются элементами списка. Элементом списка обычно является запись, которая содержит, по крайней мере, два поля (рис. 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 оперирует с двумя категориями...


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


Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

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

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

Примеры задач для самостоятельного решения. 1.Спрос и предложение на обеды в студенческой столовой описываются уравнениями: QD = 2400 – 100P; QS = 1000 + 250P   1.Спрос и предложение на обеды в студенческой столовой описываются уравнениями: QD = 2400 – 100P; QS = 1000 + 250P...

Шрифт зодчего Шрифт зодчего состоит из прописных (заглавных), строчных букв и цифр...

Краткая психологическая характеристика возрастных периодов.Первый критический период развития ребенка — период новорожденности Психоаналитики говорят, что это первая травма, которую переживает ребенок, и она настолько сильна, что вся последую­щая жизнь проходит под знаком этой травмы...

РЕВМАТИЧЕСКИЕ БОЛЕЗНИ Ревматические болезни(или диффузные болезни соединительно ткани(ДБСТ))— это группа заболеваний, характеризующихся первичным системным поражением соединительной ткани в связи с нарушением иммунного гомеостаза...

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