Создайте связанный список из этих 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
Я не могу понять данные чтения из номера и имени файла и сохранения это в узел связанного списка. Также у меня возникли проблемы во вложенной строке. Приведенный выше код дает ошибку сегментации ...