icp/oer/courses/c-advanced/sections/01-introduction/03-hashtable/linked_list.h

54 lines
862 B
C

node *alloc_node(int Value, int x, int y, node *Next)
{
node *NewNode = malloc(sizeof(node));
NewNode->Value = Value;
NewNode->x = x;
NewNode->y = y;
NewNode->Next = Next;
return NewNode;
}
void list_add(node **Head, int Value, int x, int y)
{
node *NewNode = alloc_node(Value, x, y, *Head);
*Head = NewNode;
}
node *list_get(node **Head, int x, int y)
{
for(node *Iter = *Head; Iter; Iter = Iter->Next)
{
if(Iter->x == x && Iter->y == y)
{
return Iter;
}
}
return 0;
}
void list_remove(node **Head, node *Node)
{
node *Prev = 0;
for(node *Iter = *Head; Iter; Iter = Iter->Next)
{
if(Iter == Node)
break;
Prev = Iter;
}
if(Prev)
Prev->Next = Node->Next;
free(Node);
}
void list_free(node **Head)
{
for(node *Iter = *Head; Iter; )
{
node *ToFree = Iter;
Iter = Iter->Next;
free(ToFree);
}
}