![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Удаление элемента из конца списка.
Нужен запрос на удаление 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;
Задачи на замену элементов в линейном однонаправленном списке без головного элемента.
Операция замены элемента в списке практически представляет собой комбинацию удаления и вставки элемента. Читателю дается возможность, используя представленные ранее графические приемы и примеры программ, самому написать процедуры замены элементов. Перед выполнением операции замены элемента желательно запрашивать у пользователя подтверждение замены. Действуя аналогично, можно построить графические схемы и программы задач действий с двунаправленными списками.
|