Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы аисд.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.94 Mб
Скачать

Кольцевой двусвязный список

Кольцевые двусвязные списки получают следующим образом: в качестве значения поля R последнего элемента принимают ссылку на первый элемент, а в качестве значения поля L первого элемента - ссылку на последний элемент.

 

 

Простейшие операции над односвязными списками

Вставка элемента в начало односвязного списка

Удаление элемента из начала односвязного списка

Вставка в начало списка

 Надо вставить в начало односвязного списка элемент с информационным полем D. Для этого необходимо сгенерировать пустой элемент (P=GetNode). Информационному полю этого элемента присвоить значение D (INFO(P)=D), значению указателя на этот элемент присвоить значение указателя на начало списка (Ptr(P) = Lst), значению указателя начала списка присвоить значение указателя P (Lst = P).

P=GetNode

Info(P)=x

Ptr(P) = Lst

Lst = P

return

 

 

 

Удаление из начала списка  

Надо удалить первый элемент списка, но запомнить информацию, содержащуюся в поле Info этого элемента. Для этого введем указатель P, который будет указывать на удаляемый элемент (P = Lst). В переменную X занесем значение информационного поля Info удаляемого элемента (X=Info(P)). Значению указателя на начало списка присвоим значение указателя следующего за удаляемым элемента (Lst = Ptr(P)). Удалим элемент (FreeNode(P)).

P = Lst

x=Info(P)

Lst = Ptr(P)

FreeNode(P)

return

11.Реализация стеков с помощью списков.

Любой односвязный список может рассматриваться в виде стека. Однако список по сравнению со стеком, реализованным на одномерном массиве имеет преимущество, так как заранее не задан его размер.

Стековые операции, применимые к спискам

Чтобы добавить элемент в стек, надо в алгоритме вставки в начало списка заменить указатель Lst на указатель S (операция Push(S, x).

P = GetNode

Info(P) = x

Ptr(P) = S

S = P

return

Проверка стека на пустоту Empty(S)

if S = Nil

  then print “Стек пуст”

  Stop

endif

return

Выборка элемента из стека POP(S)

Empty(S)

P = S

X = Info(P)

S = Ptr(P)

FreeNode(P)

return

Заметим, что проверку на переполнение для стека в виде списка делать не нужно.

 12.Смысл и организация операций создания и удаления элемента динамической структуры. Понятие свободного списка и пула свободных элементов. Утилизация освободившихся элементов.

Организация операций  Getnode, Freenode и утилизация освободившихся элементов

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

Если у функциональных списков разный формат, то надо создавать свободный список каждого функционального списка.

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

Как правило, свободный список создается в памяти машины как стек.

Создание (GetNode) нового элемента  эквивалентно выборке элемента из свободного стека, а операция FreeNode  - добавлению в свободный стек освободившегося элемента.

Пусть необходимо создать пустой список по типу стека с указателем начала списка - AVAIL. Рассмотрим функции, которые позволят создавать пустой элемент списка и освобождать элемент из списка.

Операция P = GetNode 

Для реализации операции GetNode необходимо указателю сгенерированного элемента присвоить значение указателя начала свободного списка, а указатель начала свободного списка перенести к следующему элементу.

Перед этим надо проверить, есть ли элементы в списке. Пустота свободного списка (Avail = nil), эквивалентна переполнению функционального списка.

If Avail = Nil

  then   Print “Переполнение” 

    Stop

  else  P = Avail

   Avail = Ptr(Avail)

endif

return

 

Операция FreeNode (P)

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

FreeNode(P)

Ptr(P) = Avail

Avail = P

return

 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]