Пример работы с динамическим списком (добавление, удаление, вывод ) — Pascal(Паскаль)

program dinlist1;
type
     s_name=string[20];
     p_student=^student;

     student=record
          name:s_name;
          next:p_student;
     end;
var
     head:p_student; { начало списка }
     buf:s_name;     { буфер для ввода с клавиатуры }

{ добавление в начало списка}
procedure AddToList(var head:p_student;name:s_name);
var
     curr:p_student;
begin
     new(curr);
     curr^.name:=name;
     curr^.next:=head;
     head:= curr;
end;

{ вывод списка }
procedure PrintList(p:p_student);
var
     curr:p_student;
begin
     curr:=p;
     while curr<>NIL do begin
          writeln(curr^.name );
          curr:=curr^.next;
     end;
end;

{Удаление узла из списка }
function DelNode(var head:p_student;name:s_name):boolean;
var
     curr:p_student;
     p:p_student;
     done:boolean;
begin
     p:=NIL;
     curr:=head;
     done:=FALSE;
     while (done=FALSE) and (curr<>NIL) do begin
          if curr^.name=name
          then begin
               if p=NIL
                    then head:=curr^.next
                    else p^.next:=curr^.next;
               done:=TRUE;
          end
          else begin
               p:=curr;
               curr:=curr^.next;
          end;
     end;
     DelNode:=done;
end;

{ основная процедура }
begin
     repeat
          write('Фамилия-> ');
          readln(buf);
          if length(buf)<>0
               then AddToList(head,buf);
     until length(buf)=0;
     
     writeln('** Введенный список **');
     PrintList(head);
     
     writeln('** Удаление из списка **');
     repeat
          write('Фамилия-> ');
          readln(buf);
          if length(buf)<>0 then
               if DelNode(head,buf)
                    then writeln('Элемент "',buf,'" удален из списка.')
                    else writeln('Элемента "',buf,'" в списке нет');
     until length(buf)=0;
     writeln ('** Список после удаления узлов **');
     PrintList(head);
end.

Leave a Comment

73 − = 66