Advertisement
Guest User

Untitled

a guest
Apr 19th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.92 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct str_nod{
  6.    
  7.     char caracter;
  8.     unsigned int nr_aparitii;
  9.     struct str_nod *stanga;
  10.     struct str_nod *dreapta;
  11.     struct str_nod *sus;
  12.     struct str_nod *nod_urmator;
  13.    
  14. } nod;
  15.  
  16. //Afisare noduri ramase
  17. void afiseaza_lista(nod *lista_noduri)
  18. {
  19.     nod *p;
  20.    
  21.     if(lista_noduri == NULL)
  22.     {
  23.         printf("Lista nula.");
  24.         return;
  25.     }
  26.    
  27.     p = lista_noduri;
  28.     while(p)
  29.     {
  30.         printf(" (%c,%2u) ", p->caracter, p->nr_aparitii);
  31.         p = p->nod_urmator;
  32.     }
  33.     printf("\n");
  34.    
  35. }
  36.  
  37. //Afisare arbore
  38. void afiseaza_arbore(nod *radacina, int nivel)
  39. {
  40.     int i;
  41.    
  42.     if(radacina == NULL)
  43.         return;
  44.        
  45.     for(i=0;i<nivel;i++)
  46.         printf("\t");
  47.     printf("-");
  48.     printf(" (%c,%2u) \n", radacina->caracter, radacina->nr_aparitii);
  49.     afiseaza_arbore(radacina->stanga, nivel+1);
  50.     afiseaza_arbore(radacina->dreapta, nivel+1);
  51.    
  52. }
  53.  
  54.  
  55. void gaseste_minim(nod *p, nod **min1, nod **min2)
  56. {
  57.     while(p)
  58.     {
  59.                
  60.         if((*min1)->nr_aparitii > p->nr_aparitii)
  61.         {
  62.             *min2 = *min1;
  63.             *min1 = p;
  64.         }
  65.         else if((*min2)->nr_aparitii > p->nr_aparitii)
  66.         {
  67.             *min2 = p;
  68.         }
  69.        
  70.         p = p->nod_urmator;
  71.     }
  72.    
  73. }
  74.  
  75. //9 9 3 4
  76. //9 9   9 3    
  77. //
  78.  
  79. nod *adauga_nod(nod **p)
  80. {
  81.     if(*p == NULL)
  82.     {
  83.         nod *q = (nod*) malloc(sizeof(nod));
  84.         q->nod_urmator = NULL;
  85.         q->caracter = '-';
  86.         return q;
  87.     }
  88.     while(p->nod_urmator) (*p)=(*p)->nod_urmator;
  89.    
  90.     nod *last = (nod*) malloc(sizeof(nod));
  91.     last->caracter = '-';
  92.     last->nod_urmator = NULL;
  93.    
  94.     //p->nod_urmator = last;
  95.    
  96.     return last;
  97. }
  98. void genereaza_arbore(char s[], nod **lista_noduri)
  99. {
  100.    
  101.     nod *p = NULL, *q = NULL;
  102.     nod *min1, *min2;
  103.     min1 = min2 = p;
  104.     p = q;  
  105.    
  106.    
  107.     for(int i=0; i<strlen(s); i++, p = p->nod_urmator)
  108.     {
  109.         //p = (nod *)malloc(sizeof(nod));
  110.         p = adauga_nod(&q);
  111.         printf("\nPentru caracterul %c introduceti numarul de aparitii: ", s[i]);
  112.         scanf("%d", &p->nr_aparitii);
  113.         p->caracter = s[i];
  114.         p->nod_urmator = NULL;
  115.        
  116.        
  117.        
  118.     }
  119.    
  120.    
  121.     while(q){printf("aci: %d\n", q->caracter);q=q->nod_urmator;}
  122.    
  123.     for(int i=0; i<strlen(s) - 1; i++)
  124.     {
  125.         //afiseaza_lista(q);
  126.         /*gaseste_minim(p, &min1, &min2);
  127.         nod *fin = adauga_nod(p);
  128.         fin->stanga = min1;
  129.         fin->dreapta = min2;
  130.         min1->sus = fin;
  131.         min2->sus = fin; */
  132.     }
  133.    
  134.    
  135.    
  136. }
  137.  
  138. int main()
  139. {
  140.     nod *lista_noduri = NULL;
  141.    
  142.    
  143.     char text[100];
  144.    
  145.     printf("Sir de codificat: ");
  146.     scanf("%s", text);
  147.    
  148.    
  149.    
  150.     genereaza_arbore(text, &lista_noduri);        
  151.    
  152.     return 0;
  153. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement