Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Оперирование элементами списка




Хранение списка

Для того чтобы сохранить информацию обо всем списке, достаточно только одной переменной - указателя на первый элемент этого списка. Обычно его называют головой списка. Указатель на голову должен быть выделенным: с ним нельзя производить никаких действий, которые могут стать причиной утери всего списка. Для работы со списком обычно заводят вспомогательный указатель.

Например: var head,p,q: uk_spisok;

Но, вообще говоря, нет никаких специальных правил, которые обязали бы программиста давать выделенным указателям особые имена. Например, выделенные указатели имеют имена head, tail, tree_root и start.

Обращение к элементам списка Если есть указатель, указывающий на некоторый элемент списка, то содержимое полей этого элемента и даже следующих за ним можно получить так:
p - адрес текущего элемента списка;
p^ - запись из нескольких полей, хранящаяся по адресу p;
p^.znachenie - значение первого поля этой записи;
p^.next_element - значение второго поля этой записи, являющееся адресом следующего элемента списка;
p^.next_element^.znachenie - значение, хранящееся в первом поле элемента списка, следующего за тем, на который указывает р.


Рис. 2. Правила обращения к элементам списка

Создание списков

Предположим, что есть некоторый набор значений (например, в файле), которые необходимо записать в создаваемый односвязный список. Тогда у нас есть две возможности создавать этот список: от хвоста к голове или от головы к хвосту.

Мы приведем здесь обе программы, позволив себе для краткости опустить описания типов, воспользовавшись описанием, показанным в табл. 1 (a):

var head,p: ukazatel; f: text;begin... head:= nil; while not eof(f) do begin new(p); read(f,p^.znach); p^.next:= head; head:= p; end;end. Рис. 3. Очередной шаг процесса генерации списка "от хвоста к голове"
var head,p,q: ukazatel; f: text;begin... if eof(f) then head:= nil else begin new(head); {головной элемент создается отдельно} read(f,head^.znach); head^.next:= nil; q:= head; while not eof(f) do begin new(p); read(f,p^.znach); p^.next:= nil; q^.next:= p; q:= q^.next; end; end;end. Рис. 4. Очередной шаг процесса генерации списка "от головы к хвосту"
Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...