Регистрация
Войти
Стать экспертом Правила
Информатика

Используя линейный односвязный список найти введённое с клавиатуры число, удалить число стоящий перед найденным за 1 позицию и вставить число, введённый с
клавиатуры, перед найденным .Pascal.
через указатели
{New(x); {выделение места в памяти для переменной типа Spisok}
x^.Data : = 3; { заполним поле Data первого элемента}
x^.Next : = Nil; {заполним поле Next первого элемента: указатель в Nil }
Head : = x; {установим указатель головы списка на первый элемент}}-Пример

ОТВЕТЫ
// Использование указателей для создания односвязного списка
// Сделано на базе демонстрационного примера PascalABC.Net
//
// PascalABC.NET 3.2, сборка 1325 от 19.10.2016
type
  PNode=^TNode;
  TNode=record
    data:integer;
    next:PNode;
  end;

function NewNode(d:integer;n:PNode):PNode;
begin
  New(Result);
  Result^.data:=d;
  Result^.next:=n;
end;

procedure WriteNode(a:PNode);
// Вывод односвязного списка
begin
  Writeln(Содержимое односвязного списка: );
  var p:=a;
  while plt;gt;nil do begin
    Write(p^.data, );
    p:=p^.next;
    end;
  Writeln
end;

function SeekNode(k:integer;a:PNode):PNode;
// Поиск элемента со значением k в списке
begin
  var p:=a;
  Result:=Nil;
  while plt;gt;nil do begin
    if p^.data=k then begin Result:=p; break end;
    p:=p^.next
    end
end;

function PredNode(a,f:PNode):PNode;
// Поиск предшественника f среди a
begin
  var p:=a;
  while p^.nextlt;gt;f do p:=p^.next;
  Result:=p
end;

procedure Clear(a:pNode);
// Разрушение односвязного списка
begin
  var p:=a;
  while plt;gt;nil do begin
    var p1:=p;
    p:=p^.next;
    Dispose(p1); // Память обязательно возвращать
    end
end;

var
  first,found,father,grandfather,greatgrandfather:PNode;
 
begin
  Randomize;
  first:=nil;
  for var i:=1 to 10 do
    first:=NewNode(Random(100),first);
  WriteNode(first); // первоначальное состояние списка
  var k:=ReadInteger(Введите число для поиска в списке);
  found:=SeekNode(k,first);
  if foundlt;gt;nil then begin
    father:=PredNode(first,found); // отец
    grandfather:=PredNode(first,father); // дед
    greatgrandfather:=PredNode(first,grandfather); // прадед
    greatgrandfather^.next:=father;
    Writeln(Элемент ,grandfather^.data, удален);
    Dispose(grandfather);
    WriteNode(first);
    k:=ReadInteger(Введите число для вставки);
    father^.next:=NewNode(k,found);
    WriteNode(first);
    end
  else Writeln(Такого числа в списке нет);
  Clear(first)
end.  

Пример
Содержимое односвязного списка:
11 75 44 86 88 83 92 18 4 23
Введите число для поиска в списке 88
Элемент 44 удален
Содержимое односвязного списка:
11 75 86 88 83 92 18 4 23
Введите число для вставки 40
Содержимое односвязного списка:
11 75 86 40 88 83 92 18 4 23
233
Контакты
Реклама на сайте
Спрошу
О проекте
Новым пользователям
Новым экспертам