чтение данных из файла и сохранение в связанном списке (сортировка вставкой) - PullRequest
0 голосов
/ 21 апреля 2020

Создайте связанный список из этих 50 «теле» точек данных в отсортированном порядке. Каждая строка файла указывает одно число и одно имя.

Файл (содержит 50 таких записей):

2341 QWERTY

1456 AWSED

7864 RTHYO

1235 UHTCN

Код:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define row 100

typedef struct 
{
    char *name;
    int no;
} tele;

typedef struct _node
{
    tele data;
    struct _node *next;
} node;

void main()
{
    char line[100];
    int i;
    FILE *fp;
    node *current, *temp, *head;
    tele *ptr = NULL;

    head=current=NULL;
    fp = fopen("test.txt","r");

    if (fp == NULL) 
    {
      fprintf(stderr, "Error: unable to open file...\n");
    }

    while(i!=row)
    {   
        temp = (node *)malloc(sizeof(node));
        temp = strtok(line, "\\");                                                                                   
        temp->data.no = atoi(ptr);                                                      

        while (NULL != (ptr = strtok(NULL, "\\")))                              
        {                                                                                                                                  
            i++;   
            if(i == 1)                                                          
            temp->data.name = ptr;  
            temp->next = NULL;                                              
        }              
        i=0;     

        if(head==NULL)
        {
            current=head=temp;
        }

        else
        {
            current = current->next = temp;
        }

        i++;
    }

InsertSort(&head);
print(head);

}

void print(node *head) 
{
    node *current_node = head;
    while ( current_node != NULL) 
    {
        printf("%s %s\n", current_node->data.no, current_node->data.name);
        current_node = current_node->next;
    }
}

void SortedInsert(node** headRef, node * newNode)
{

    if (*headRef == NULL || (*headRef)->data.no >= newNode->data.no)
    {
        newNode->next = *headRef;
        *headRef = newNode;
    }

    else
    {

        node* current = *headRef;
        while (current->next!=NULL)
        {
            if(current->next->data.no >=newNode->data.no)
            {    
                break;
            }            
            current = current->next;
        }
        newNode->next = current->next;
        current->next = newNode;
    }

}

void InsertSort(node ** headRef)
{
    node* result = NULL; 
    node* current = *headRef; 
    node* _next = NULL;

    while (current!=NULL) 
    {
        _next = current->next; 
        SortedInsert(&result, current);
        current = _next;
    }
    *headRef = result;
}

Ожидаемый результат:

1235 UHTCN

1456 AWSED

2341 QWERTY

7864 RTHYO

Я не могу понять данные чтения из номера и имени файла и сохранения это в узел связанного списка. Также у меня возникли проблемы во вложенной строке. Приведенный выше код дает ошибку сегментации ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...