Advertisement
Guest User

Untitled

a guest
Jul 21st, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.04 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. /*
  5.  * Definition des Listenknotentyps
  6.  */
  7. struct DListNode {
  8.   double            m_data;
  9.   struct DListNode * m_next;
  10.   struct DListNode * m_prev;
  11. };
  12.  
  13. int
  14. main ()
  15. {
  16.   /* Temporaere Variable zur Aufnahme der Eingabedaten */
  17.   double tem_data;
  18.  
  19.   /* Zeiger auf Anfang und Ende der Liste */
  20.   struct DListNode * list_begin = NULL;
  21.   struct DListNode * list_end = NULL;
  22.  
  23.   /* Temporaerer Zeiger auf Listenknoten */
  24.   struct DListNode * tem_node;
  25.  
  26.   /* Solange Eingaben kommen ... */
  27.   while (scanf ("%lf", &tem_data) == 1) {
  28.  
  29.     /* Speicher fuer neuen Listenknoten anfordern */
  30.     tem_node = malloc (sizeof (struct DListNode));
  31.  
  32.     /* Auf Speicherfehler testen ... */
  33.     if (tem_node == NULL) {
  34.       fprintf (stderr, "\aSpeicherfehler!\n");
  35.       exit (1);
  36.     }
  37.  
  38.     /* Anwendungsinformation eintragen */
  39.     tem_node -> m_data = tem_data;
  40.  
  41.     /* Der Vorgaenger des neuen Knotens
  42.        ist der bislang letzte Knoten */
  43.     tem_node -> m_prev = list_end;
  44.  
  45.     /* Der Nachfolger des letzten Knotens
  46.        ist nicht definiert, also NULL */
  47.     tem_node -> m_next = NULL;
  48.  
  49.     if (list_begin == NULL) {
  50.       /* Falls noch kein Listenanfang definiert ist,
  51.          dann ist der gerade angelegte Knoten der
  52.          Anfang der Liste */
  53.       list_begin = tem_node;
  54.     } else {
  55.       /* Der Nachfolger des bislang letzten Knotens
  56.          ist der gerade neu angelegte Knoten */
  57.       list_end -> m_next = tem_node;
  58.     }
  59.  
  60.     /* Der gerade neu angelegte Knoten
  61.        ist nun der letzte Knoten */
  62.     list_end = tem_node;
  63.  
  64.   }
  65.  
  66.   /* Ausgabe vorwaerts ... */
  67.   tem_node = list_begin;
  68.  
  69.   while (tem_node != NULL) {
  70.  
  71.     printf ("%f\n", tem_node -> m_data);
  72.  
  73.     /* Zum nachsten Knoten weitergehen ... */
  74.     tem_node = tem_node -> m_next;
  75.  
  76.   }
  77.  
  78.   /* Ausgabe rueckwaerts ... */
  79.   tem_node = list_end;
  80.  
  81.   while (tem_node != NULL) {
  82.  
  83.     printf ("%f\n", tem_node -> m_data);
  84.  
  85.     /* Zum nachsten Knoten weitergehen ... */
  86.     tem_node = tem_node -> m_prev;
  87.  
  88.   }
  89.  
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement