Удаление вершины дерева и удаление дерева: и — КиберПедия 

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

Удаление вершины дерева и удаление дерева: и

2021-01-29 69
Удаление вершины дерева и удаление дерева: и 0.00 из 5.00 0 оценок
Заказать работу

 

Наконец, вы можете удалить элементы из дерева и, на системах GLIBC, удалить само дерево целиком:

 

 

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

 

Хотя это и не указано в справочных страницах или стандарте POSIX, под GNU/Linux, если вы удаляете элемент, хранящийся в корневой вершине, возвращается значение новой корневой вершины. Для переносимого кода не следует полагаться на это поведение

Функция является расширением GLIBC. Она позволяет удалить дерево целиком. Первый аргумент является корнем дерева. Второй является указателем на функцию, которая освобождает данные, на которые указывает каждая вершина дерева. Если с этими данными ничего не надо делать (например, они хранятся в обычном массиве, как в примере нашей программы), эта функция ничего не должна делать. Не передавайте указатель! Это приведет к аварийной ситуации.

 

 

Резюме

 

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

• Блокирование файлов с помощью предусматривает блокировку диапазонов, вплоть до блокирования отдельных байтов в файле. Блокировки чтения предотвращают запись в заблокированную область, а блокировки записи предотвращают чтение и запись другими процессами в заблокированную область. По умолчанию используется вспомогательная блокировка, и POSIX стандартизует лишь вспомогательную блокировку. Большинство современных систем Unix поддерживают обязательную блокировку, используя для файла бит setgid прав доступа, а также возможные дополнительные опции монтирования файловой системы.

• GNU/Linux функция действует в качестве оболочки вокруг блокировки POSIX с помощью; блокировки функции BSD совершенно независимы от блокировок. Блокировки BSD используются лишь для всего файла в целом и не работают на удаленных файловых системах. По этим причинам использование блокировки не рекомендуется.

• () получает время дня в виде пар (секунды, микросекунды) в. Эти значения используются для обновления времени доступа и модификации файла. Системные вызовы и используют пары l в для создания интервальных таймеров – сигнальных часов, которые «срабатывают» в установленное время и продолжают срабатывать впоследствии с заданным интервалом. Три различных таймера обеспечивают контроль тех состояний, когда таймер продолжает действовать.

• Функция использует, которая указывает время в секундах и наносекундах, чтобы приостановить выполнение процесса в течение определенного интервала времени. У нее есть удачная особенность не взаимодействовать вообще с механизмами сигналов.

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

 

Упражнения

 

1. Напишите функцию, используя для осуществления блокировки.

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

3. Запустите на своей системе программу без обязательной блокировки и посмотрите, сможете ли изменить файл‑операнд.

4. Если у вас не‑Linux система, поддерживающая обязательную блокировку, попробуйте исполнить на ней программу.

5. Напишите функцию следующего вида:

 

 

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

6. Используя только что написанную функцию, напишите расширенную версию date, которая принимает форматирующую строку, начинающуюся с ведущего, и форматирует текущие дату и время (см. date (1)).

7. Обработка тайм‑аута в довольно примитивна. Перепишите программу с использованием после вывода приглашения и из обработчика сигнала. Улучшает ли это структуру или ясность программы?

8. Мы заметили, что содержит намеренное состояние гонки. Предположим, пользователь вводит ответ в нужное время, но приостановлена, прежде чем сигнал может быть отменен. Какой вызов вы сделаете, чтобы уменьшить размер проблемного окна?

9. Нарисуйте дерево, как показано в выводе в разделе 14.4.5 «Обход дерева:».

10. Исследуйте файл на системе GNU/Linux. (Это словарь проверки правописания для; на различных системах он может находиться в разных местах.) В файле слова размешены в отсортированном порядке, по одному в строке.

Для начала используйте программу для создания нового списка в случайном порядке:

awk '{ list[$0]++ }

END { for (i in list) print i }' /usr/share/dict/words > /tmp/wlist

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

Используйте вывод, чтобы посмотреть, сколько памяти используют программы

11. Повторно запустите обе программы, использовав оригинальный отсортированный словарный файл, и посмотрите, как изменятся временные результаты (если они вообще изменятся).

 

Часть 3


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

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.012 с.