Создать двусвязный список из файла - C (СИ)
Формулировка задачи:
Здравствуйте!
Мне нужно создать двусвязный список из файла на Си(не C++).
В файле содержатся 2 столбца с числами: первый - double x;
второй - unsigned y;
Мне нужно организовать двусвязный список, состоящий из таких структур:
Struct A
{double x;
unsigned y;
}
Так как список двусвязный, я добавил 2 указателя - на предыдущий элемент и на следующий элемент,
затем начинаю считывание из файла. Что делать дальше?
Нужно еще какие-то указатели вводить, вроде?
#include <stdio.h>
#include <stdlib.h>
struct A
{double x;
unsigned y;
struct A *prev; //Previous
struct A *next;}; //Next
void main()
{A el;
FILE *f;
f=fopen("D:\\myf.txt","rt");
while (!(feof(f))
{fscanf(f,"%lf %d", &el.x, &el.y);
Объясните, плиз, как это все работает.
Решение задачи: «Создать двусвязный список из файла»
textual
Листинг программы
void Postroenie (node **nsp, node **ksp)
// Построение двунаправленного списка с заглавным звеном:
// *nsp - указатель на начало списка,
// *ksp - указатель на конец списка.
{
node *rsp;
int el;
*nsp = new(node);
rsp = *nsp;
(**nsp).pred = (**nsp).sled = NULL;
cout<<"Вводите последовательность:\n"; cin>>el;
while (el!=0)
{ (*rsp).sled = new(node); (*((*rsp).sled)).pred = rsp;
rsp = (*rsp).sled; (*rsp).sled = NULL; (*rsp).elem = el;
cin>>el; }
*ksp = rsp;
}
Объяснение кода листинга программы
- Создается функция с именем Postroenie, которая принимает два указателя: nsp и ksp.
- Первый указатель nsp указывает на начало списка, а второй указатель ksp указывает на конец списка.
- Внутри функции создается новый узел и присваивается указателю rsp.
- Указатель rsp указывает на начало списка, поэтому (rsp).pred и (rsp).sled инициализируются как NULL.
- Затем пользователю предлагается ввести последовательность элементов.
- Переменная el инициализируется вводом пользователя.
- В цикле while происходит добавление каждого элемента в список.
- Для каждого элемента создается новый узел, и указатель rsp указывает на этот узел.
- Поле pred нового узла инициализируется как NULL, а поле sled указывает на предыдущий узел (rsp).
- Затем указатель rsp перемещается к следующему узлу, и поле sled этого узла инициализируется как NULL.
- Поле elem узла инициализируется введенным пользователем значением.
- После окончания цикла, указатель ksp инициализируется как rsp.
- Функция завершается.