Завершено
6
02.11.2020, 10:19
23.11.2020, 18:49
Реализовать модуль работы с двусвязными списками.
Взять структуру и набор функций из задачи «Связанные списки», изменив интерфейс с учетом большей симметричности двусвязного списка (пара функций изменят семантику, пару функций можно добавить — подумайте, какие именно).
В отличии от односвязного списка, потребуется дополнительная структура, содержащая указатели на голову и хвост списка. Именно эта структура будет видна пользователю,
Тесты на все функции с помощью assert
.
Пример использования (вариант Python):
import dlist
x = dlist.create()
dlist.prepend(x, "bb")
dlist.prepend(x, "aa")
dlist.append(x, "yy")
dlist.append(x, "zz")
dlist.get(x, 0); # => aa
dlist.get(x, 1); # => bb
dlist.get(x, 2); # => yy
dlist.get(x, 3); # => zz
Пример использования (вариант C):
DList dl;
dlist_create(&dl);
dlist_prepend(&dl, "bb");
dlist_prepend(&dl, "aa");
dlist_append(&dl, "yy");
dlist_append(&dl, "zz");
dlist_nth(&dl, 0); // => aa
dlist_nth(&dl, 1); // => bb
dlist_nth(&dl, 2); // => yy
dlist_nth(&dl, 3); // => zz
dlist_destroy(&dl);