Создание списка в C реализации SLL.Применение одиночного связанного списка в C
struct dat
{
char fname[20];
char lname[20];
};
typedef struct node_s
{
struct dat data;
struct node_s *next;
}NODE;
NODE *list=NULL;
NODE *list_create(struct dat *data)
{
NODE *node;
if(!(node=malloc(sizeof(NODE))))
{
return NULL;
}
node->data = data;
node->next = NULL;
return node;
}
NODE *list_insert_after(NODE *node, struct dat *data)
{
NODE *newnode;
newnode = list_create(data);
newnode->next = node->next;
node->next = newnode;
return newnode;
}
Я не могу найти хорошие примеры, используя SLL. Теперь у меня есть эта функция append, теперь я применим две функции SLL, list_create и list_insert_after. Это правильно?
void app(struct dat x)
{
FILE *fp;
fp=fopen("database.dat","a");
if(fp==NULL)
{
printf("file error");
}
if(fp!=NULL)
{
printf("enter lname: ");
gets(x.lname);
printf("enter fname: ");
gets(x.fname);
fprintf(fp,"%s %s\n",x.lname,x.fname);
if(list == NULL)
{
list=list_create((&x));
}
else
{
next=list_insert_after(list,&x);
}
}
fclose(fp);
}
См [? Является ли это хорошая идея указатели определения типа во] (http://stackoverflow.com/questions/750178/is-it- a-good-idea-to-typedef-указатели) –
В 'list_insert_after()', это хорошая идея, чтобы проверить t он возвращает значение из 'list_create()' перед разыменованием его; это может быть нулевой указатель. –
См. [Почему функция 'gets()' опасна?] (Http://stackoverflow.com/questions/1694036/why-is-the-gets-function-dangerous-why-should-it-not-be- используется) для объяснения причин, почему вы никогда не должны использовать функцию 'gets()'. –