Студопедия

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

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

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






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






     

    procedure ins_after_i (first: Telem; p: Telem; i: integer);

    Var

    t, q: 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

    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)-го.

     

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

    Графическое представление выполняемых действий дано на рисунке 22.

     

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

     

    ПРИМЕЧАНИЕ: перед выполнением операции удаления элемента или списка желательно запрашивать у пользователя подтверждение удаления.

    procedure del_beg_list (var first: Telem);

    Var

    p: Telem;

    answer: string;

    Begin

    if first < > nil then

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

    writeln (' вы хотите удалить первый элемент? (да/нет) ');

    Readln (answer);

    if answer = 'да' then

    Begin

    p: =first;

    if p^.next = nil then {в списке один элемент }

    Begin

    dispose (p); {уничтожение элемента }

    first: =nil; {список стал пустым }

    End

    Else

    Begin

    p: = first; {адрес удаляемого элемента }

    first: =first^.next;

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

    Dispose(p);

    {удаление бывшего первого элемента }

    End;

    End

    End

    Else

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

    End;

     


     







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