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

Ответы 1

  • // Использование указателей для создания односвязного списка// Сделано на базе демонстрационного примера 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 p<>nil do begin    Write(p^.data,' ');    p:=p^.next;    end;  Writelnend;function SeekNode(k:integer;a:PNode):PNode;// Поиск элемента со значением k в спискеbegin  var p:=a;  Result:=Nil;  while p<>nil do begin    if p^.data=k then begin Result:=p; break end;    p:=p^.next    endend;function PredNode(a,f:PNode):PNode;// Поиск предшественника f среди abegin  var p:=a;  while p^.next<>f do p:=p^.next;  Result:=pend;procedure Clear(a:pNode);// Разрушение односвязного спискаbegin  var p:=a;  while p<>nil do begin    var p1:=p;    p:=p^.next;    Dispose(p1); // Память обязательно возвращать    endend;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 found<>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
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years