Создание односвязного списка с данными из файлового потока
В настоящее время я пытаюсь создать программу, которая создаст связанный список, содержащий следующее в каждом узле:
- указатель на следующий узел (очевидно, необходимый)
- строка, прочитанная из строки текста из файлового потока
- подсчет того, сколько раз строка встречалась в файловом потоке
У меня есть следующий код, но я столкнулся с парой проблем, которые я явно не понимаю:
Как выполнить поиск в списке, а затем создать узел, если соответствующий узел еще не найден в списке?
В общем, как создать головной узел, а затем начать связывать с ним последующие узлы?
Любая помощь очень ценится, так как я потратил много часов на поиски и просмотр видео на YouTube безрезультатно.
typedef struct List
{
struct List *next;
char *str;
int count;
} List;
Выше из предоставленного заголовочного файла. Ниже мой текущий код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "C2A6E4_List-Driver.h"
#define ARRAY_SIZE 255 /*Define the size of the array*/
List *CreateLinkedList(FILE *fp)
{
List *head, *ptr, *p;
head = NULL;
char tempBuffer[ARRAY_SIZE];
while (fgets(tempBuffer, ARRAY_SIZE, fp) != NULL)
{
char *strToken = strtok(tempBuffer, " ");
while (strToken != NULL)
{
for (p = head; p != NULL; p = p->next)
;
if (strcmp(p->str, strToken) == 0)
{
p->count++;
break;
}
else
{
if ((ptr = (List *)malloc(sizeof(List))) == NULL)
{
fprintf(stderr, "Failed to allocate memory!");
exit(EXIT_FAILURE);
}
if ((ptr->str = (char *)malloc(strlen(strToken) * sizeof(char) + sizeof(char))) == NULL)
{
fprintf(stderr, "Failed to allocate memory!");
exit(EXIT_FAILURE);
}
memcpy(&ptr->str, &strToken, sizeof(strToken));
ptr->count = 1;
if (head != NULL)
{
p = head;
p->next = ptr;
}
else
head = ptr;
}
strToken = strtok(NULL, " ");
}
}
return head;
}