Дано условие:
Описать процедуру, которая вставляет в непустой список L, элементы которого упорядочены по неубы-ванию, новый элемент E так, чтобы сохранилась упо-рядоченность.
не могу вьехать, что надо сделать. Подскажите пожалуйста
Во-первых: поменять название темы...
А во-вторых: тебе дан упорядоченный список с такими, например, узлами:
L = <1, 4, 6, 6, 7, 8, 8, 10>
и элемент E равный, скажем, 5...
Вот и задача у тебя: добавить E к списку L так, чтобы не нарушить его упорядоченности. Кстати, каким будет список после добавления этого элемента?
Певое условие выполнил
Второе.
Кстати, каким будет список после добавления этого элемента?
Это всё условие что дано, из сказанного Вами я понял что надо сделать список допустим от 1 до 10, в него надо вставить какое то число, которого нет в этом списке, и чтоб порядок не изменился. Так? Блин, всё равно не могу понять как это сделать.
Нужно создать сам список, потом ввести требование ввести число, и вывод на экран упорядоченного списка с новым чмслом. А если такое число уже есть в списке?
Ход решения неверен... Я привел ВСЕ данные, которые необходимы для решения задачи... Не надо ничего придумывать. Тебе ДАН список. Понимаешь? Не элементы списка, чтоб тебе надо было что-то "составлять", а СПИСОК. С ним (кроме добавления одного элемента) вообще ничего не надо делать.
Повторяю вопрос немного в другой плоскости: если у тебя есть список
<1, 4, 6, 6, 7, 8, 8, 10, 5>
является ли он упорядоченным по неубыванию?
этот список <1, 4, 6, 6, 7, 8, 8, 10, 5> нет, а этот <1, 4, 6, 6, 7, 8, 8, 10> получается да
Volvo примерно так это должно быть
Program Example;
Uses Crt;
Type
PEl=^TEl;
TEl=Record
Inf:Integer;
Next:PEl;
end;
Var Spisok1,Spisok2:PEl;
Procedure CreateSpisok(var A:PEl);
Var B:PEl;
I:Integer;
begin
New(A);
Readln(A^.Inf);
B:=A;
Readln(I);
While not(I=0) do
begin
New(B^.Next);
B:=B^.Next;
B^.Inf:=I;
Readln(I);
end;
B^.Next:=Nil
end;
Procedure DelSpisok(var A:PEl);
var B:PEl;
begin
While not(A=nil) do
Begin
B:=A;
A:=A^.Next;
Dispose(B);
end;
end;
Procedure PrintSpisok(A:PEl);
var B:PEl;
begin
B:=A;
while not(B=nil) do
begin
Write(B^.Inf:1,' ');
B:=B^.Next;
end;
Writeln
end;
Function MinEl(Ab:PEl):Integer;
var B:PEl;
Min:Integer;
begin
Min:=Ab^.Inf;
B:=Ab^.Next;
While not(B=nil) do
begin
If B^.Inf<Min then Min:=B^.Inf;
B:=B^.Next;
end;
MinEl:=Min;
end;
Procedure SortSpisok(var A:PEl);
var B,C,D:PEl;
I:Integer;
begin
{Переносится первый элемент списка}
I:=MinEl(A);
If I=A^.Inf Then
begin
D:=A;
A:=A^.Next;
end
else
begin
B:=A;
While not(B^.Next^.Inf=I) do
B:=B^.Next;
D:=B^.Next;
B^.Next:=D^.Next;
end;
{Переносятся все остальные элементы списка}
C:=D;
While not(A=nil) do
begin
I:=MinEl(A);
if I=A^.Inf then
begin
C^.Next:=A;
A:=A^.Next
end
else
begin
B:=A;
While not(B^.Next^.Inf=I) do
B:=B^.Next;
C^.Next:=B^.Next;
B^.Next:=C^.Next^.Next;
end;
C:=C^.Next;
end;
C^.Next:=Nil;
A:=D;
end;
Procedure AddSpisok(var A,D:PEl);
Var B,C:PEl;
Begin
While not(D=nil) do
begin
C:=D;
D:=D^.Next;
If C^.Inf<A^.Inf then
begin
C^.Next:=A;
A:=C;
end
else
begin
B:=A;
While not(B^.Next^.Inf>C^.Inf) and not(B^.Next=Nil) do
B:=B^.Next;
C^.Next:=B^.Next;
B^.Next:=C;
end;
end;
end;
Begin
ClrScr;
Writeln('Введите первый список:');
CreateSpisok(Spisok1);
ClrScr;
Writeln('Введите второй список:');
CreateSpisok(Spisok2);
ClrScr;
Writeln('Первый список:');
PrintSpisok(Spisok1);
Writeln('Второй список:');
PrintSpisok(Spisok2);
Writeln;
SortSpisok(Spisok1);
Writeln('Остсортированный первый список:');
PrintSpisok(Spisok1);
AddSpisok(Spisok1,Spisok2);
Writeln('Результат объединения списков:');
PrintSpisok(Spisok1);
DelSpisok(Spisok1);
Readkey;
end.
Program Example;
Uses Crt;
Type
PEl=^TEl;
TEl=Record
Inf:Integer;
Next:PEl;
end;
Var
spisok: PEl;
E: integer;
Procedure CreateSpisok(var A:PEl);
Var B:PEl;
I:Integer;
begin
New(A);
Readln(A^.Inf);
B:=A;
Readln(I);
While not(I=0) do
begin
New(B^.Next);
B:=B^.Next;
B^.Inf:=I;
Readln(I);
end;
B^.Next:=Nil
end;
Procedure DelSpisok(var A:PEl);
var B:PEl;
begin
While not(A=nil) do
Begin
B:=A;
A:=A^.Next;
Dispose(B);
end;
end;
Procedure PrintSpisok(A:PEl);
var B:PEl;
begin
B:=A;
while not(B=nil) do
begin
Write(B^.Inf:1,' ');
B:=B^.Next;
end;
Writeln
end;
procedure InsertElement(var a: PEl; E: integer);
var
p, T: PEl;
before_first: boolean;
begin
p := a;
before_first := (p^.inf > E);
while (p^.next <> nil) and (p^.next^.inf < E) do p := p^.next;
new(T); T^.inf := E;
if before_first then begin
T^.next := a; a := T;
end
else begin
t^.next := p^.next; p^.next := T;
end;
end;
Begin
ClrScr;
Writeln('List:');
spisok := nil;
CreateSpisok(Spisok);
PrintSpisok(spisok);
write('E = '); readln(E);
InsertElement(spisok, E);
PrintSpisok(spisok);
DelSpisok(spisok);
Readkey;
end.
Volvo я вчера задание на работе писал, и в рабочей суматохе действительно просто не разобрался в условии. После работы дома сел и всё оказалось намного проще чем я думал. У тебя код вышел немного проще, чем у меня, так что буду смотреть и упрощать свою версию. Спасибо!