Opened 5 years ago
Closed 5 years ago
#228 closed ожидается проверка (задача сдана)
WW #3
Reported by: | Maria Chizhova | Owned by: | Egor Suvorov |
---|---|---|---|
Component: | WW_intrusive_list | Version: | 3.0 |
Keywords: | Cc: |
Description
Change History (5)
comment:1 Changed 5 years ago by
Owner: | changed from Egor Suvorov to Maria Chizhova |
---|---|
Type: | ожидается проверка → ожидаются исправления |
comment:2 Changed 5 years ago by
Owner: | changed from Maria Chizhova to Egor Suvorov |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 1.0 → 2.0 |
comment:3 Changed 5 years ago by
Owner: | changed from Egor Suvorov to Maria Chizhova |
---|---|
Type: | ожидается проверка → ожидаются исправления |
Корректность — 7/8:
print
выводит лишний пробел в конце строки.- Если скормить на вход очень длинную команду, то переполнится буфер
str
, будет UB.
В остальном по корректности отлично.
Стиль — 2.5/4:
- Объявляйте переменные в самом вложенном месте, где они в первый раз нужны.
s
-->command
,a, b
-->x, y
(и объявить в самом вложенном месте, где можно).printf("%s", "foo");
лучше заменить наprintf("foo");
- Лучше не
if (x != NULL)
, а простоif (x)
.
код будет чуть красивее и симметричнее, имхо.
temp
для итерации по списку —item
/entry
/point_node
.del
,elem
-->point
/pt
.- В
show_all_points
прекрасно подойдёт циклfor
вместоwhile
. - В
add_node
лучше сначала выставлять свойстваnode
, а потом все остальные. Тогда 1.remove_node
весьма хорош, но можно ещё упростить. Подсказка: вам нужно несколько строк внеif
и дваif
с веткамиelse
: один с условиемnode->prev != NULL
, один с условиемnode->next != NULL
.
Последние два пункта (исправления в списке) стоят +1 балл по стилю.
comment:4 Changed 5 years ago by
Owner: | changed from Maria Chizhova to Egor Suvorov |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 2.0 → 3.0 |
Note: See
TracTickets for help on using
tickets.
Идеи верные, структурки норм, осталось додебажить :)
На тесте из примера:
len
выводит отрицательное число. На Linux такого нет => наверняка UB где-то спрятался.Подсказки:
add_node
. Случаи "список пустой" и "список непустой" отличаются только одной строчкой.return
в этом случае. Лучшеassert(l->head);
поставить.remove_node
разбирайте не 2*2=4 случая с 2*2*=8 тонкостями, а сначала два случая проnode->prev
отдельно с одной тонкостью в каждом, а потом независимо от этого — два проnode->head
с одной тонкостью в каждом. Итого 2*1+2*1=4 тонкости, в два раза меньше думать.main.c
тоже (например, потому что выделение памяти есть только там, а с ним точно проблемы), но считывание вроде адекватное.check_list
, которая пробегается по списку и проверяет, что все ссылки стоят правильно.