commit c3513b192be31af746c5af46aa514e169a5abaea Author: lukas Date: Tue Apr 28 21:25:03 2020 +0200 init diff --git a/double_chained_functions.c b/double_chained_functions.c new file mode 100755 index 0000000..65d8c55 --- /dev/null +++ b/double_chained_functions.c @@ -0,0 +1,129 @@ +#include +#include +#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); +} diff --git a/double_chained_functions.h b/double_chained_functions.h new file mode 100755 index 0000000..c0f729c --- /dev/null +++ b/double_chained_functions.h @@ -0,0 +1,74 @@ +/* + * double_chained_functions.h + * + * Created on: 14.11.2017 + * Author: lukas + */ + +#ifndef DOUBLE_CHAINED_FUNCTIONS_H_ +#define DOUBLE_CHAINED_FUNCTIONS_H_ + +typedef struct mydata +{ + char sensorname[10]; + float messwert; +} mydata; + +typedef struct messdaten +{ + struct messdaten * next; + struct messdaten * prev; + struct mydata data; +} messdaten; + +/* functon to insert the first element + * in: firstelem; newelement + * out: newelement + * changed: firstelem + */ +messdaten* insertFirst (messdaten* firstelem, messdaten* newelement); + +/* functon to insert the last element + * in: firstelem; newelement + * out: newelement + * changed: lastelement + */ +messdaten* insertLast (messdaten* firstelem, messdaten* newelement); + +/* functon to insert the element on a specific position + * in: firstelem; newelement; position + * out: newelement + * changed: one more item in chained list... + */ +messdaten* insertPos (messdaten* firstelem, messdaten* newelement, int pos); + +/* functon to delete the first element + * in: firstelem; + * out: newelement + * changed: firstelem + */ +messdaten* +deleteFirst (messdaten* firstelem); + +/* functon to delete the last element + * in: firstelem + * out: newelement + * changed: lastelement + */ +messdaten* deleteLast (messdaten* firstelem); + +/* functon to delete the element of a specific element + * in: firstelem; newelement + * out: newelement + * changed: firstelem + */ +messdaten* deletePos (messdaten* firstelem, int pos); + +/* functon to delete all the list elements + * in: firstelem + * out: newelement + * changed: the whole list + */ +messdaten* deleteAll (messdaten* firstelem); + +#endif /* DOUBLE_CHAINED_FUNCTIONS_H_ */ diff --git a/double_chained_list.c b/double_chained_list.c new file mode 100755 index 0000000..652b792 --- /dev/null +++ b/double_chained_list.c @@ -0,0 +1,55 @@ +/* + ============================================================================ + Name : double_chained_list.c + Author : + Version : + Copyright : Your copyright notice + Description : Hello World in C, Ansi-style + ============================================================================ + */ + +#include +#include +#include "double_chained_functions.h" + +int main (void) +{ + + messdaten * head; + messdaten * erste; + messdaten * zweite; + messdaten * dritte; + + head = malloc (sizeof(messdaten)); + erste = malloc (sizeof(messdaten)); + zweite = malloc (sizeof(messdaten)); + dritte = malloc (sizeof(messdaten)); + if (head == NULL || erste == NULL || zweite == NULL || dritte == NULL) + { + return EXIT_FAILURE; + } + + head = insertLast (head, dritte); + head = insertPos (head, erste, 1); + head = insertPos (head, zweite, 2); + + erste->data.messwert = 42; + zweite->data.messwert = 2; + dritte->data.messwert = 3; + + printf ("Messwert von head: >%f<\n", head->data.messwert); + printf ("Messwert von head next: >%f<\n", head->next->data.messwert); + printf ("Messwert von head next next: >%f<\n", + head->next->next->data.messwert); + printf ("Messwert von head next next: >%f<\n\n",head->next->next->next->data.messwert); + + printf ("Messwert von head >%f<\n", head->data.messwert); + printf ("Messwert von erste: >%f<\n", erste->data.messwert); + printf ("Messwert von zweite: >%f<\n", zweite->data.messwert); + printf ("Messwert von zweite: >%f<\n", dritte->data.messwert); + + deleteAll (head); + + return EXIT_SUCCESS; +} +