Двозв_списки.ppt
- Количество слайдов: 14
Двозв’язні списки Операції для роботи з двонаправленими списками: 1) доступ до k-го вузла списку, щоб проаналізувати і (або) змінити вміст його полів; 2) включити новий вузол безпосередньо перед k-м вузлом; 3) вилучити k-й вузол; 4) визначити кількість вузлів у списку; 5) знайти в списку вузол із заданим значенням інформаційного поля; 6) об'єднати два списки в один; 7) розбити список на два (або більше) списків; 8) створити копію списку; 9) виконати сортування вузлів списку за значеннями полів.
Кто управляет настоящим, тот управляет прошлым. Кто управляет прошлым, тот управляет будущим. Дж. Оруэлл, 1984 Опис type Link=^Node; Node =record Inf: integer; Next: Link; Pred: Link end
Графічне представлення двозв’язного списку з одним головним вузлом
Графічне представлення двозв’язного списку з двома головними вузлами
Переваги двозв’язних списків: • Рух по списку у будь-якому напрямі; • Легке вилучення елемента зі списку.
Створення і знищення двозв’язного списку Сегодня - это послезавтрашнее позавчера. H. Богословский type Link= ^node; node= Record Element: integer; Next: Link; Pred: Link end; var Uk. Str: link; Uk. Hv: Link; Uk. Zv: Link; Elem: integer;
Процедура побудови списку PROCEDURE Create 1 (var Uk. Str, Uk. Hv: Link); var Uk. Zv: Link; Elem: integer; BEGIN New (Uk. Str); Uk. Str^. Next: =Nil; Uk. Str^. Pred: =Nil; Uk. Zv: =Uk. Str; Elem: =Random (6); Write (Elem, ' '); While Elem<>0 do begin New (Uk. Zv^. Next); Uk. Zv^. Next^. Pred: =Uk. Zv; Uk. Zv: =Uk. Zv^. Next; Uk. Zv^. Next: =Nil; Uk. Zv^. Element: =Elem; Elem: =Random (6); Write (Elem, ' ') end; Writeln; Uk. Hv: =Uk. Zv; END;
Рекурсивна і нерекурсивна процедури знищення списку PROCEDURE F_r_e_e (var T: Link); BEGIN If T<>Nil then begin F_r_e_e (T^. Next); If T<>Nil then begin Dispose (T); T: =Nil end END; { ------------------------------ } PROCEDURE F_r_e_e_N_o_n_R_e_c (Uk. Str: Link; var UKHv: Link); BEGIN While Uk. Hv<>Uk. Str do begin Uk. Hv: =Uk. Hv^. Pred; Dispose (Uk. Hv^. Next); Uk. Hv^. Next: =Nil end END;
Перегляд списку з початку PROCEDURE V_y_v_o_d__F_o_r_w_a_r_d (Uk. Str: Link); var Uk. Zv: Link; BEGIN Uk. Zv: =Uk. Str^. Next; If Uk. Zv=Nil then Write. Ln ('Двозв’язний список порожній!') Else While Uk. Zv<>Nil do begin Write (Uk. Zv^. Element, ' '); Uk. Zv: =Uk. Zv^. Next end; Write. Ln END;
Перегляд списку з кінця PROCEDURE V_y_v_o_d__B_a_c_k (Uk. Hv: Link); var Uk. Zv: Link; BEGIN Uk. Zv: =Uk. Hv; If Uk. Zv^. Pred=Nil then Write. Ln ('Двозв’язний список порожній!') else While Uk. Zv^. Pred<>Nil do begin Write (Uk. Zv^. Element, ' '); Uk. Zv: =Uk. Zv^. Pred end; Write. Ln END;
Вставка елемента після вказаного вузла PROCEDURE V_s_t_a_v_k_a__R_i_g_h_t (Zveno: link; Elem: integer); var q: Link; BEGIN If Zveno^. Next<>Nil then begin New (q); q^. Element: =Elem; q^. Next: =Zveno^. Next; q^. Pred: =Zveno^. Next^. Pred; Zveno^. Next^. Pred: =q; Zveno^. Next: =q end else begin New (q); q^. Element: =Elem; q^. Next: =Nil; q^. Pred: =Zveno; Zveno^. Next: =q; Uk. Hv: =q end END;
Вставка елемента перед вказаним вузлом PROCEDURE V_s_t_a_v_k_a__L_e_f_t (Zveno: Link; Elem: integer); var q: Link; BEGIN New (q); q^. Element: =Elem; q^. Next: =Zveno^. Pred^. Next; q^. Pred: =Zveno^. Pred; Zveno^. Pred^. Next: =q; Zveno^. Pred: =q END;
Знищення елемента у списку PROCEDURE U_d_a_l_e_n_i_e (Zveno: Link); BEGIN If Zveno^. Next<>Nil then begin Zveno^. Next^. Pred: =Zveno^. Pred; Zveno^. Pred^. Next: =Zveno^. Next; Dispose (Zveno) end else begin Zveno^. Pred^. Next: =Nil; Uk. Hv: =Uk. Hv^. Pred; Dispose (Zveno) end END;
Знищення елемента, розміщеного після вказаного PROCEDURE U_d_a_l_e_n_i_e__R_i_g_h_t (Zveno: Link); var Uk. Zv: Link; BEGIN If Zveno^. Next=Nil then Write. Ln (‘Відсутній вузол після вказаного вузла!') else If Zveno^. Next<>Nil then begin Uk. Zv: =Zveno^. Next; Zveno^. Next^. Pred: =Zveno^. Next^. Pred; Zveno^. Next: =Zveno^. Next; Dispose (Uk. Zv) end else begin Uk. Zv: =Zveno^. Next; Zveno^. Next: =Nil; Uk. Hv: =Uk. Hv^. Pred; Dispose (Uk. Zv) end END;
Двозв_списки.ppt