Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2017
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.28 KB | None | 0 0
  1. #include <assert.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. #include "sortedcontainer.h"
  7.  
  8. int data_compare(data* d1, data* d2) {
  9.     assert(d1);
  10.     assert(d2);
  11.     if(d1->age < d2->age) return -1;
  12.     if(d1->age > d2->age) return 1;
  13.     return strcmp(d1->name, d2->name);
  14. }
  15.  
  16. // Do not change
  17. void data_print(data* d, FILE* f) {
  18.     fprintf(f, "%i %s", d->age, d->name);
  19. }
  20.  
  21. data* data_new(int age, char const* name) {
  22.     data* d = (data*)malloc(sizeof(data));
  23.     d->age = age;
  24.     strncpy(d->name, name, NAME_LENGTH);
  25.     return d;
  26. }
  27.  
  28. void data_delete(data* d) {
  29.     free(d);
  30. }
  31.  
  32. node* node_new(data* d) {
  33.     struct node* new_node = (node*) malloc(sizeof(struct node));
  34.     new_node->data = d;
  35.     new_node->left = NULL;
  36.     new_node->right = NULL;
  37.     return new_node;
  38. }
  39.  
  40. void node_delete(node* n) {
  41.     if(n) {
  42.         data_delete(n->data);
  43.         free(n);
  44.     }
  45. }
  46.  
  47. sortedcontainer* sortedcontainer_new() {
  48.     sortedcontainer* d = (sortedcontainer*)malloc(sizeof(sortedcontainer));
  49.     d->root = NULL;
  50.     return d;
  51. }
  52.  
  53. void sortedcontainer_insert(sortedcontainer* sc, data* data) {
  54.     if(!data) {
  55.         return;
  56.     }
  57.     node* n = node_new(data);
  58.     node* root = sc->root;
  59.     if(!node) {
  60.         sc->node = n;
  61.     } else {
  62.         sortedcontainer_insert_rec(root, n);
  63.     }
  64. }
  65.  
  66. void sortedcontainer_insert_rec(node* node, node* new_node) {
  67.     data* data = node->data;
  68.     data* new_data = new_node->data;
  69.     bool isSmaller = data_compare(data, newData) <= 0;
  70.     if(isSmaller) {
  71.         if(node->left == NULL) {
  72.             node->left = new_node;
  73.         } else {
  74.             sortedcontainer_insert_rec(node->left, new_node);
  75.         }
  76.     } else {
  77.         if(node->right == NULL) {
  78.             node->right = new_node;
  79.         } else {
  80.             sortedcontainer_insert_rec(node->right, new_node);
  81.         }
  82.     }
  83. }
  84.  
  85. int sortedcontainer_erase(sortedcontainer* sc, data* data) {
  86.     /// TODO
  87.    
  88.     if(n) {
  89.         node* left = n->left;
  90.         node* right = n->right;
  91.         bool hasLeft = left;
  92.         bool hasRight = right;
  93.         if(hasLeft && !hasRight) {
  94.            
  95.         } else if(!hasLeft && hasRight) {
  96.            
  97.         } else if(hasLeft && hasRight) {
  98.             n = left;
  99.             left->
  100.         } else {
  101.             free(n);
  102.         }
  103.     return 0;
  104. }
  105.  
  106. int sortedcontainer_contains(sortedcontainer* sc, data* data) {
  107.     // Implement this
  108.     (void)sc;
  109.     (void)data;
  110.     return 0;
  111. }
  112.  
  113. // Do not change
  114. static void node_printtree(node* n, int level, FILE* printFile) {
  115.     fprintf(printFile, "%*s ", level, "");
  116.     if(n) {
  117.         data_print(n->data, printFile);
  118.         fprintf(printFile, "\n");
  119.         node_printtree(n->left, level+1, printFile);
  120.         node_printtree(n->right, level+1, printFile);
  121.     } else {
  122.         fprintf(printFile, "(nil)\n");
  123.     }
  124. }
  125.  
  126. // Do not change
  127. void sortedcontainer_print(sortedcontainer* sc, FILE* printFile) {
  128.     node_printtree(sc->root, 0, printFile);
  129. }
  130.  
  131. static void node_deletetree(node* n) {
  132.     if(n) {
  133.         node* left = n->left;
  134.         node* right = n->right;
  135.         node_delete(n);
  136.         node_deletetree(left);
  137.         node_deletetree(right);
  138.     }
  139. }
  140.  
  141. void sortedcontainer_delete(sortedcontainer* sc) {
  142.     node_deletetree(sc->root);
  143.     free(sc);
  144. }
  145.  
  146. node* copy_construct_node(node* n) {
  147.     if(!n) {
  148.         return NULL;
  149.     }
  150.     struct node* copy = (node*) malloc(sizeof(struct node));
  151.     copy->data = n->data;
  152.     copy->left = n->left;
  153.     copy->right = n->right;
  154. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement