Niedermayer.ca
Published on Niedermayer.ca (https://niedermayer.ca)

Home > Huffman Encoding Tables > Huffman main procedure

Huffman main procedure

Project Name: 
Huffman Encoding Trees [1]
  • Log in [2] to post comments
Filename: 
huffman.cpp
Language: 
C++
Summary: 

This program reads a text file of the format: "c0.ffffN" where "c" is a single ASCII character, "0.ffff" is a floating point number, and N is a new-line character.

The program creates a binary tree, called the "List Tree", of Symbol objects for each line/character in the file. Once all lines have been read, and the binary tree constructed, the Huffman table is generated.

This process involves: searching the List Tree for the lowest probability symbol, marking this symbol as read, and then moving it to a new tree called the Huffman Tree. Once all symbols have been marked are moved in this manner, the new tree is outputted to a second file, and the program terminates.

Code: 
#include <assert.h> #include <new.h> #include <stdlib.h> #include <fstream.h> #include <iostream.h> #include <iomanip.h> #include <string.h> #include "Symbol.h" /*=========================================================== * Name: Daryle Niedermayer * Date: November 1, 1997 * Desc: This program reads a text file of the format: "c0.ffffN" where "c" is a single ASCII character, "ffff" is a floating point number, and N is a new- line character. The program creates a binary tree, called the "List Tree", of Symbol objects for each line/character in the file. Once all lines have been read, and the binary tree constructed, the Huffman table is generated. This process involves: searching the List Tree for the lowest probability symbol, marking this symbol as read, and then moving it to a new tree called the Huffman Tree. Once all symbols have been marked are moved in this manner, the new tree is outputted to a second file, and the program terminates. ==============================================================*/ int main() { int Count=0; //Count of symbols to process char Infile[40]; //Name of Input file to read char Outfile[40]; //Name of Output file to write char Buffer[80]; char CurrentCharacter; //Values for the current read line float CurrentProb; Tree List; //Create the ListTree Tree Huffman; //Create the Huffman Table ifstream INPUT; //Declare input and output filestreams ofstream OUTPUT; /*============================================= == SET UP FILE STREAMS FOR READING AND WRITING =============================================*/ cout << "\nEnter an input filename: "; cin >> Infile; cout << "\nEnter an output filename: "; cin >> Outfile; INPUT.open(Infile,ios::in); OUTPUT.open(Outfile,ios::out); /*============================================= == BEGIN CREATING LIST TREE =============================================*/ while (INPUT.eof() == false) { INPUT.getline(Buffer,80,'\n'); CurrentCharacter=Buffer[0]; CurrentProb=atof(Buffer+1); istream &flush(); List.insertSymbol(CurrentCharacter,CurrentProb); } /*============================================= == MOVE SYMBOLS TO HUFFMAN TREE & ENCODE =============================================*/ List.moveSymbols(&Huffman); Huffman.assignBits(); Huffman.printTree(); /*============================================= == WRITE ENCODING TABLE FILE =============================================*/ Huffman.writeTable(&OUTPUT); return 0; }

Source URL:https://niedermayer.ca/node/239

Links
[1] http://www.niedermayer.ca/node/229 [2] https://niedermayer.ca/user/login?destination=node/239%23comment-form