Practice 4 intrusive list
Материал из SEWiki
Версия от 22:58, 4 октября 2014; Alexander.Opeykin (обсуждение | вклад) (Новая страница: «== Дедлайн == Среда (8.10.2014) 23.59 UTC+4. == Как сдавать == Написать письмо на адрес alexander.opeykin@gmail.com c т…»)
Содержание
Дедлайн
Среда (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, intrusive_node) 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))