В настоящее время я пытаюсь создать программу, которая создаст связанный список, содержащий следующее в каждом узле:
- указатель на следующий узел (очевидно, необходим)
- aстрока, прочитанная из строки текста из файлового потока
- количество раз, когда строка встречалась в файловом потоке
У меня есть следующий код, но ясталкиваюсь с несколькими проблемами, которые я явно не могу понять:
Как выполнить поиск в списке, а затем создать узел, если соответствующий узел еще не был найден в списке?
В общем, как создать головной узел и затем начать связывать с ним последующие узлы?
Любая помощь очень ценится, так как япотратил много часов, гугля и просматривая видео на 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;
}