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