Форум программистов, компьютерный форум, киберфорум
Наши страницы
PascalABC.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Барбадос
0 / 0 / 0
Регистрация: 04.04.2015
Сообщений: 12
1

Удалить из списка L все элементы, которые есть в списке L1

07.04.2015, 10:14. Просмотров 983. Ответов 1
Метки нет (Все метки)

Используйте линейные списки для хранения последовательности чисел. Опишите процедуру или функцию, которая:
a) вставляет в список L за первым вхождением элемента E все элементы списка L1, если E входит в L
б) удаляет из списка L все элементы, которые есть в списке L1.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2015, 10:14
Ответы с готовыми решениями:

Удалить из списка L1 все элементы, которые входят в список L2
Даны списки L1 и L2, элементы которых являются целыми числами. Удалить из списка L1 все элементы,...

В динамическом списке найти первый наименьший и последний наибольший элементы и удалить все элементы, расположенные между ними.
Дан список из целых чисел, найти первое из всех минимальных значений и последнее из всех...

Удалить все элементы, равные полусумме своих соседей в исходном списке
Дан список из n целых чисел a1, a2,..., an. Удалить все элементы, равные полусумме своих соседей в...

Удалить из второго массива элементы которые есть в первом
И так, уважаемые знатоки, у меня есть два массива, вот к примеру : первый массив - 1 6 6 5 8 9 ...

Удалить из списка все элементы с нечетными значениями
Дано указатель Р1 на первый элемент двозвязного списка, содержащего не менее двух элементов....

1
Konstantin_c13
0 / 0 / 1
Регистрация: 01.04.2015
Сообщений: 1
27.07.2015, 17:19 2
Лучший ответ Сообщение было отмечено Барбадос как решение

Решение

По пункту А все известно, по пункту Б хз:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
uses
  crt;
type
  {Тип основных данных,по условиям задания у нас циферки.}
  TData = Integer;
  {Тип указателя на элемент списка.}
  TPElem = ^TElem;
  {Тип элемента списка.}
  TElem = record
    Data : TData; {Основные данные.}
    PNext : TPElem; {Указатель на следующий элемент списка.}
  end;
  {Тип, описывающий однонаправленный список.}
  TDList = record
    PFirst, PLast : TPElem; {Указатели на первый и на последний элементы списка.}
  end;
 
{Начальная инициализация списка. Внимание! Эту процедуру можно выполнять
только в отношении пустого списка! Иначе - будут утечки памяти.}
procedure Init(var aList : TDList);
begin
  aList.PFirst := nil;
  aList.PLast := nil;
end;
 
{Добавление элемента в конец однонаправленного списка.}
procedure Add(var aList : TDList; const aData : TData);
var
  PElem : TPElem;
begin
  New(PElem); {Выделяем память для нового элемента.}
  PElem^.Data := aData; {Запись основных данных.}
  {Указатель на следующий элемент равен nil, т. к. это последний элемент в списке.}
  PElem^.PNext := nil;
  {Если список пуст, то новый элемент становится первым элементом списка.}
  if aList.PFirst = nil then
    aList.PFirst := PElem
  {Если список непустой, то новый элемент прикрепляется к последнему элементу списка.}
  else
    aList.PLast^.PNext := PElem;
  aList.PLast := PElem; {Новый элемент становится последним элементом списка.}
end;
 
{Особождение памяти, занятой под список.}
procedure LFree(var aList : TDList);
var
  PNext, PDel : TPElem;
begin
  PNext := aList.PFirst;
  while PNext <> nil do begin
    PDel := PNext;
    PNext := PNext^.PNext;
    Dispose(PDel);
  end;
  Init(aList);
end;
 
{Распечатка однонаправленного списка.}
procedure LWriteln(const aList : TDList);
var
  PElem : TPElem;
begin
  if aList.PFirst = nil then
    Write('Список пуст.')
  else begin
    PElem := aList.PFirst;
    while PElem <> nil do begin
      if PElem <> aList.PFirst then Write(', ');
      Write(PElem^.Data);
      PElem := PElem^.PNext;
    end;
  end;
  Writeln;
end;
 
{Диалог добавления элементов в список.}
procedure WorkAdd(var aL : TDList);
var
  S : String;
  i : Integer;
  Data : TData;
begin
  Writeln('Прекратить ввод - пустая строка + Enter.');
  i := 0;
  repeat
    Write('Новый элемент ', i + 1, ': ');
    Readln(S);
    if S <> '' then begin
      if TryStrToInt(S, Data) then begin
        Inc(i);
        Add(aL, Data);
      end else
        Writeln('Неверный ввод! Повторите.');
    end;
  until S = '';
end;
 
{Решение задачи.
Вставить в список L за первым вхождением элемента Е все элементы списка L1,
если Е входит в L1.
Если список L1 вставлен в список L, то функция возвращает порядковый
номер первого элемента E в первом списке.
В противном случае, функция возвращает значение = 0.}
function Proc(var aL, aL1 : TDList; const aE : TData) : Integer;
var
  PElem, PE : TPElem;
  Res : Integer;
begin
  Result := 0;
  {Ищем в первом списке первый элемент со значением E.}
  Res := 0; {Порядковый номер найденного элемента.}
  PE := aL.PFirst; {Указатель на текущий элемент списка.}
  while (PE <> nil) and (PE^.Data <> aE) do begin
    Inc(Res);
    PE := PE^.PNext; {Получаем указатель на следующий элемент списка.}
  end;
  {Если элемент E найден в первом списке.}
  if PE <> nil then begin
      aL1.PLast^.PNext := PE^.PNext;
      PE^.PNext := aL1.PFirst;
      Init(aL1);
      Result := Res;
  end;
end;
 
var
  L, L1 : TDList;
  E : TData;
  Res : Integer;
  F : Boolean;
  S : String;
begin
  {Начальная инициализация списков.}
  Init(L);
  Init(L1);
 
  repeat
    Writeln('Добавление элементов в первый список.');
    WorkAdd(L);
    Writeln('Составлен список:');
    LWriteln(L);
    Write('Для продолжения нажмите Enter. ');
    Readln;
 
    Writeln('Добавление элементов во второй список.');
    WorkAdd(L1);
    Writeln('Составлен список:');
    LWriteln(L1);
    Write('Для продолжения нажмите Enter. ');
    Readln;
 
    repeat
      Write('Задайте значение искомого элемента (E): ');
      Readln(S);
      F := TryStrToInt(S, E);
      if not F then
        Writeln('Неверный ввод! Повторите.');
    until F;
 
    {Решение задачи.}
    Res := Proc(L, L1, E);
 
    if Res > 0 then begin
      Writeln('Элемент найден в первом списке. Его порядковый номер: ', Res+1);
      Writeln('После найденного элемента вставлен второй список.');
    end
    else begin
      Writeln('Искомый элемент в первом списке не обнаружен.');
      Writeln('Первый список остался без изменений.');
    end;
    Writeln('Первый список:');
    LWriteln(L);
 {А сюда вклиню процедурку по сопоставлению L и L1 b и удалению элементов}
    {Освобождение памяти, занятой под списки.}
    LFree(L);
    LFree(L1);
    Writeln('Память, занятая под списки, освобождена.');
 
    Writeln('Повторить - Enter. Выход - любой символ + Enter.');
    Readln(S);
  until S <> '';
end.
З.Ы. Спасибо ребятам из этой темы: Описать и проверить процедуру или функцию, которая вставляет в список L за первым вхождением элемента Е все элементы списка L1, если Е входит в L1.
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.07.2015, 17:19

Удалить из списка все элементы с нечетными номерами
Можете переделать эту програму так : дано указатель Р1 на первый элемент двухсвязного списка,...

Удалить все элементы двунаправленного списка равные 10
Создать двунаправленный список, ввести элементы. Из введенных элементов удалить все, равные 10....

Объединить два списка в один так, чтобы элементы второго списка, которые есть в первом, в новом списке не были
Prolog Добавлено через 1 минуту Умные люди, помогите пожалуйста!!!!!! Мне на прологе нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru