EldiraSesto

BAUM AKTUELNI

Dec 3rd, 2019
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.45 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct node_s
  6. {
  7. char songtitle [256] , interpreter [256];
  8. struct node_s *parent , *left , * right ;
  9. } node_t ;
  10.  
  11. node_t * create_node (char songtitle [], char interpreter []){
  12. node_t * newnode = 0;
  13. newnode = calloc(1, sizeof(node_t));
  14. strcpy(newnode->songtitle, songtitle);
  15. strcpy(newnode->interpreter, interpreter);
  16. newnode->parent=0;
  17. newnode->left=0;
  18. newnode->right=0;
  19. return newnode;
  20. }
  21.  
  22. node_t * insert_node ( node_t * rootnode , char songtitle [], char interpreter []){
  23. if(rootnode){
  24. if(strcmp(rootnode->songtitle, songtitle)<0){
  25.         if(rootnode->left){
  26.    insert_node(rootnode->left, songtitle, interpreter);
  27.         }
  28.         else{
  29.             rootnode->left = create_node(songtitle, interpreter);
  30.             rootnode->left->parent=rootnode;
  31.  
  32.         }
  33. }
  34. else if(strcmp(rootnode->songtitle, songtitle)>0){
  35.     if(rootnode->right){
  36.     insert_node(rootnode->right, songtitle, interpreter);
  37.     }
  38.     else{
  39.         rootnode->right = create_node(songtitle, interpreter);
  40.         rootnode->right->parent=rootnode;
  41.  
  42.     }
  43. }
  44. }
  45. else return create_node(songtitle, interpreter);
  46. return rootnode;
  47.  
  48. }
  49. void tree_print(node_t *node, long level)
  50. {
  51. long i;
  52. if (node->left) tree_print(node->left, level + 1);
  53. for (i = 0; i < level; ++i) printf(" "); /* fuegt " " level mal ein */
  54. fprintf(stdout, "%s %s\n", node->songtitle, node->interpreter); /* gibt das Element aus */
  55. if (node->right) tree_print(node->right, level + 1);
  56. }
  57.  
  58. void print ( node_t * node ){
  59. tree_print(node, 1);
  60. }
  61.  
  62. void destroy_nodes(node_t *node)
  63. {
  64. if (node->left)
  65. destroy_nodes(node->left);
  66. if (node->right)
  67. destroy_nodes(node->right);
  68. free(node);
  69. }
  70.  
  71. node_t * search_node ( node_t * rootnode , char songtitle []){
  72. if(rootnode){
  73.     if(strcmp(rootnode->songtitle, songtitle) ==0){
  74.         return rootnode;
  75.     }
  76.     if(rootnode->left){
  77.         search_node(rootnode->left, songtitle);
  78.     }
  79.     if(rootnode->right){
  80.         search_node(rootnode->right, songtitle);
  81.     }
  82. }
  83.  
  84.     printf("Prazan rootnode....");
  85.     return 0;
  86.  
  87. }
  88.  
  89. long count_nodes ( node_t * rootnode ){
  90. long anzahl=0;
  91. if(rootnode){
  92.     anzahl++;
  93.     if(rootnode->left){
  94.         anzahl=anzahl+count_nodes(rootnode->left);
  95.     }
  96.     if(rootnode->right){
  97.         anzahl=anzahl+count_nodes(rootnode->right);
  98.     }
  99. }
  100. return anzahl;
  101. }
  102.  
  103. long count_nodes_with_interpreter ( node_t * rootnode , char interpreter []){
  104. long anzahl = 0;
  105. if(rootnode){
  106.     if(strcmp(rootnode->interpreter, interpreter)==0){
  107.         anzahl++;
  108.     }
  109.     if(rootnode->left){
  110.         anzahl=anzahl+count_nodes_with_interpreter(rootnode->left, interpreter);
  111.     }
  112.     if(rootnode->right){
  113.         anzahl=anzahl+count_nodes_with_interpreter(rootnode->right, interpreter);
  114.     }
  115. }
  116. return anzahl;
  117. }
  118.  
  119.  
  120.  
  121. int main()
  122. {
  123.     int c=0;
  124.     long br=0;
  125.     char interpreter[256], songtitle[256];
  126.     node_t *node=0;
  127.     printf("\nFunktions you can choose: ");
  128.     printf("\n1: Create node ");
  129.     printf("\n2: Insert node ");
  130.     printf("\n3: Destroy nodes ");
  131.     printf("\n4: Print tree ");
  132.     printf("\n5: Count nodes ");
  133.     printf("\n6: Count nodes wth inter ");
  134.     printf("\n7: Search node ");
  135.     printf("\n0: END ");
  136.  
  137.     do{
  138.     printf("\nIzaberite funkciju koju zelite: ");
  139.     scanf("%d", &c);
  140.     switch(c){
  141.  
  142.     case 1: printf("\nUnesite songtitle: ");
  143.     scanf("%s", songtitle);
  144.      printf("\nUnesite interpreter: ");
  145.     scanf("%s", interpreter);
  146.     node = create_node(songtitle, interpreter);
  147.     if(node!=0) printf("\nUspjesno kreiran node");
  148.     break;
  149.  
  150.     case 2: printf("\nUnesite songtitle: ");
  151.     scanf("%s", songtitle);
  152.      printf("\nUnesite interpreter: ");
  153.     scanf("%s", interpreter);
  154.     node=insert_node(node, songtitle, interpreter);
  155.     break;
  156.  
  157.     case 3: destroy_nodes(node);
  158.     node = 0;
  159.     break;
  160.  
  161.     case 4: printf("\nNodes:   ");
  162.         print(node);
  163.         break;
  164.  
  165.     case 5: printf("\nNumber of nodes is: ");
  166.           br = count_nodes(node);
  167.           printf("%ld", br);
  168.           break;
  169.  
  170.     case 6:  printf("\nUnesite interpreter: ");
  171.             scanf("%s", interpreter);
  172.             br=count_nodes_with_interpreter(node, interpreter);
  173.             printf("\nBroj nodes sa intepreterom je: %ld", br);
  174.             break;
  175.  
  176.      case 7: break;
  177.      case 0: break;
  178.      default: printf("\nPogresan unos....");
  179.      break;
  180. }
  181. }while(c!=0);
  182.     printf("Hello world!\n");
  183.     return 0;
  184. }
Advertisement
Add Comment
Please, Sign In to add comment