Удаление одинаковых элементов списка - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

Как подправить процедуру delete чтобы она удаляла элементы из первого списка, которые входят из второй. Сейчас удаляет только одинаковые элементы первого списка.

Решение задачи: «Удаление одинаковых элементов списка»

textual
Листинг программы
type
  TData=Integer;
  
  PNode=^TNode;
  TNode=record 
    next: PNode; data: TData;  
  end;
 
function Find(p: PNode; e: TData): PNode;
begin
  while (p<>nil) and (p^.data<>e) do p:=p^.next;
  Find:=p;
end;
 
procedure Delete(var p: PNode; q: PNode);
var t: ^PNode; d: PNode;
begin
  t:=@p;
  while t^<>nil do begin
    if Find(q,t^^.data)=nil then t:=@t^^.next
    else begin
      d:=t^; t^:=t^^.next; Dispose(d);
    end;
  end;
end;
 
function NewNode(AData: TData; ANext: PNode): PNode;
var p: PNode;
begin
  New(p); NewNode:=p; p^.data:=AData; p^.next:=ANext;
end;
 
procedure Add(var p: PNode; const s: String);
var
  t: TData;
  n: Integer;
begin
  WriteLn(s);
  Write('Количество элементов: '); ReadLn(n);
  Write('Элементы: ');
  for n:=1 to n do begin
    Read(t); p:=NewNode(t,p);
  end; ReadLn;
end;
 
procedure Show(p: PNode);
begin
  while p<>nil do with p^ do begin
    Write(' ',data); p:=next;
  end; WriteLn;
end;
 
var
  f, s: PNode;
  i: Integer;
begin
  Add(f,'Список 1');
  Add(s,'Список 2');
  Delete(f,s);
  WriteLn('Список 1 без элементов из 2: '); Show(f);
end.

Объяснение кода листинга программы

  1. В функции Find происходит поиск элемента в списке. Функция возвращает указатель на найденный элемент или nil, если элемент не найден.
  2. В процедуре Delete происходит удаление элемента из списка. Если указанный элемент уже был удален, то его память освобождается.
  3. В функции NewNode создается новый узел списка с заданными данными и указателем на следующий узел.
  4. В процедуре Add добавляются элементы в список. Данные элементов считываются с консоли, создаются новые узлы и добавляются в список.
  5. В процедуре Show происходит вывод списка на экран. Каждый элемент выводится пробелом.
  6. В основной программе создаются два списка, добавляются элементы в них, затем удаляются. Выводится список без элементов из другого списка.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.286 из 5
Похожие ответы