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

Структуры списков

Постановка задачи. | Разработка структур данных и алгоритмов | Friend class Iterator; | Отладка и тестирование | Сопровождение | Алгоритмы внутренней сортировки | Задание к лабораторной работе | Методические указания к выполнению задания | Структуры BST - деревьев | Задание к лабораторной работе |


Читайте также:
  1. Анализ и оценка удовлетворительности структуры баланса проводятся на основе расчета следующих показателей
  2. Анализ состава и структуры имущества
  3. АНАЛИЗ СТРУКТУРЫ И СТИМУЛЯЦИИ ПОВЕДЕНИЯ
  4. Анализ структуры и стимуляции строительной игры Игоря
  5. Введение структуры в континуум сознавания
  6. Вид внутренней структуры
  7. Вывод здесь один – был народным депутатом – виновен в развале страны! Значит, вычеркиваем таких из списков сразу.

 

 
 

Для хранения списка используются либо массив элементов, либо связная структура элементов. Список на базе массива представляет собой последовательность значений, занимающую первые элементы массива (рис. 9).

 

Рис. 9. Структура списка на базе массива.

Длина последовательности и, следовательно, списка ограничена сверху размером массива. Чтобы снять это ограничение, можно организовать хранение списка на базе надёжного массива, который может изменять свой размер в зависимости от его заполнения. К достоинствам хранения списка в массиве можно отнести прямой доступ к элементам списка по номеру для записи и чтения значений. Но при вставке и удалении объектов приходится выполнять сдвиг последующих элементов в списке на одну позицию вправо или влево. Поэтому трудоёмкость операций вставки и удаления элементов имеет оценку O(n), остальные операции, благодаря прямому доступу, - оценку O(1).

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

Обе формы обеспечивают только последовательный доступ к элементам, вследствие чего все операции для элементов списка имеют трудоёмкость O(n).

Связные структуры на базе адресных указателей представляют собой множество элементов, ссылающихся друг на друга с помощью адресных указателей. Каждый элемент структуры размещён в динамической памяти и называется узлом списка. Узел структуры состоит их двух частей – значения и указателей на соседние узлы структуры. Узел односвязной структуры содержит один указатель на следующий узел (на преемника в списке). Ввиду этого, в односвязном списке возможен проход только в одном направлении – от начала списка к его концу. Узел двусвязной структуры содержит указатели на предыдущий и следующий узлы (на предшественника и преемника в списке) и в двусвязном списке возможен проход в обоих направлениях, от начала списка к концу и от конца к началу. Для односвязного списка вводится дополнительный указатель на первый элемент списка – голова списка (рис. 10). В двусвязном списке голова списка состоит из двух указателей на первый и последний элементы (рис. 11).

 
 

 
 

Рис.10 Односвязная структура списка на базе адресных указателей

Рис.11 Двусвязная структура списка на базе адресных указателей

 

 
 

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

 

Рис.12. Кольцевая, двусвязная структура списка.

 

В связных структурах списков приходится обрабатывать особые ситуации при вставке или удалении элементов в начало или конец списка. Чтобы избавиться от этих ситуаций и тем самым ускорить выполнение операций вставки и удаления используется кольцевая структура с фиктивным (барьерным), головным узлом [2]. Он существует в структуре всегда, даже если список пуст. Более того, фиктивный узел играет роль головы списка. Он хранит указатели на первый и последний узлы в структуре, когда список не пуст, и указатели на самого себя, когда список пуст. Последний узел в непустом списке указывает на барьерный узел (рис. 13). Таким образом, структура всегда замкнута в кольцо. Благодаря этому в любой момент времени производится вставка или удаление какого-либо звена кольца по одной и той же схеме.

 
 

Рис. 13. Кольцевая двусвязная структура с фиктивным элементом:

а) пустой список, б) не пустой список.

 

У списков, использующих связную структуру на базе адресных указателей, есть один существенный недостаток – интенсивное использование механизма распределения динамической памяти при вставке и удалении элементов. Если при работе со списком операции вставки и удаления выполняются часто, то это существенно замедляет работу программы, использующей такой список. В случае, когда заранее известен предельный размер списка, можно использовать связную структуру на базе массива с индексными указателями, свободную от этого недостатка [6].

Связная структура представляет собой массив записей, поля которых соответствуют полям узла структуры с адресными указателями. Либо можно использовать несколько массивов, по одному для каждого из полей. В структуре адресные указатели заменяются индексами следующего и предыдущего элементов. На рисунке 14 представлена связная структура на базе индексных указателей, эквивалентная двусвязному списку (рис. 11).

 
 

Рис.14. Связная структура на базе индексных указателей.

 

Голова списка представляет собой переменную, содержащую индекс позиции массива, в которой помещён первый элемент списка. По ходу работы со списком, в результате вставок и удалений элементов в массиве образуются перемежающиеся свободные и занятые позиции. При добавлении нового элемента в список для него нужно выделять свободную позицию в массиве. Свободные позиции связываются в дополнительный односвязный список, используя поле индекса следующего элемента. Голова списка свободных позиций размещается в дополнительной индексной переменной. Список свободных позиций находится вперемешку со списком занятых позиций (рис.15).

 
 

Рис. 15 Список свободных позиций в массиве с индексными указателями.

 

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

При создании списка все позиции в массиве свободны и связаны в список свободных позиций.


Дата добавления: 2015-11-04; просмотров: 155 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Методические указания к выполнению задания| Задание к лабораторной работе

mybiblioteka.su - 2015-2024 год. (0.008 сек.)