Лекция: Вставка элемента в начало списка.

 

Procedure Ins_beg_list(P: el; {адрес включаемого элемента}

Var First: el);

Begin

If First = Nil Then

Begin

First := p;

P^.next := nil{ можно не делать, так как уже сделано при

формировании этого элемента}

End

Else

Begin

P^.Next:=First;{ссылка на бывший первым элемент}

First:=p;{ включаемый элемент становится первым }

End;

End;

Включение элемента в конец списка.

 

Procedure Ins_end_list(P: el; Var First: el);

Begin

If First = Nil Then

First:=p

Else

Begin

q:=First;{цикл поиска адреса последнего элемента}

While q^.Next <> Nil do

q:=q^.Next;

q^.Next:=p;{ссылка с бывшего последнего

на включаемый элемент}

P^.Next:=Nil;{не обязательно}

End;

End;

Включение в середину (после i-ого элемента).

 

Procedure Ins_after_I ( first: el; p: el; i: integer);

Var

t, q: el;

K ,n: integer;

Begin

n := count_el(first);{определение числа элементов списка}

if (i < 1 ) or ( i > n )then

Begin

writeln ('i задано некорректно');

Exit;

End

Else

Begin

if i = 1 then

Begin

t := first;{адрес 1 элемента}

q := t^.next;{адрес 2 элемента}

t^.next := p;

p^.next := q;

End

Else

if i = n then

begin{ см. случай вставки после последнего

элемента}

.. .

End

else{вставка в «середину» списка}

Begin

t := first;

k := 1;

while ( k < i ) do

begin{поиск адреса i-го элемента}

k := k + 1;

t := t^.next;

End;

q := t^.next;

{найдены адреса i-го (t) и i+1 -го (q) элементов }

t^.next := p;

p^.next := q;

{элемент с адресом р вставлен}

End;

End;

End;

ПРИМЕЧАНИЕ: аналогично рассуждая и применяя графическое представление действия, можно решить задачу включения элемента перед i-ым. Строго говоря, такая задача не эквивалентна задаче включения элемента после (i-1)-го.

 

еще рефераты
Еще работы по информатике