Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Удаление элемента из конца списка.






 

Нужен запрос на удаление

procedure del_end_list(var first: Telem);

Begin

if first < > nil then

begin {список не пуст}

if first^.next = nil then

begin {в списке - единственный элемент }

p: = first;

Dispose (p);

first: = nil;

End

Else

begin {в списке больше одного элемента }

q: = first;

t: = first;

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

while q^.next < > nil do

Begin

t: = q; {запоминание адреса текущего элемента}

q: =q^.next; {переход к следующему элементу}

End;

{после окончания цикла т - адрес предпоследнего, а q - адрес последнего элемента списка }

dispose (q); {удаление последнего элемента }

t^.next: = nil; {предпоследний элемент стал последним }

End

End

Else

writeln (' список пуст, удаление элемента невозможно ');

End;

 

ПРИМЕЧАНИЕ. После исключения элемента из списка этот элемент может не удаляться из памяти, а через список параметров передан на какую-либо обработку, если этого требует алгоритм обработки данных.

Удаление элемента из середины списка (i-ого элемента).

 

procedure del_i_elem (first: Telem; i: integer);

Var

t, q, r: Telem;

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 {удаляется 1 элемент}

t: = first;

first: = first^.next;

Dispose (t);

End

Else

if i = n then

begin { см. случай удаления последнего элемента}

...

End

else {удаление из «середины» списка}

Begin

t: = first;

q: = nil;

k: = 1;

while (k < i) do

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

k: = k + 1;

q: = t;

t: = t^.next;

End;

r: = t^.next;

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

q^.next: = r;

dispose (t); {удален i-ый элемент }

End;

End;

End;

Удаление всего списка с освобождением памяти.

 

procedure delete_list(var first: Telem);

Var

p, q: Telem;

answer: string;

Begin

if first < > nil then

begin { список не пуст }

writeln (' вы хотите удалить весь список? (да/нет) ');

Readln (answer);

if answer = 'да' then

Begin

q: =first;

p: =nil;

while (q < > nil) do

Begin

p: =q;

q: =q^.next;

Dispose(p);

End;

first: =nil;

End;

End

Else

writeln (' список пуст ');

End;

 

Задачи на замену элементов в линейном однонаправленном списке без головного элемента.

 

Операция замены элемента в списке практически представляет собой комбинацию удаления и вставки элемента. Читателю дается возможность, используя представленные ранее графические приемы и примеры программ, самому написать процедуры замены элементов. Перед выполнением операции замены элемента желательно запрашивать у пользователя подтверждение замены.

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

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.