Создать двусвязный список из файла - 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;
}

Объяснение кода листинга программы

  1. Создается функция с именем Postroenie, которая принимает два указателя: nsp и ksp.
  2. Первый указатель nsp указывает на начало списка, а второй указатель ksp указывает на конец списка.
  3. Внутри функции создается новый узел и присваивается указателю rsp.
  4. Указатель rsp указывает на начало списка, поэтому (rsp).pred и (rsp).sled инициализируются как NULL.
  5. Затем пользователю предлагается ввести последовательность элементов.
  6. Переменная el инициализируется вводом пользователя.
  7. В цикле while происходит добавление каждого элемента в список.
  8. Для каждого элемента создается новый узел, и указатель rsp указывает на этот узел.
  9. Поле pred нового узла инициализируется как NULL, а поле sled указывает на предыдущий узел (rsp).
  10. Затем указатель rsp перемещается к следующему узлу, и поле sled этого узла инициализируется как NULL.
  11. Поле elem узла инициализируется введенным пользователем значением.
  12. После окончания цикла, указатель ksp инициализируется как rsp.
  13. Функция завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.333 из 5
Похожие ответы