прочитать данные из файла .txt в c и добавить их в связанный список - PullRequest
0 голосов
/ 20 апреля 2020

В основной функции читать данные и сортировать по номеру (в порядке возрастания, используя сортировку вставкой) в связанном списке.

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

В этой части должны быть размещены элементы структуры «теле» в связанном списке.

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

Входной файл (первые пять строк):

80043 CHEBIYYAM
80131 SHUKLA
80200 GANGARAPU
85400 GAURAV
80001 MUDIT

Код:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define row 100  // total number of lines in txt file
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;
}**

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

80001 MUDIT
80043 CHEBIYYAM
80131 SHUKLA
80200 GANGARAPU
85400 GAURAV

Как прочитать число и имя по отдельности, сохранить их в связанном списке на узле и отсортировать его? Я не написал всю программу (поэтому еще не скомпилирован). Основная проблема - чтение номера и имени по отдельности и сохранение их в связанном списке.

...