В списке целых чисел удалить из каждой группы подряд идущих одинаковых элементов все, кроме одного - Turbo Pascal

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

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

Здравствуйте, Вы не могли бы помочь с задачей контрольной работы? "Составить программу. В списке целых чисел удалить из каждой группы подряд идущих одинаковых элементов все, кроме одного." Буду премного благодарен. ------------------------------------------------ С Уважением, superuser!

Решение задачи: «В списке целых чисел удалить из каждой группы подряд идущих одинаковых элементов все, кроме одного»

textual
Листинг программы
const
  maxRandom = 2;
  lenList   = 100;
  
type
  tList = ^rList;
  rList = record
    N : Integer;
    P, X : tList;
  end;
 
function CreateList : tList;
var
  L : tList;
  i : Byte;
begin
  Randomize;
  New(L);
  L^.N := Random(maxRandom + 1);
  L^.X := nil;
  for i := 1 to lenList - 1 do
    begin
      New(L^.P);
      L^.P^.X := L;
      L := L^.P;
      L^.N := Random(maxRandom + 1);
    end;
  L^.P := nil;
  CreateList := L;
end;
 
procedure OutList(L : tList);
begin
  Write('Список:');
  while L <> nil do
    begin
      Write(#32, L^.N);
      L := L^.X;
    end;
  WriteLn;
end;
 
procedure TransformList(var L : tList);
var
  cur, tmp : tList;
begin
  cur := L;
  while cur <> nil do
    begin
      if (cur^.X <> nil) and (cur^.N = cur^.X^.N) then
        begin
          tmp := cur^.X;
          cur^.X := tmp^.X;
          if tmp^.X <> nil then
            cur^.X^.P := cur;
          Dispose(tmp);
        end
      else
        cur := cur^.X;
    end;
end;
 
var
  L : tList;  
begin
  L := CreateList;
  OutList(L);
  TransformList(L);
  OutList(L);
end.

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

  1. В функции CreateList создается новый список, в котором каждый элемент является ссылкой на предыдущий элемент списка, за исключением первого элемента, который является самостоятельным элементом. Это достигается путем использования цикла for, который выполняется от 1 до lenList-1, и в каждой итерации создается новый элемент, который ссылается на предыдущий элемент списка.
  2. В процедуре OutList выводится содержимое списка, начиная с самого первого элемента. Для этого используется цикл while, который выполняется до тех пор, пока L не станет равным nil. На каждой итерации выводится значение N текущего элемента списка, а затем происходит переход к следующему элементу, который хранится в X.
  3. В процедуре TransformList происходит преобразование списка. Для этого используется цикл while, который выполняется до тех пор, пока текущий элемент списка не станет равным nil. Внутри цикла проверяется условие, что X равен P текущего элемента списка. Если это условие выполняется, то текущий элемент списка копируется в новый элемент, создается новый элемент, который ссылается на предыдущий элемент списка, и затем происходит переход к следующему элементу, который хранится в X. Если условие не выполняется, то текущий элемент списка просто переходит к следующему элементу.

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


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

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

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