Здравствуйте, z1z, Вы писали:
z1z>Всем доброго времени суток)
z1z>Я к вам вот по какому поводу…у меня висит лаба по динамике и есть код задачи которая полностью аналогична моей из Лабы (только там про автобусы а у меня про книжки)…и вот проблема – я очень плохо понимаю тот код особенно в части указателей и работы с двусвязным списком, который как раз и является основой этой Лабы(…отсюда просьба – не могли бы вы мне объяснить этот код…
Объясняю: код — в топку.
Во-первых, там односвязный список.
Во-вторых, такой инфернальный* стиль программирования (впрочем, характерный для лаб, писанных новичками под нечутким руководством препода и на дремучем турбоси++).
*) сиречь, адский
В-третьих, программа с ошибками.
А именно:
— buffer overrun
struct bus
{
char FIO_voditel[50];
.....
};
.....
cin.get( X.FIO_voditel , 100 );
.....
— хвостовая рекурсия вместо итерации (сколько там под стек отводится? в модели tiny?)
void filled()
{
randomize(); // каждый раз!!! зачем?
// отжираем 80 байтов на стеке, плюс ещё 4 были на служебные нужды
char opt[10];
struct bus X;
..... // диалог с пользователем, добавляем копию в список
memset(&X,0,sizeof(bus)); // а меж тем, эта переменная нам больше не нужна. Зачем чистить
filled(); // ну что, не жалко очередных 88 байтов?
}
— память от списка не освобождается
ну и ещё по мелочи...
Тебе нужен именно двусвязный список, или односвязный сгодится?
... << RSDN@Home 1.2.0 alpha rev. 655>>