Untitled
Anonymous
plain_text
02/06/2026 5:37 AM
7.4 KB
13
Indexable
#include <stdio.h>
int n, i, j;
int a[40][4]; // [symbol][freq][parent][bit]
int symbols[20];
int t1, t2;
/* Sort based on frequency */
void sorting(int p, int q)
{
for (i = p; i <= q; i++)
{
for (j = i + 1; j <= q; j++)
{
if (a[i][1] > a[j][1])
{
t1 = a[i][1];
t2 = a[i][0];
a[i][1] = a[j][1];
a[i][0] = a[j][0];
a[j][1] = t1;
a[j][0] = t2;
}
}
}
}
/* Display table */
void display(int q)
{
printf("\nSymbol Freq Parent Bit\n");
for (i = 0; i <= q; i++)
{
if (a[i][0] >= 65)
printf(" %c %3d %3d %d\n",
a[i][0], a[i][1], a[i][2], a[i][3]);
else
printf(" n%d %3d %3d %d\n",
a[i][0], a[i][1], a[i][2], a[i][3]);
}
printf("---------------------------\n");
}
/* Huffman Tree construction */
void huffman()
{
int p = 0, q = n - 1;
int k = 1;
while (p != q)
{
sorting(p, q);
a[q + 1][1] = a[p][1] + a[p + 1][1];
a[q + 1][0] = k;
a[p][2] = k;
a[p + 1][2] = k;
a[p][3] = 0;
a[p + 1][3] = 1;
k++;
p += 2;
q++;
display(q);
}
}
/* Display Huffman Codes */
void displaycoding()
{
int s = 0;
while (s < n)
{
int symbol = symbols[s++];
int code[20];
int c = 0;
for (i = 0; a[i][0] != symbol; i++);
printf("\nCode of %c = ", symbol);
while (a[i][2] != 0)
{
code[c++] = a[i][3];
int parent = a[i][2];
for (i = 0; a[i][0] != parent; i++);
}
for (i = c - 1; i >= 0; i--)
printf("%d", code[i]);
}
printf("\n");
}
/* Main */
int main()
{
printf("Enter number of symbols: ");
scanf("%d", &n);
for (i = 0; i < n; i++)
{
printf("Enter symbol and frequency: ");
scanf(" %c %d", (char *)&a[i][0], &a[i][1]);
symbols[i] = a[i][0];
a[i][2] = 0; // parent
a[i][3] = 0; // bit
}
huffman();
displaycoding();
return 0;
}
}
}
}
}
}
}
}
}
}
}
}
}
}Editor is loading...
Leave a Comment