Hyluss

Drzewo binarne

May 24th, 2016
634
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.71 KB | None | 0 0
  1. //dżewo binarne (float, string)
  2.  
  3. #include "stdafx.h"
  4. #include <malloc.h>
  5. #include <conio.h>
  6. #include <cstring>
  7.  
  8. struct dzewo
  9. {
  10.     double dane;
  11.     char *slowo;
  12.     struct dzewo *lewslowo, *prawslowo;
  13. };
  14.  
  15. struct dzewo *Nowe_dzewo(double _dane, char* slowo_str)
  16. {
  17.     struct dzewo * nowe = (struct dzewo*)malloc(sizeof(struct dzewo));
  18.     nowe->dane = _dane;
  19.     nowe->slowo = NULL;
  20.     nowe->slowo = (char*)malloc (sizeof(char)*(strlen (slowo_str)) );
  21.     strcpy(nowe->slowo, slowo_str);
  22.     nowe->lewslowo = nowe->prawslowo = 0;
  23.     return nowe;
  24. }
  25.  
  26. void Wstaw_dz(struct dzewo *rut, double _dane, char* slowo_str)
  27. {
  28.     for(;;)
  29.     {
  30.         if (_dane<rut->dane)
  31.         {
  32.             if (rut->lewslowo == 0)
  33.             {
  34.                 rut->lewslowo = Nowe_dzewo(_dane, slowo_str);
  35.                 return;
  36.             }
  37.             else
  38.                 rut = rut->lewslowo;
  39.             }
  40.         else{
  41.             if(rut->prawslowo==0)
  42.             {
  43.                 rut->prawslowo = Nowe_dzewo(_dane, slowo_str);
  44.                 return;
  45.             }
  46.             else rut = rut->prawslowo;
  47.         }
  48.     }
  49. }
  50.  
  51. int l = 0, p = 0;
  52.  
  53. void Wyswietl(struct dzewo * rut)
  54. {
  55.     printf("%.2lf | %s\n", rut->dane, rut->slowo);
  56.     if (rut->lewslowo != NULL)
  57.     {
  58.         ++l;
  59.         printf("l: %d/", l);
  60.         Wyswietl(rut->lewslowo);
  61.     }
  62.     if (rut->prawslowo != NULL)
  63.     {
  64.         ++p;
  65.         printf("p: %d\\", p);
  66.         Wyswietl(rut->prawslowo);
  67.     }
  68. }
  69.  
  70. bool Wyszukaj(dzewo* rut, float _dane)
  71. {
  72.     if (rut == NULL)
  73.         return false;
  74.     else if (rut->dane == _dane)
  75.         return true;
  76.     else if (rut->dane < _dane)
  77.         return Wyszukaj(rut->prawslowo, _dane);
  78.     else return Wyszukaj(rut->lewslowo, _dane);
  79. }
  80.  
  81. void Zwalnianie(dzewo *rut)
  82. {
  83.     if (rut->lewslowo != NULL)
  84.         Zwalnianie(rut->lewslowo);
  85.     if (rut->prawslowo != NULL)
  86.         Zwalnianie(rut->prawslowo);
  87.     delete rut;
  88. }
  89.  
  90.  
  91. int main()
  92. {
  93.     double do_szukania = 9.99;
  94.     double liczba;
  95.     char slowo[10];
  96.     FILE *no_plik;
  97.     if ((no_plik = fopen("plik.txt", "r")) != NULL) {
  98.         fscanf(no_plik, "%lf", &liczba);
  99.    
  100.         fscanf(no_plik, "%s", &slowo);
  101.         dzewo *ent = Nowe_dzewo(liczba, slowo);
  102.  
  103.         while (!feof(no_plik))
  104.         {
  105.             fscanf(no_plik, "%lf", &liczba);
  106.             fscanf(no_plik, "%s", &slowo);
  107.             Wstaw_dz(ent, liczba, slowo);
  108.         }
  109.  
  110.         printf("Leci drzewo!\n");
  111.         Wyswietl(ent);
  112.         printf("\n%d", Wyszukaj(ent, 9.99));
  113.         printf("\n%d", Wyszukaj(ent, 2.50000000));
  114.         Zwalnianie(ent);
  115.     }
  116.     else
  117.         printf("Chuju pliku nie ma\n");
  118.     getch();
  119.     return 0;
  120. }
Advertisement
Comments
  • User was banned
Add Comment
Please, Sign In to add comment