Объясните работу этой динамической структуры - C (СИ)
Формулировка задачи:
Объясните пожалуйста работу этой динамической структуры.
Листинг программы
- /* присвоить начальные значения NULL указателям first, item */
- first=NULL;
- item=NULL;
- while (!feof(f))
- {
- tmp=(struct gaz*)malloc(sizeof(struct gaz));
- if(first==NULL)
- {/*переопределение указателей для первого элемента динамической структуры*/
- first=tmp;
- item=tmp;
- }
- else
- {/*переход к следующему элементу*/
- item->e=tmp;
- item=tmp;
- }
- item->e=NULL;
- fscanf(f,"%d%d%d%d",&(item->type),&(item->prop),&(item->emk),&(item->kol));
- printf("type %3d proporcia 1 k %3d emkost %3d l kol-vo %5d\n",
- item->type,item->prop,item->emk,item->kol);
- }
- fclose(f);
Решение задачи: «Объясните работу этой динамической структуры»
textual
Листинг программы
- first=NULL; // начальные значения NULL: first - начало списка, item - текущий узел
- item=NULL;
- while (!feof(f)) // чтение данных из файла, до конца файла
- {
- tmp=(struct gaz*)malloc(sizeof(struct gaz)); // память под новый узел списка
- if(first==NULL) // если список пустой
- {/*переопределение указателей для первого элемента динамической структуры*/
- first=tmp; // то указатель на начало списка, и указатель на текущий элемент одинаковы
- // и указывают на вновь созданный узел
- item=tmp;
- }
- else // если список не пустой
- {/*переход к следующему элементу*/
- item->e=tmp; // указатель e предыдущего узла (указатель на следующий узел)
- // устанавливается на новый узел
- item=tmp; // указатель на текущий узел устанавливается на новый узел
- }
- item->e=NULL; // указатель e нового узла (указатель на следующий узел)
- // уставливается на NULL (конец списка)
- fscanf(f,"%d%d%d%d",&(item->type),&(item->prop),&(item->emk),&(item->kol)); // чтение данных из файла в поля нового узла
- printf("type %3d proporcia 1 k %3d emkost %3d l kol-vo %5d\n",
- item->type,item->prop,item->emk,item->kol); // вывод полей, данного узла на консоль
- }
- fclose(f); // все данные считаны, закрываем файл
Объяснение кода листинга программы
- Объявлены две переменные: first и item, которые будут использоваться для работы с динамической структурой. Первое значение этих переменных установлено в NULL.
- Запускается цикл while, который будет выполняться до тех пор, пока не будет достигнут конец файла (feof(f)).
- Внутри цикла создается новый узел tmp структуры gaz, с помощью функции malloc.
- Если список пустой (first == NULL), то первый элемент списка (first) и текущий элемент (item) указывают на только что созданный узел (tmp).
- Если список не пустой, то указатель e предыдущего узла (указатель на следующий узел) устанавливается на новый узел (tmp). Затем, указатель на текущий узел (item) также устанавливается на новый узел (tmp).
- Указатель e нового узла устанавливается на NULL, что означает конец списка.
- В поля нового узла (item) записываются данные, считанные из файла (функция fscanf).
- Поля нового узла (item) выводятся на консоль с помощью функции printf.
- После окончания цикла, файл закрывается с помощью функции fclose.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д