doubleChainedList/double_chained_functions.c
2020-04-28 21:25:03 +02:00

130 lines
2.3 KiB
C
Executable File

#include <stdio.h>
#include <stdlib.h>
#include "double_chained_functions.h"
messdaten* insertFirst (messdaten* firstelem, messdaten* newelement)
{
if (firstelem != NULL)
{
newelement->next = firstelem;
newelement->prev = firstelem->prev;
firstelem->prev = newelement;
}
else
{
newelement->next = NULL;
newelement->prev = newelement;
}
return (newelement);
}
messdaten* insertLast (messdaten* firstelem, messdaten* newelement)
{
if (firstelem != NULL)
{
newelement->prev = firstelem->prev;
firstelem->prev = newelement;
newelement->prev->next = newelement;
newelement->next = NULL;
}
else
{
firstelem = insertFirst (firstelem, newelement);
}
return (firstelem);
}
messdaten* insertPos (messdaten* firstelem, messdaten* newelement, int pos)
{
int i = 0;
messdaten* temp = firstelem;
if (pos == 0)
{
firstelem = insertFirst (firstelem, newelement);
}
else
{
while (temp->next != NULL && i < (pos - 2))
{
temp = temp->next;
i++;
}
if (temp->next != NULL)
{
newelement->next = temp->next;
temp->next = newelement;
newelement->prev = temp->next->prev;
temp->next->prev = newelement;
}
else
{
firstelem = insertLast (firstelem, newelement);
fprintf (stderr,"llfunct:insertPos->Warning Position is not existing. Element is added to the end of the list!!\n");
}
}
return (firstelem);
}
messdaten* deleteFirst (messdaten* firstelem)
{
messdaten* n = firstelem;
firstelem = n->next;
firstelem->prev = n->prev;
free (n);
return (firstelem);
}
messdaten* deleteLast (messdaten* firstelem)
{
messdaten* temp = firstelem->prev;
firstelem->prev = firstelem->prev->prev;
free ((firstelem->prev->next));
firstelem->prev->next = NULL;
return (firstelem);
}
messdaten* deletePos (messdaten* firstelem, int pos)
{
int i = 0;
messdaten* temp = firstelem;
messdaten* tempsec;
while (i < (pos - 2))
{
temp = temp->next;
i++;
}
tempsec = temp->next->next;
tempsec->prev = temp;
free (temp->next);
temp->next = tempsec;
return (firstelem);
}
messdaten* deleteAll (messdaten* firstelem)
{
messdaten* temp;
while (firstelem->next != NULL)
{
temp = firstelem;
firstelem = temp->next;
free (temp);
}
return (firstelem);
}