Не создаются последующие узлы списка - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Создаю список - читаю элементы списка из файла. создается один узел с двумя элементами. дальше программа не создает узлы. помогите пожалуйста) что в коде написано неправильно?
typedef struct node{
		   int data;
		   int data1;
		   node *next;
		   } Node;
		   
Node *Add_D(Node*Top, int d, int d1) {
       FILE *f;
    f=fopen("my.txt","r");
    if(f==NULL){
                printf("Файл не найден");
                getch();
                exit(0);
                }
    
    while(!feof(f)) {

    Top=NULL;  
    Node *newel=new Node;
    int z=fscanf(f, "%d%d", &d, &d1);
    if (z!=2) break;
    printf("%d %d \n", d, d1); 
         newel->data=d;
         newel->data1=d1; 
         newel->next=NULL;       
         if(Top==NULL) return newel;
         printf("hi"); 
         Node *temp=Top; 
         while(temp->next)
         temp=temp->next; 
           
         temp->next=newel;
         return Top; 
         }
          fclose(f);
           
         }

void show(Node*Top) {
       while(Top) {
                  printf("(%dx^%d)->", Top->data1, Top->data);
                  Top=Top->next;
                  }} 

int main(int argc, char *argv[])
{
system("chcp 1251");
int d,d1;
Node *nodeTop = new Node;
  nodeTop = Add_D(nodeTop, d, d1);

show(nodeTop);        

    system("PAUSE");
    return EXIT_SUCCESS;
}

Решение задачи: «Не создаются последующие узлы списка»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
typedef struct _TNode
{
    int value_one;
    int value_two;
    struct _TNode* next;
}   TNode;
 
typedef struct _TQueue
{
    TNode* head;
    TNode* tail;
}   TQueue;
 
//-----------------------------------------------------------------------------
TQueue* Push(TQueue* queue, int value_one, int value_two)
{
    TNode* node = malloc(sizeof(TNode));
    node->value_one = value_one;
    node->value_two = value_two;
    node->next = NULL;
 
    if (queue->head && queue->tail)
    {
        queue->tail->next = node;
        queue->tail = node;
    }
    else
    {
        queue->head = queue->tail = node;
    }
 
    return queue;
}
//-----------------------------------------------------------------------------
void Print(const TQueue* queue)
{
    TNode* node = queue->head;
    for (; node; node = node->next)
    {
        printf("(%dx^%d)->", node->value_one, node->value_two);
    }
}
//-----------------------------------------------------------------------------
TQueue GetListFrom(FILE* f)
{
    int value_one, value_two;
    TQueue queue = {NULL, NULL};
 
    while (fscanf(f, "%d %d", &value_one, &value_two) == 2)
    {
        Push(&queue, value_one, value_two);
    }
 
    return queue;
}
//-----------------------------------------------------------------------------
 
int main()
{
    const char CFileName[] = "my.txt";
 
    TQueue queue = {NULL, NULL};
    FILE* f = fopen(CFileName, "r");
 
    if (f == NULL)
    {
        perror(CFileName);
        return EXIT_FAILURE;
    }
 
    queue = GetListFrom(f);
 
    fclose(f);
 
    Print(&queue);
 
    return EXIT_SUCCESS;
}

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

В данном коде реализована очередь (FIFO) с использованием связанного списка. Связанный список состоит из узлов, каждый из которых содержит два целочисленных значения и указатель на следующий узел в списке. Код функции Push добавляет новый узел в начало списка, обновляя указатели на голову и хвост списка. Если список пуст, то оба указателя (голова и хвост) указывают на новый узел. Если список не пуст, то новый узел добавляется перед текущим хвостом списка. Код функции Print проходит по всем узлам списка и выводит их значения. Код функции GetListFrom считывает из файла два целочисленных значения и добавляет их в начало списка. В функции main создается пустой список, открывается файл для чтения, список заполняется данными из файла, затем выводится на экран. Код не содержит обработки ошибок, кроме проверки на NULL при открытии файла. В случае ошибки при открытии файла выводится сообщение об ошибке и возвращается код завершения с неудачным статусом.

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


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

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

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