Разработка ядра Linux
Шрифт:
Структура
Перед использованием элементы связанных списков должны быть инициализированы. Так как элементы связанных списков обычно создаются динамически (иначе, вероятно, не нужно использовать связанный список), то эти элементы, как правило, инициализируются во время
Если структура данных создается статически во время компиляции и на нее есть непосредственная ссылка, то инициализацию можно выполнить следующим образом.
Для того чтобы создать и инициализировать связанный список, можно использовать следующее объявление.
Эта команда позволяет статически создать связанный список с именем
Нет необходимости явно выполнять какие-либо операции со служебными полями элементов связанного списка. Вместо этого необходимо просто включить структуру узла связанного списка в вашу структуру данных, чтобы можно было легко манипулировать данными и выполнять прохождение по связанному списку.
Работа со связанными списками
Для работы со связанными списками ядро предоставляет семейство функций. Все они принимают указатели на одну или более структур
Интересно, что время выполнения всех этих функций масштабируется как O(1) [97] . Это значит, что они выполняются в течение постоянного интервала времени независимо от количества элементов списка, для которого они вызываются. Например, время добавления элемента в связанный список из 3 и 3000 элементов будет одинаковым. Это, возможно, и не вызывает удивления, но тем не менее, приятно.
97
Вопросы сложности алгоритмов рассматриваются в приложении В.
Для добавления элемента в связанный список можно использовать следующую функцию.
Эта функция добавляет узел
Для добавления элемента в конец связанного списка служит следующая функция.
Эта функция добавляет новый элемент new в связанный список сразу перед элементом, на который указывает параметр
Для удаления узла списка служит следующая функция.
Эта функция позволяет удалить из списка элемент, на который указывает параметр
Для удаления узла из списка и повторной инициализации этого узла служит следующая функция.
Эта. функция аналогична функции
Для перемещения узла из одного списка в другой предназначена следующая функция.
Эта функция удаляет элемент
Для перемещения элемента из одного связанного списка в конец другого служит следующая функция.
Эта функция выполняет то же самое, что и функция
Для проверки того, пуст ли список, служит функция.
Эта функция возвращает ненулевое значение, если связанный список пуст, и нулевое значение в противном случае.
Для объединения двух не перекрывающихся связанных списков служит следующая функция.
Эта функция вставляет список, на который указывает параметр