Cześć, w ramach nauki o strukturach danych napisałem dwie najprostsze implementacje listy jednokierunkowej. Obie działają, ale nie wiem czy któraś z nich jest lepsza czy gorsza od drugiej. Różnice są głównie między funkcjami Add, bo jedna przyjmuje wskaźnik i zwraca wskaźnik, a druga nic nie zwraca, tylko przyjmuje wskaźnik na wskaźnik na strukturę i na nim tylko działa.
#include <stdio.h>
#include <stdlib.h>
typedef struct MyList
{
int value;
struct MyList *Next;
}MyList;
MyList* Add(MyList* Ptr)
{
MyList *ToReturn=(MyList*)malloc(sizeof(MyList));
ToReturn->Next=Ptr;
return ToReturn;
}
void Display(MyList *List)
{
while(List!=0)
{
printf("%d\n", List->value);
List=List->Next;
}
}
int main()
{
MyList *List=NULL;
List=Add(List);
List->value=11;
List=Add(List);
List->value=22;
List=Add(List);
List->value=33;
Display(List);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
typedef struct MyList
{
int value;
struct MyList *Next;
}MyList;
void Add(MyList** Ptr)
{
(*Ptr)->Next=(MyList*)malloc(sizeof(MyList));
*Ptr=(*Ptr)->Next;
(*Ptr)->Next=0;
}
void Display(MyList *List)
{
while(List!=0)
{
printf("%d\n", List->value);
List=List->Next;
}
}
int main()
{
MyList *List=(MyList*)malloc(sizeof(MyList));
Add(&List);
MyList *First=List;
List->value=11;
Add(&List);
List->value=22;
Add(&List);
List->value=33;
Display(First);
return 0;
}