NoPaste

C: Verkettete Listen

von SchroedingersKatze
SNIPPET_DESC:
Anfang einer Implementierung verketteter Listen
SNIPPET_CREATION_TIME:
01.07.2014 15:15:33
SNIPPET_PRUNE_TIME:
Unendlich

SNIPPET_TEXT:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. /* Strukturdefinitionen */
  5.  
  6. typedef struct my_node node;
  7.  
  8. struct my_node {
  9.   int    value;
  10.   node*  next;
  11. };
  12.  
  13. typedef struct my_linkedlist LinkedList;
  14.  
  15. struct my_linkedlist {
  16.   node* sentinel_head;
  17.   node* sentinel_tail;
  18.   node* head;
  19.   node* tail;
  20.   int size;
  21. };
  22.  
  23. #define NODESIZE (sizeof(node))
  24. #define LISTSIZE (sizeof(LinkedList))
  25.  
  26. /* Funktionsdeklarationen */
  27.  
  28. /* neue, leere Liste erzeugen */
  29. LinkedList* newList(void);
  30.  
  31. /* ist die Liste leer? */
  32. int isEmpty(LinkedList l);
  33.  
  34. /* Laenge der Liste ermitteln */
  35. int length (LinkedList* l);
  36.  
  37. /* neuen Knoten mit vorgegebenem Integerwert erzeugen */
  38. node* newNode (int data);
  39.  
  40. /* Knoten am Ende einfuegen */
  41. LinkedList* appendNode (LinkedList* l, node* n);
  42.  
  43. /* Knoten mittendrin einfuegen */
  44. LinkedList* appendNodeAtPosition (LinkedList* l,
  45.                                   node* n,
  46.                                   int posAfterInsertion);
  47.  
  48. /* Liste komplett aus dem Speicher entfernen */
  49. int destroyList(LinkedList* l);
  50.  
  51. /* Einen Knoten ausgeben */
  52. void printNode (node* n);
  53.  
  54. /* Liste ausgeben */
  55. void printList (LinkedList* l);
  56.  
  57. /* Letzten Knoten entfernen */
  58. LinkedList* deleteLastNode (LinkedList* l, node* prevToDelete);
  59.  
  60. /* Knoten mittendrin entfernen */
  61. LinkedList* deleteSpecificNode (LinkedList* l, node* n);
  62.  
  63. /* Knoten an bestimmter Position entfernen */
  64. LinkedList* deleteNodeAtPosition (LinkedList* l, int posBeforeDeletion);
  65.  
  66. /* Knoten mit bestimmten Datenwert finden */
  67. int findData (LinkedList* l, int dataToFind);
  68.  
  69.  
  70. /* Implementierung */
  71.  
  72.  
  73. LinkedList* newList (void) {
  74.  
  75.   LinkedList* pointer = NULL;
  76.  
  77.   if ((pointer = (LinkedList*) malloc(1 * LISTSIZE)) == NULL) {
  78.  
  79.     printf ("Nicht genuegend Speicherplatz fuer LinkedList!");
  80.     exit (1);
  81.  
  82.   }
  83.  
  84.   pointer->sentinel_head = newNode(-1);
  85.   pointer->sentinel_tail = newNode(-1);
  86.   pointer->head = NULL;
  87.   pointer->tail = NULL;
  88.   pointer->size = 0;
  89.  
  90.   return pointer;
  91.  
  92. }
  93.  
  94. node* newNode (int data) {
  95.  
  96.   node* pointer = NULL;
  97.  
  98.   if (( pointer = (node*) malloc (1 * NODESIZE)) == NULL) {
  99.  
  100.     printf ("Nicht genuegend Speicherplatz fuer node!");
  101.     exit (1);
  102.  
  103.   }
  104.  
  105.   pointer->value = data;
  106.   pointer->next = NULL;
  107.  
  108.   return pointer;
  109.  
  110. }
  111.  
  112. int destroyList(LinkedList* l) {
  113.  
  114.   return 0;
  115.  
  116. }
  117.  
  118.  
  119. /* Hauptprogramm */
  120.  
  121. #define MAX (10)
  122.  
  123. int main (void) {
  124.  
  125.   LinkedList* l = newList();
  126.  
  127.   int i = 0;
  128.  
  129.   printList (l);
  130.  
  131.   for (i = 0; i < 10; i++) {
  132.  
  133.     node* newnode = newNode(3*i + 4);
  134.  
  135.     appendNode(l, newnode);
  136.  
  137.   }
  138.  
  139.   printList(l);
  140.  
  141.   if (destroyList(l) != 0) {
  142.     printf ("Es gibt noch Datenreste\n");
  143.   }
  144.  
  145.   return 0;
  146.  
  147. }

Quellcode

Hier kannst du den Code kopieren und ihn in deinen bevorzugten Editor einfügen. PASTEBIN_DOWNLOAD_SNIPPET_EXPLAIN