forked from 131/lab6_list
56 lines
2.5 KiB
Markdown
56 lines
2.5 KiB
Markdown
# Базовые структуры данных. Список
|
||
|
||
* Склонировать репозиторий https://timp.pw/121/lab6_list.git
|
||
|
||
В этом задании необходимо дописать функции для работы с двусвязным списком.
|
||
Двусвязный список -- структура данных, которая имеет вид:
|
||
|
||
```c
|
||
struct list_node {
|
||
struct list_node *next;
|
||
struct list_node *prev;
|
||
}
|
||
```
|
||
Где поля **next** и **prev** указывают на следующий и предыдущий элементы списка.
|
||
При этом если предыдущего или следующего элемента списка не существует, указатель должен быть равен **NULL**.
|
||
|
||
Описание структуры данных в файле `list.h`
|
||
|
||
Вам необходимо реализовать некоторые функции в файле `./list.c`
|
||
и пройти тесты (описанные в `./list_test.c`).
|
||
|
||
* Необходимо реализовать следующие функции(короткое описание функций можно
|
||
подсмотреть в `list.h`):
|
||
|
||
```
|
||
list_clear
|
||
list_push_front
|
||
list_len
|
||
Эти функции проверяет тест test_list_stage1
|
||
|
||
list_push_back
|
||
list_get
|
||
list_insert
|
||
list_pop_front
|
||
list_pop_back
|
||
|
||
list_remove
|
||
Эту функцию проверяет тест test_list_remove
|
||
list_reverse
|
||
Эту функцию проверяет тест test_list_reverse
|
||
```
|
||
|
||
## Дополнительная информация
|
||
|
||
* Команда для сборки проекта -- **make**
|
||
* Команда для запуска тестов -- **make test**
|
||
|
||
Для работы вам могут понадобится следующие библиотечные функции:
|
||
|
||
* `malloc(size_t size)` -- функция, динамически выделяющая size байт и возвращающая
|
||
указатель на выделенный кусок
|
||
* `realloc(void *ptr, size_t size)` -- функция изменяющая размер выделенного куска памяти
|
||
на вход принимает указатель на предыдущий выделенный кусок.
|
||
возвращает укзаатель на заново выделенную память.
|
||
Все предыдущие данные в ptr остаются без изменений
|