Удаление элемента из списка
End.
Begin
End
Begin
Then
Repeat
Begin
Begin
Repeat
Begin
5 9 -3 -2 17 -12 15
5 9 -3 -2 17 -12 15
Такого элемента в списке нет
5 9 -3 -2 17 -12 15
5 -3 -2 17 -12 15
5 -3 -2 17 -12
Вставка элементов в список
5 -3 17 -12
Создание списка
Первое число: -12
Следующее число: 17
Следующее число: -3
Следующее число: 5
Следующее число: 0
Введено чисел: 4
Введенные числа:
Новый элемент: -2
После какого: -3
Новый список:
Новый элемент: 15
После какого: -12
Новый список:
Новый элемент: 9
После какого: 5
Новый список:
Новый элемент: 20
После какого: 10
Список:
Новый элемент: 0
Список:
Программа:
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;
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 адрес головы списка
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; процедура вывода списка
q := head^.Next;текущую ссылку – на первый элемент
While (q <> Nil) Doпока не конец списка
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);
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) ищем нужный элемент
flag := 1; если элемент найден:
Break; выходим из цикла поиска
Else q := q^.Next; иначе делаем шаг по списку
If (flag = 0) Then если элемент не найден:
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;
Пусть имеется связный список из трех чисел: 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 то выходим из цикла поиска,