Practice 4 intrusive list — различия между версиями
Материал из SEWiki
(Новая страница: «== Дедлайн == Среда (8.10.2014) 23.59 UTC+4. == Как сдавать == Написать письмо на адрес alexander.opeykin@gmail.com c т…») |
(→clist.cpp) |
||
Строка 36: | Строка 36: | ||
==== clist.cpp ==== | ==== clist.cpp ==== | ||
− | init_list(intrusive_list | + | init_list(intrusive_list) |
add_node(intrusive_list, intrusive_node) | add_node(intrusive_list, intrusive_node) | ||
remove_node(intrusive_list, intrusive_node) | remove_node(intrusive_list, intrusive_node) |
Текущая версия на 11:15, 11 октября 2014
Содержание
Дедлайн
Среда (8.10.2014) 23.59 UTC+4.
Как сдавать
Написать письмо на адрес alexander.opeykin@gmail.com c темой 'Практика 4'.
К письму приложить архив директории. Назвать по аналогии с alexander.opeykin.tgz
Важно
Текст задачи немного изменен для унификации со второй группой!
Стуктура
Makefile, main.cpp (тесты для списка с position), clist.cpp, clist.h.
Постановка задачи
Реализовать переиспользуемые интрузивные списки в стиле C.
Структуры
struct intrusive_node { struct intrusive_node *next; struct intrusice_node *prev; };
struct intrusive_list { struct intrusive_node head; };
struct position_node { int x; int y; struct intrusive_node node; };
Функции, которые нужно реализовать
Указатели надо расставить самостоятельно!
clist.cpp
init_list(intrusive_list) add_node(intrusive_list, intrusive_node) remove_node(intrusive_list, intrusive_node) int get_length(intrusive_list)
main.сpp
remove_position(intrusive_list, x, y) // удаляет все вхождения x,y add_positon(intrusive_list, int x, int y) show_all_positions() remove_all()
Базовый тест
Для короектной работы самостоятельно расставьте символы * и &
int main() { intrusive_list_t l; init_list(l); add_positon(l, 10, 10); add_positon(l, 20, 20); show_all_positions(l); return 0; }
Подсказка
#define container_of(ptr, type, member) (type*)((char*)(ptr) - offsetof(type, member))