Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...
Топ:
Определение места расположения распределительного центра: Фирма реализует продукцию на рынках сбыта и имеет постоянных поставщиков в разных регионах. Увеличение объема продаж...
Установка замедленного коксования: Чем выше температура и ниже давление, тем место разрыва углеродной цепи всё больше смещается к её концу и значительно возрастает...
Основы обеспечения единства измерений: Обеспечение единства измерений - деятельность метрологических служб, направленная на достижение...
Интересное:
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Инженерная защита территорий, зданий и сооружений от опасных геологических процессов: Изучение оползневых явлений, оценка устойчивости склонов и проектирование противооползневых сооружений — актуальнейшие задачи, стоящие перед отечественными...
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Дисциплины:
2017-09-27 | 265 |
5.00
из
|
Заказать работу |
|
|
Пусть имеется связный список из трех чисел : 5, -3, -12.
Добавим в описание переменных переменную ссылочного типа r:
Var head, q, r: TPoint;
Список сформирован, и значениями переменных head и q является ссылка на первый элемент списка:
Необходимо после элемента - 3вставить элемент с информационной частью, равной 17.
Для включения нового элемента в готовый список выполняются следующие действия:
1. создается новый элемент и заполняется его информационное поле:
New(r);
r^.Inf:= 17;
2. в списке находится элемент, после которого должен стоять новый, в данном случае элемент -3; для этого используем переменную q:
While (q <> Nil) Do пока не дошли до конца списка
If (q^.Inf = -3) если нашли нужный элемент,
Then Break то выходим из цикла поиска,
Else q:= q^.Next; иначе делаем шаг по списку
сейчас ссылка q указывает на элемент -3, то есть q^.Inf = -3, а поле q^.Next содержит адрес элемента -12:
3. в ссылочное поле нового элемента r^.Next помещается адрес, стоящий в ссылочном поле найденного элемента (адрес следующего за ним элемента, в данном случае элемента -12, этот адрес хранится в q^.Next):
r^.Next:= q^.Next;
сейчас оба элемента (17 и -3) будут соединены с элементом -12,
4. в ссылочное поле найденного элемента -3 q^.Next помещается адрес нового элемента 17, который хранится на ссылке r:
q^.Next:= r;
Пример: сформировать список из элементов 5, -3, 17, -12 и вывести его на экран. Добавлять с клавиатуры новые элементы после заданных (конец ввода – число 0), каждый раз выводя новый список на экран.
Интерфейс:
Создание списка
Первое число: -12
Следующее число: 17
Следующее число: -3
Следующее число: 5
Следующее число: 0
Введено чисел: 4
Введенные числа:
|
5 -3 17 -12
Вставка элементов в список
Новый элемент: -2
После какого: -3
Новый список:
5 -3 -2 17 -12
Новый элемент: 15
После какого: -12
Новый список:
5 -3 -2 17 -12 15
Новый элемент: 9
После какого: 5
Новый список:
5 9 -3 -2 17 -12 15
Новый элемент: 20
После какого: 10
Такого элемента в списке нет
Список:
5 9 -3 -2 17 -12 15
Новый элемент: 0
Список:
5 9 -3 -2 17 -12 15
Программа:
Program Spisok;
Uses CRT;
Type TPoint = ^TElement;
TElement = Record
Inf: Integer;
Next: TPoint;
End;
Var head, q, r: TPoint;
posle: Integer;
flag: 0..1; флаг поиска (0 – элемент не найден)
Procedure Formir_spisok;
Begin
New(head); head - указатель на голову списка
head^.Inf:= 0; количество элементов в списке
head^.Next:= Nil; списка еще нет
New(q); формируем первый элемент
Write(‘Первое число: ’);
ReadLn(q^.Inf); вводим его информационную часть
If (q^.Inf=0) если ввели 0,
Then Exit; то выходим из процедуры
head^.Inf:= 1; в списке один элемент
q^.Next:= head^.Next; помещаем его в голову списка
head^.Next:= q; в head^.Next адрес головы списка
Repeat
New(q); формируем очередной элемент
Write(‘Очередное число: ’);
ReadLn(q^.Inf); вводим его информационную часть
If (q^.Inf=0) если ввели 0,
Then Break; то выходим из цикла ввода
head^.Inf:= head^.Inf + 1; увеличиваем счетчик элементов на 1
q^.Next:= head^.Next; вставляем элемент в голову списка
head^.Next:= q; в head^.Next адрес головы списка
Until (q^.Inf = 0);
End;
Procedure Vyvod_spisok; процедура вывода списка
Begin
q:= head^.Next; текущую ссылку – на первый элемент
While (q <> Nil) Do пока не конец списка
Begin
Write(q^.Inf:5); выводим очередной элемент
q:= q^.Next; ссылку – на следующий элемент
End;
WriteLn;
End;
Begin головная программа
ClrScr;
WriteLn(‘Создание списка’);
WriteLn;
Formir_spisok; обращение к процедуре создания списка
WriteLn(‘Введено чисел: ’, head^.Inf);
WriteLn(‘Введенные числа:’);
Vyvod_spisok; обращение к процедуре вывода списка
WriteLn;
WriteLn(‘Вставка элементов в список’);
WriteLn;
Repeat
New(r);
WriteLn;
Write(‘Новый элемент: ’);
ReadLn(r^.Inf); информационная часть нового элемента
If (r^.Inf = 0) если она равна нулю,
|
Then Break; то выходим из цикла ввода
Write(‘После какого: ’);
ReadLn(posle);
flag:= 0; флаг поиска равен нулю – элемент пока не найден
q:= head^.Next; поисковый указатель q – в голову списка
While (q <> Nil) Do пока не конец списка
If (q^.Inf = posle) ищем нужный элемент
Then
Begin
flag:= 1; если элемент найден:
Break; выходим из цикла поиска
End
Else q:= q^.Next; иначе делаем шаг по списку
If (flag = 0) Then если элемент не найден:
Begin
WriteLn(‘Такого элемента в списке нет’);
WriteLn(‘Список:’);
Vyvod_spisok; выводим список
Continue; и продолжаем цикл ввода
End;
r^.Next:= q^.Next; если элемент найден,
q^.Next:= r; то вставляем его в список
head^.Inf:= head^.Inf + 1; увеличиваем счетчик элементов на единицу
WriteLn;
WriteLn(‘Новый список:’);
Vyvod_spisok; выводим новый список
Until (r^.Inf = 0); окончание цикла ввода
WriteLn(‘Список:’);
Vyvod_spisok; выводим окончательный список
ReadLn;
End.
Удаление элемента из списка
Пусть имеется связный список из трех чисел : 5, -3, -12.
Список сформирован, и значениями переменных head и q является ссылка на первый элемент списка:
Необходимо удалить из списка элемент - 3.
Для удаления (исключения) существующего элемента из списка выполняются следующие действия:
1. указатели q (поисковый) и r (отстает от поискового на шаг) ставим в голову списка:
q:= head^.Next; на первый элемент списка
r:= head; на указатель на голову списка
2. в списке отыскивается удаляемый элемент, для этого используем поисковый указатель q:
While (q <> Nil) Do пока не дошли до конца списка
If (q^.Inf = -3) если нашли нужный элемент,
Then Break то выходим из цикла поиска,
Else
Begin
r:= q; иначеподтягиваем r к q
q:= q^.Next; и делаем шаг по списку указателем q
End;
сейчас ссылка q указывает на элемент -3, то есть q^.Inf = -3, а поле q^.Next содержит адрес элемента -12. Ссылка r указывает на предыдущий элемент списка, то есть на 5, а в r^.Next содержится адрес удаляемого элемента - r^.Next = q:
3. в ссылочное поле r^.Next помещается адрес, хранящийся в q^.Next, то есть адрес элемента -12:
r^.Next:= q^.Next;
Сейчас оба элемента (5 и -3) будут соединены с элементом -12,
а связь между элементами 5 и -3 разрывается.
4. освобождаем память от удаленного элемента -3 и возвращаем указатели q и r в голову списка:
Dispose(q); удаляем из памяти элемент -3
q:= head^.Next; на первый элемент списка
r:= head; на указатель на голову списка
Пример: сформировать список из элементов 5, -3, 17, -12 и вывести его на экран. Удалить из списка несколько элементов (конец удаления – число 0), каждый раз выводя новый список на экран.
|
Интерфейс:
Создание списка
Первое число: -12
Следующее число: 17
Следующее число: -3
Следующее число: 5
Следующее число: 0
Введено чисел: 4
Введенные числа:
5 -3 17 -12
|
|
Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...
Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!