Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- typedef struct str_nod{
- char caracter;
- unsigned int nr_aparitii;
- struct str_nod *stanga;
- struct str_nod *dreapta;
- struct str_nod *sus;
- struct str_nod *nod_urmator;
- } nod;
- //Afisare noduri ramase
- void afiseaza_lista(nod *lista_noduri)
- {
- nod *p;
- if(lista_noduri == NULL)
- {
- printf("Lista nula.");
- return;
- }
- p = lista_noduri;
- while(p)
- {
- printf(" (%c,%2u) ", p->caracter, p->nr_aparitii);
- p = p->nod_urmator;
- }
- printf("\n");
- }
- //Afisare arbore
- void afiseaza_arbore(nod *radacina, int nivel)
- {
- int i;
- if(radacina == NULL)
- return;
- for(i=0;i<nivel;i++)
- printf("\t");
- printf("-");
- printf(" (%c,%2u) \n", radacina->caracter, radacina->nr_aparitii);
- afiseaza_arbore(radacina->stanga, nivel+1);
- afiseaza_arbore(radacina->dreapta, nivel+1);
- }
- void gaseste_minim(nod *p, nod **min1, nod **min2)
- {
- while(p)
- {
- if((*min1)->nr_aparitii > p->nr_aparitii)
- {
- *min2 = *min1;
- *min1 = p;
- }
- else if((*min2)->nr_aparitii > p->nr_aparitii)
- {
- *min2 = p;
- }
- p = p->nod_urmator;
- }
- }
- //9 9 3 4
- //9 9 9 3
- //
- nod *adauga_nod(nod **p)
- {
- if(*p == NULL)
- {
- nod *q = (nod*) malloc(sizeof(nod));
- q->nod_urmator = NULL;
- q->caracter = '-';
- return q;
- }
- while(p->nod_urmator) (*p)=(*p)->nod_urmator;
- nod *last = (nod*) malloc(sizeof(nod));
- last->caracter = '-';
- last->nod_urmator = NULL;
- //p->nod_urmator = last;
- return last;
- }
- void genereaza_arbore(char s[], nod **lista_noduri)
- {
- nod *p = NULL, *q = NULL;
- nod *min1, *min2;
- min1 = min2 = p;
- p = q;
- for(int i=0; i<strlen(s); i++, p = p->nod_urmator)
- {
- //p = (nod *)malloc(sizeof(nod));
- p = adauga_nod(&q);
- printf("\nPentru caracterul %c introduceti numarul de aparitii: ", s[i]);
- scanf("%d", &p->nr_aparitii);
- p->caracter = s[i];
- p->nod_urmator = NULL;
- }
- while(q){printf("aci: %d\n", q->caracter);q=q->nod_urmator;}
- for(int i=0; i<strlen(s) - 1; i++)
- {
- //afiseaza_lista(q);
- /*gaseste_minim(p, &min1, &min2);
- nod *fin = adauga_nod(p);
- fin->stanga = min1;
- fin->dreapta = min2;
- min1->sus = fin;
- min2->sus = fin; */
- }
- }
- int main()
- {
- nod *lista_noduri = NULL;
- char text[100];
- printf("Sir de codificat: ");
- scanf("%s", text);
- genereaza_arbore(text, &lista_noduri);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement