#include #include #include class data
};typedef class huffman
} * huffmantree;
typedef char ** huffmancode;
// 在陣列中選擇兩個小的權的資料
void select(int *tw, int n, int &s1, int &s2)
temp_w = tw[i];
s1 = i;
// 第一遍先確定s1
for(; i<=n; i++)
// ifin
}// if
}//for
i = 1;
while(!tw[i] || i == s1)
temp_w = tw[i];
s2 = i;
for(; i<=n; i++)
// ifin
loop:;
}// if
}// for
// 使權小的放到s1
if(tw[s1]>tw[s2])
// if
// 取得兩個小的位置後,將備用temp_array_w位置上的權抹去,表示已經被訪問
tw[s1] = tw[s2] = null;
tw[0] = tw[0]-2;
}void initialization (huffmantree &ht, huffmancode &hc, int n)
// for
// 建立標誌s1和s2
int s1, s2;
s1 = s2 = null;
// 建立huffman樹
for(i = n + 1; i<=2*n - 1; i++)
// for
cout << "/tdata/tweight/tparent/tlchild/trchild" << endl;
for(i = 1; i<=2*n - 1; i++)
cout << "/t" << ht[i].data.ch << "/t" << ht[i].weight << "/t" << ht[i].parent << "/t" << ht[i].lchild << "/t" << ht[i].rchild << endl;
// 建立好了樹後列印輸出到檔案humtree中
ofstream humtreeout("humtree.dll");
// 把個數記錄到檔案開始
humtreeout << ht[0].weight << endl;
for(i = 1; i<=2*n -1; i++)
humtreeout.close();
}// void
// 通過樹給字元編碼,並且把編碼輸入到codefile中
void encoding (huffmancode &hc, huffmantree &ht, int n, ifstream &tobetranfile)
delete cd;
char temp_file_ch;
ofstream codeout("codefile.txt", ios::ate); // ios::ate表示乙個open模式,是在檔案後面續寫
while(!tobetranfile.eof()) // 一旦檔案到了末尾,eof()函式會返回乙個非零值 }
codeout.close();
}void decoding (huffmantree &ht, ifstream &codefile, int n)
else
}
else
if(!ht[temp_num].lchild)
else
}
} textout.close();
cout << "已經翻譯到text.txt檔案中" << endl;
}// 通過已存在的humtree.dll建立新的樹
bool creatnewhum(huffmantree &ht, int &n)
// huffmantree ht_temp = ht;
// huffmantreein.getline(temp_line, 9);
huffmantreein >> temp_n; // 乙個單詞為單位輸入
huffmantreein.get(temp_ch);
// huffmantreein.seekg(1);
ht = new huffman[2*temp_n];
// delete ht_temp;
// 通過讀入檔案中的資料給ht賦值
/*
for(;i<20;i++)
//*/
//*
int j = 1;
while(!huffmantreein.eof())
if(i%5 == 2)
if(i%5 == 3)
if(i%5 == 4)
if(i%5 == 0)
// i自加到5的倍數後j++
if(i%5 == 1)
j++;
// 防止輸入最後乙個定位符號
if(i > (2*temp_n -1)*5)
break;
}// while
//*/
// 從指定檔案裡讀入樹型
huffmantreein.close();
n = temp_n;
return true;
}void printcode ()
filein.close();
fileout.close();
}void treeprint ()
void titalprint()
// 把幾個運算的函式全都放到乙個裡面去,主函式main就只呼叫下運算函式
void ***putehuffman ()
// switch
//*/
cout << "translating in (f)ile or (p)ressing: ";
cin >> temp_choise;
switch(temp_choise)
}
hc = new char*[n+1];
ifstream tobetranfile("tobetran.txt");
encoding(hc, ht, n, tobetranfile);
tobetranfile.close();
for(int i = 1; i<=n; i++)
cout << ht[i].data.ch << "<-->" << hc[i] << endl;
}
// 利用建立好的huffman樹(如果不在記憶體則從檔案humtree中讀入),對檔案
// tobetran中的正文進行編碼,然後將結果寸入codefile.txt檔案中.
break;
case 'd':
break;
case 'm':
// 什麼都不做
break;
default:
cout << "please pess f or m..." << endl;
continue;
}// switch
ifstream codefile("codefile.txt");
decoding(ht, codefile, n);
codefile.close();
}
// 利用建立好的haffman樹將檔案codefile中的**進行翻譯.結果寸入檔案textfile.txt中
break;
case 'p':
printcode();
// 列印**,50個每行,並且將此字元形式的編碼檔案寫入codeprin中
break;
case 't':
// 印huffman樹,將已經在記憶體的huffman樹以直觀的方式顯示,同時將此字元形式的huffman樹寫
// 入檔案treeprint中
break;
case 'q':
return;
default:
cout << "please inputing in /" i e d q /"..." << endl;
continue;
}// switch
// 回到主選單
titalprint();
}// while
}// ***puterhuffman
void main()
哈夫曼編碼 資料結構
上週日做了資料結構實驗報告,感覺還行。一 課題描述 二 概要設計 主要思想應根據 執行順序了解 1 資料邏輯結構 主要是樹形結構,也有使用線性結構作為輔助 儲存結構分析 主要是非線性結構 二叉樹 結點 struct hufftree 2 本程式包含8個函式 1 將資料樹化函式hufftree cre...
WPF Silverlight程式編碼資料收集
一.獲取路徑資訊 序路徑的,應該這樣用 mycollection system curdirectory system.io.path.getdirectoryname process.getcurrentprocess mainmodule.filename 二 獲取silverlight.web...
哈夫曼編碼 資料結構 源程式
構造思想 哈夫曼樹 1 由給定的n個權值構造n棵樹只有乙個葉子結點的二叉樹,得到乙個二叉樹的合f 2 再f中選取根結點的權值最小和次小的二棵二叉樹作為左,右子樹構造一棵新的二叉樹,這棵樹的根結點的權值為左右子樹根結點權值之和。3 在集合f中刪除作為左右子樹的二棵二叉樹,並將新建的二叉樹加入到集合f中...