Не создаются последующие узлы списка - 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; }
Решение задачи: «Не создаются последующие узлы списка»
#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 при открытии файла. В случае ошибки при открытии файла выводится сообщение об ошибке и возвращается код завершения с неудачным статусом.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д