Дописать в начало списка элементы, которые входят в L1, но не входят в L2 - PascalABC.NET

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

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

Дано задание: "Cформировать список L из элементов, которые входят одновременно в списки L1 и L2. Дописать в начало элементы, которые входят в L1, но не входят в L2, а в конец - элементы, которые входят в L2, но не входят в L1". Процедуру создания/заполнения списка и вывода написал, но не могу разобраться, как создать список L из элементов, которые входят одновременно в списки L1 и L2 и дальше( Помогите пожалуйста!
Листинг программы
  1. Program Lists;
  2. Type PLink=^TElement;
  3. TElement=Record
  4. data:integer;
  5. next:PLink;
  6. End;
  7. Var L1,L2, L:PLink;
  8. t, temp:integer;
  9. Procedure Input(Var u:PLink);
  10. Var ElNew, ElPred: PLink;
  11. Value: integer;
  12. i,n:integer;
  13. Begin
  14. readln(n);
  15. u:=Nil;
  16. Writeln('Введите элементы списка: ');
  17. For i:=1 to n do
  18. Begin
  19. Read(Value);
  20. New(ElNew);
  21. ElNew^.Data:=Value;
  22. ElNew^.next:=Nil;
  23. if u=nil
  24. then
  25. u:=ElNew
  26. Else
  27. ElPred^.next:=ElNew;
  28. ElPred:=ElNew;
  29. End;
  30. End;
  31. Procedure Vivod(u:PLink;ch:string);
  32. Begin
  33. if u=nil then
  34. Begin
  35. writeln('Список пуст!Для продолжения нажмите Enter');
  36. readln;
  37. Exit;
  38. End;
  39. writeln('Список ',ch);
  40. While u<>nil do
  41. Begin
  42. write(u^.data,' ');
  43. u:=u^.next;
  44. End;
  45. writeln;
  46. End;
  47. Procedure Delete(Var u:PLink);
  48. Var x:PLink;
  49. Begin
  50. While u<>nil do
  51. Begin
  52. x:=u;
  53. u:=u^.next;
  54. Dispose(x);
  55. End;
  56. End;
  57. Procedure Soed(Var L1:PLink; Var L2:PLink; Var L:Plink);
  58. Var a, b, c:integer;
  59. Begin
  60. a := 0;
  61. b := 0;
  62. c := 0;
  63. While L1<>nil do
  64. Begin
  65. a:=L1^.data;
  66. writeln('_-_-_-_-_ ',a);
  67. L1:=L1^.next;
  68. While L2<>nil do
  69. Begin
  70. b:=L2^.data;;
  71. L2:=L2^.next;
  72. if (a=b) then Begin
  73. L:=a;
  74. L^.next:=Nil;
  75. End;
  76. End;
  77. End;
  78. End;
  79. Begin
  80. write('Введите кол-во элеметов списка "L1": ');
  81. Input(L1);
  82. Vivod(L1, 'L1');
  83. write('Введите кол-во элеметов списка "L2": ');
  84. Input(L2);
  85. Vivod(L2,'L2');
  86. Soed(L1,L2,L);
  87. Vivod(L,'L');
  88. Delete(L1);
  89. Delete(L2);
  90. Delete(L);
  91. End.

Решение задачи: «Дописать в начало списка элементы, которые входят в L1, но не входят в L2»

textual
Листинг программы
  1. type
  2.   PLink = ^TElement;
  3.   TElement = Record
  4.     data: integer;
  5.     next: PLink;
  6.   End;
  7.  
  8. procedure Input(var u: PLink);
  9. var
  10.   ElNew, ElPred: PLink;
  11.   Value: integer;
  12.   i, n: integer;
  13. begin
  14.   readln(n);
  15.   u := nil;
  16.   Writeln('Введите элементы списка: ');
  17.   for i := 1 to n do
  18.     begin
  19.       Read(Value);
  20.       New(ElNew);
  21.       ElNew^.Data := Value;
  22.       ElNew^.next := nil;
  23.       if u = nil then
  24.         u := ElNew
  25.       Else
  26.         ElPred^.next := ElNew;
  27.       ElPred := ElNew;
  28.     end;
  29. end;
  30.  
  31. procedure Vivod(u: PLink; ch: string);
  32. begin
  33.   if u = nil then
  34.     begin
  35.       writeln('Список пуст!Для продолжения нажмите Enter');
  36.       readln;
  37.       Exit;
  38.     end;
  39.   writeln('Список ', ch);
  40.   while u <> nil do
  41.     begin
  42.       write(u^.data, ' ');
  43.       u := u^.next;
  44.     end;
  45.   writeln;
  46. end;
  47.  
  48. procedure Delete(var u: PLink);
  49. var
  50.   x: PLink;
  51. begin
  52.   while u <> nil do
  53.     begin
  54.       x := u;
  55.       u := u^.next;
  56.       Dispose(x);
  57.     end;
  58. end;
  59.  
  60. /// Функция inList возвращает True если данный элемент входит в список
  61. function inList(data : integer; L : PLink) : Boolean;
  62. begin
  63.   Result := True;
  64.   while L <> nil do
  65.     if L^.data = data then
  66.       Exit
  67.     else
  68.       L := L^.next;
  69.   Result := False;
  70. end;
  71.  
  72. /// Процедура добавляет УНИКАЛЬНЫЙ элемент к списку
  73. procedure Add(data : integer; var L : PLink);
  74. begin
  75.   if L = nil then
  76.     begin
  77.       New(L); L^.data := data; L^.next := nil;
  78.     end
  79.   else
  80.     begin
  81.       var Cur := L;
  82.       var Last : PLink;
  83.       repeat
  84.         if Cur^.data = data then Exit;
  85.         Last := Cur; Cur := Cur^.next;
  86.       until Cur = nil;
  87.       New(Last^.next); Last := Last^.next; Last^.data := data; Last^.next := nil;
  88.     end;
  89. end;
  90.  
  91. procedure Soed(L1: PLink; L2: PLink; var L: Plink);
  92. begin
  93.   L := nil;
  94.   while L1 <> nil do
  95.     begin
  96.       if inList(L1^.data, L2) then
  97.         Add(L1^.data, L);
  98.       L1 := L1^.next;
  99.     end;
  100. end;
  101.  
  102. var
  103.   L1, L2, L: PLink;
  104. begin
  105.   write('Введите кол-во элеметов списка "L1": '); Input(L1); Vivod(L1, 'L1');
  106.   write('Введите кол-во элеметов списка "L2": '); Input(L2); Vivod(L2, 'L2');
  107.  
  108.   Soed(L1, L2, L); Vivod(L, 'L');
  109.  
  110.   Delete(L1);
  111.   Delete(L2);
  112.   Delete(L);
  113. end.

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

  1. Ввод данных о количестве элементов списков L1 и L2
  2. Ввод элементов списка L1
  3. Вывод списка L1
  4. Ввод элементов списка L2
  5. Вывод списка L2
  6. Начало процедуры Soed. На этом этапе список L инициализируется как пустой.
  7. Проверка каждого элемента списка L1. Если элемент присутствует в списке L2, он добавляется в список L.
  8. Цикл продолжается до тех пор, пока все элементы списка L1 не будут проверены.
  9. Вывод списка L.
  10. Удаление списка L1.
  11. Удаление списка L2.
  12. Удаление списка L.

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


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

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

12   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы