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