Составить программу, которая формирует список, добавляет в него произвольное количество компонент, выполняет вставку и удаление компоненты по ключу, а затем читает и выводит весь список на экран дисплея. В качестве данных взять строку символов. Ввод данных — с клавиатуры дисплея, признак конца ввода — строка символов END — Pascal(Паскаль)

Program LISTLINKED;
  uses Crt;
  type
   Alfa= String[10];
   PComp= ^Comp;
   Comp= record
          sD:Alfa;
          pNext:PComp
         end;
  var
   pBegin, pEnd, pAux, pCKey, pPreComp: PComp;
   sC, sKey: Alfa;
   bCond: Boolean;
  Procedure CreateLL(var pBegin,pEnd: PComp; var sC: Alfa);
   begin
    New(pBegin);
    pBegin^.pNext:=NIL;
    pBegin^.sD:=sC;
    pEnd:=pBegin
   end;
  Procedure AddLL(var pEnd: PComp; var sC: Alfa);
   var pAux: PComp;
   begin
    New(pAux);
    pAux^.pNext:=NIL;
    pEnd^.pNext:=pAux;
    pEnd:=pAux;
    pEnd^.sD:=sC
   end;
  Procedure Find(var sKey: Alfa; var pBegin,pCKey,pPreComp: PComp;
                 var bCond: Boolean);
   begin
    pCKey:=pBegin;
    while (pCKey <> NIL) and (sKey <> pCKey^.D) do
     begin
      pPreComp:=pCKey;
      pCKey:=pCKey^.pNext
     end;
    if (pCKey = NIL) and (sKey <> pCKey^.sD) then bCond:=FALSE
                                             else bCond:=TRUE
   end;
  Procedure InsComp(var sKey,sC: Alfa);
   var pAux:PComp;
   begin
    Find(sKey,pBegin,pCKey,pPreComp,bCond);
    New(pAux);
    pAux^.sD:=sC;
    pAux^.pNext:=pCKey^.pNext;
    pCKey^.pNext:=pAux
   end;
  Procedure DelComp(var sKey: Alfa; var pBegin: PComp);
   begin
    Find(sKey,pBegin,pCKey,pPreComp,bCond);
    pPreComp^.pNext:=pCKey^.pNext
   end;
  begin
   ClrScr;
   writeln('  ВВЕДИ СТРОКУ ');
   readln(sC);
   CreateLL(pBegin,pEnd,sC);
   repeat
    writeln('ВВЕДИ СТРОКУ ');
    readln(sC);
    AddLL(pEnd,sC)
   until sC='END';
   writeln(' ***** ВЫВОД ИСХОДНОГО СПИСКА *****');
   pAux:=pBegin;
   repeat
    writeln(pAux^.sD);
    pAux:=pAux^.pNext;
   until pAux=NIL;
   writeln;
   writeln('ВВЕДИ КЛЮЧ ДЛЯ ВСТАВКИ СТРОКИ');
   readln(sKey);
   writeln('ВВЕДИ ВСТАВЛЯЕМУЮ СТРОКУ');
   readln(sC);
   InsComp(sKey,sC);
   writeln;
   writeln('ВВЕДИ КЛЮЧ УДАЛЯЕМОЙ СТРОКИ');
   readln(sKey);
   DelComp(sKey,pBegin);
   writeln;
   writeln(' ***** ВЫВОД ИЗМЕНЕННОГО СПИСКА *****');
    pAux:=pBegin;
    repeat
     writeln(pAux^.sD);
     pAux:=pAux^.pNext;
    until pAux=NIL
  end.

Leave a Comment

75 − = 68