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 {
- char c;
- int db;
- int apa;
- }Item1;
- typedef struct {
- int db;
- char* kod;
- }Item2;
- int apatlanminindex(Item1* h, int n);
- int main()
- {
- Item2 stat[256] = { 0 };
- int n = 0;
- FILE* be;
- be = fopen("bemenet.txt", "rt");
- if (!be) { return 0; }
- char x;
- while (fscanf(be,"%c",&x)!=EOF)
- {
- ++stat[x].db;
- if (stat[x].db == 1) { ++n; }
- }
- Item1* h;
- h = (Item1*)calloc(2 * n - 1, sizeof(Item1));
- int j = 0;
- for (int i = 0; i < 256; ++i)
- {
- if (stat[i].db)
- {
- h[j].db = stat[i].db;
- h[j].c = i;
- ++j;
- }
- }
- int m = n - 1;//ennyi apa lesz
- int y;
- for (int i = 0; i < m; ++i)
- {
- y = apatlanminindex(h, n);
- h[y].apa = (-1) * n;
- h[n].db += h[y].db;
- y = apatlanminindex(h, n);
- h[y].apa = n;
- h[n].db += h[y].db;
- ++n;
- }
- for (int i = 0; i < n; ++i)
- {
- printf("%i ", h[i].db);
- }
- printf("\n");
- n -= m;
- int kod;
- for (int i = 0; i < n; ++i)
- {
- generalkod(h, stat, h[i].c, i);
- }
- }
- int apatlanminindex(Item1* h, int n)
- {
- int min = INT_MAX;
- int poz=0;
- for (int i = 0; i < n; ++i)
- {
- if (h[i].apa) { continue; }
- else
- {
- if (min > h[i].db) { min = h[i].db; poz = i; }
- }
- }
- return poz;
- }
- void generalkod(Item1* h, Item2* stat, char betu, int i)
- {
- int hosz;
- if (h[i].apa < 0)
- {
- generalkod(h,stat,betu, -h[i].apa);
- hosz = strlen(stat[betu].kod);
- stat[betu].kod = realloc(stat[betu].kod, (hosz + 1) * sizeof(char));
- stat[betu].kod[hosz] = "0";
- }
- else
- {
- if (h[i].apa > 0) { generalkod(h, stat, betu, h[i].apa); }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement