
2.2 Набор тестов
2.2.1
При добавлении элемента в начало, нужный элемент занимает место перед предыдущим. Если список пуст, список заполняется одним элементом.
Теперь в списке находится элемент 6. Вставим в начало элемент 3. Список будет выглядеть следующим образом:
При добавлении элемента в конец, нужный элемент занимает место после последнего элемента. Вставим в конец нашего списка элемент 28. Тогда список будет выглядеть следующим образом:
Когда уже есть несколько элементов, то можно добавить элемент после любого элемента с каким либо номером. Вставим после элемента с номером два элемент 111.
Элементу 111 присваивается номер 3. И получается список:
Добавим элемент 609 после элемента с ключом 1.
При нажатии кнопки «удалить из начала» получим: 6, 609, 111, 28.
Удалим элемент из конца списка, получим: 6, 609, 111.
Можно удалить элемент с любым номером, который есть в этом списке, например с номером 2. Получим список: 6,111.
Удалим элемент с ключом 3. Получим список, состоящий из одного элемента: 6.
2.2.2
Проверим работу программы вторым вариантом тестов: пусть число вводимых элементов равно 6. Вставим первый элемент 123. Получим список, состоящий только из элемента 123.
Вставим в начало элемент 8. Ему присваивается номер 1, ключ 2.
Вставим элемент 333333 после элемента с ключом 2. Получим следующий список:
При добавлении элемента в конец, нужный элемент занимает место после последнего элемента. Вставим элемент 2 в конец списка:
Вставим элемент 8 после элемента с номером 1:
Вставим в начало списка элемент 3. Получился список, состоящий из шести элементов: 3, 8, 8, 333333, 123, 2.
Удалим из списка элемент под номером 4. Список состоит из 5 элементов: 3, 8, 8, 123, 2.
Глава 3. Задача II 5 e
3.1 Формулировка условия задачи
Пусть L обозначает кольцевой (циклический) двунаправленный список с заглавным звеном и пусть E обозначает величину типа элементов, входящих в список. Описать функцию или процедуру, которая: в списке L переставляет в обратном порядке все элементы между первым и последним вхождениями элемента Е, если E входит в L не менее двух раз.
3.2 Листинг программы
Program Revers_Spiska;
type
spisok=^zap;
zap=Record
inf:integer;
next:spisok;
end;
var
nach,p,q:spisok;
E:integer;
Procedure Input_L(var nach:spisok);
var p,q:spisok; N,i:integer; X:integer;
begin
Randomize;
write('n:');
readln(N);
writeln('spisok:');
X:=random(20)+1;
new(p);
nach:=p;
p^.inf:=X;
p^.next:=nil;
for I:=2 to N do
begin
new(q);
p^.next:=q;
X:=random(20)+1;
q^.inf:=X;
q^.next:=nil;
p:=q;
end;
end;
Procedure Print_L(var nach:spisok);
var p,q:spisok;
begin
writeln('spisok:');
p:=nach;
if p=nil then writeln('spisok pust')
else while p<>nil do
begin
writeln(p^.inf);
p:=p^.next;
end;
end;
Procedure Destroy(nach_p:spisok);
var p,p1:spisok;
begin
p:=nach_p;
while p<>nil do begin
p1:=p;
p:=p^.next;
Dispose(p1);
end;
end;
Procedure V_ob(var nach_p:spisok; pn,pk:spisok);
var p,q,q1,q2,r:spisok;
begin
p:=pn;
q:=p^.next;
q1:=q;
q2:=pk^.next;
r:=q^.next;
while q<>pk do
begin
q^.next:=p;
p:=q;
q:=r;
r:=r^.next;
end;
pn^.next:=p;
q1^.next:=pk;
end;
Procedure Obr_sp(var nach_p:spisok; E:integer);
var p,p_p,p_v:spisok;
begin
p:=nach_p;
p_p:=nil; p_v:=nil;
while p<>nil do
begin
if p^.inf=E then
begin
if p_p=nil then p_p:=p
else p_v:=p;
end;
p:=p^.next;
end;
if p_v<>nil
then V_ob(nach,p_p,p_v);
end;
begin
Input_L(nach);
Print_L(nach);
write('E=');
readln(E);
Obr_sp(nach,E);
Print_L(nach);
readln;
end.