Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Стек свободного пространства




До сих пор мы не заботились о том, куда деваются освобождаемые узлы списков, перекладывая это на алгоритмы работы с "кучей". Это было возможно, потому, что наши списки располагались в оперативной памяти и в нашем распоряжении имелись операторы new и delete. Существуют ситуации, когда программа сама должна заботиться об "утилизации" осво­бож­даемых узлов списков. Такая ситуация возникнет, если отказаться от кучи как поставщика узлов или список находится на внешнем носителе. Просто бросать освободившиеся узлы было бы слишком расточительно. Мы будем помещать их в стек свободного пространства, организованный как линейный односвязный

 
 

список. Когда нам потребуется новый узел, то возьмем его из вершины стека. Операция вставки иллюстрируется рис. 20.

Рис 20. Вставка узла в список.

 

Текст функции приведен ниже.

NODE *InsertNode(NODE *p, NODE *s){

// Вставка узла вслед за p

// s – указатель на вершину стека свободного пространства

// возвращает указатель на новый узел

NODE *X;

X=s;

s=s->Next;

X->Next=p->Next;

p->Next=X;

return X;

}

 

 
 

Операция удаления изображена на рис 21. Удалённый узел помещается в вершину стека свободного пространства.

Рис 21. Удаление узла из списка.

 

Текст функции, выполняющей операцию удаления, приведен ниже.

void DeleteNode(NODE *p, NODE *s){

// узел, следующий за p удаляется и помещается

// в вершину стека свободного пространства s

NODE *X;

X=p->Next; // X-удаляемый узел

p->Next=X->Next;

X->Next=s;

s=X;

}

 

Для списочных структур на внешнем носителе роль указателя играет смещение узла относительно начала файла.




Поделиться с друзьями:


Дата добавления: 2014-12-08; Просмотров: 520; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.