[cdev] Двусвязный список

Grigoriy A. Sitkarev sitkarev на komitex.ru
Сб Янв 29 18:15:31 MSK 2011


Сергей, тебе надо было для начала это самому проверить. И подумать -- а 
можно ли таким API пользоваться на практике? Боюсь тебя разочаровать, но 
  на деле этот код совершенно бесполезен.

1. list_free() должна высвобождать память для всех элементов списка.

2. list_add_data() должна добавить данные в список, т.е. создать 
структуру list_item, прицепить к ней данные и поместить в список.

3. list_del_data() в таком случае должна найти в списке элемент с 
данными, которые пользователь хочет удалить, извлечь этот элемент из 
списка и высвободить память, которую занимала структура этого элемента. 
Возможно, стоит переделать интерфейс -- код возврата сделать int а не 
void, как булево значение, был найден такой элемент или нет.

4. list_add() должна делать так чтобы список был циклическим, если ты 
подумаешь хорошо, то окажется что здесь есть одно большое преимущество.

5. list_unlink() сразу получает указатель на элемент списка, не надо 
ничего там искать, ты можешь извлекать его немедленно.

6. list_nth() понял верно, но нужно перепроектировать, написано жутко.

7. list_sort() работать не будет -- нет проверки на больше-меньше, 
только на неравенство.

8. Нужно тебе самому написать тесты, где будут проверяться все функции. 
Также как мы делали это с хеш-таблицей. То что оно компилируется это ещё 
ничего не значит.

Есть над чем потрудиться. Я бы ещё тебе за стиль пару замечаний сделал, 
он у тебя неоднороден, хотя-бы с этого начнём. Впрочем, это уже вторично.

--
Г.А.
Сергей пишет:
> Григорий Александрович, проверьте пожалуйста.
> 
> Автор:Кожеванов Сергей.





Подробная информация о списке рассылки cdev