freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

課程設計-赫夫曼編碼系統(tǒng)設計-文庫吧

2025-05-18 08:14 本頁面


【正文】 tc(fp)) != EOF) { current = 。 if (current == NULL) { if ((ptr = (Data *)malloc(sizeof(Data))) == NULL) { printf( 內(nèi)存不足 , 操作失敗 !\n)。 exit(0)。 } 8 / 32 ptrdata = ch。 ptrnumber = 1。 ptrnext = 。 = ptr。 ++typeNumber。 } else { while ((current != NULL) amp。amp。 (currentdata != ch)) { previous = current。 current = currentnext。 } if (current != NULL) { ++(currentnumber)。 ++characterNumber。 } else { if ((ptr = (Data *)malloc(sizeof(Data))) == NULL) { printf( 內(nèi)存不足 , 操作失敗 !\n)。 exit(0)。 } ptrdata = ch。 ptrnumber = 1。 ptrnext = current。 previousnext = ptr。 ++typeNumber。 ++characterNumber。 } } } fclose(fp)。 codeSize = typeNumber。 info = (Static *)malloc(sizeof(Static) * codeSize)。 current = 。 9 / 32 //將統(tǒng)計好的字符權重信息存入權重文件中 for (int i=0。 icodeSize。 ++i) { info[i].data = currentdata。 info[i].weight = (int)(currentnumber * / characterNumber)。 current = currentnext。 } } . 字符解碼 //此代碼用于比較查找赫夫曼編碼 bool CompareData(char *tempCode, int amp。position) { for (position = 0。 position codeSize。 ++position) { if (strcmp(tempCode, code[position]) == 0) { return true。 } } return false。 } void DisplayContext() { InportCharacterWeight()。 CreatHuffmanTree(list, info, codeSize)。 CreatHuffmanCode(list, code, codeSize)。 InportFileCoding()。 FILE *fp。 int position。 int end。 char *tempCode。 char ch。 fp = fopen(fileName, rb)。 if ((tempCode = (char *)malloc(sizeof(char) * codeSize)) == NULL) 10 / 32 { printf( 內(nèi)存不足 , 操作失敗 !\n)。 exit(0)。 } end = 0。 /******************************此部分為解碼過程 ************************/ printf(\n 文件內(nèi)容為 :\n\n )。 while ((ch = fgetc(fp)) != EOF) { tempCode[end] = ch。 ++end。 tempCode[end] = 39。\039。 if (CompareData(tempCode, position)) { printf(%c, info[position].data)。 end = 0。 } } printf(\n\n 按任意鍵結(jié)束 !)。 getch()。 } 6. 實驗結(jié)果 . 實驗結(jié)果說明 經(jīng)過多次對本程序的實驗,此次編譯完成的程序可以對簡單的文本文件進行加密和解密,因為限于對文件的基本操作不是太完全清楚,只是匆匆查閱了一些關于 C 語言文件操作部分的資料,所以這也是文件操作方面的一個瑕疵。所以綜上,次此的程序只能進行簡單的加密與 解密操作。 11 / 32 . 程序運行截圖 (圖 1:赫夫曼加密程序主體窗口) (圖 2:赫夫曼文件編碼程序窗口) (圖 3:用于測試的文本 原始文本內(nèi)內(nèi)容) (圖 4:導出文件編碼后 ,在創(chuàng)建的編碼文件中生成的二進制數(shù) ) 12 / 32 (圖 5:導出的文本密鑰(即字符權重)) (圖 6:赫夫曼文件譯碼程序窗口) (圖 7:將之前生成的編碼文件與密鑰導入進來后顯示出原來的文本內(nèi)容) 7. 設計體會 進過此次的實驗,讓我對樹結(jié)構及最優(yōu)二叉樹概念與操作的理解。 在此次選擇赫夫曼編碼操作的時候,本打算用赫夫曼編碼的程序?qū)ξ募?進行壓縮存儲,可是限于不知道怎樣將生成的赫夫曼編碼進行 bit 級別的存儲(只知道進行 Byte 級別的存儲),所以壓縮存儲的想法失敗了,之后根據(jù)赫夫曼編碼的結(jié)構及生成的文件,不得不讓我想到了文件的加密與解密,于是按著這個思路來設計了本文件加密解密系統(tǒng)。在設計的時候,曾準備根據(jù)網(wǎng)上之前對 26 個英文字符的使用統(tǒng)計來事先對字符權重進行分配(這樣加密的文件可解密性增加了),而且考慮到文件中不僅有 26 個英文字母,如果對各種字符的使用頻率進行統(tǒng)計,這個事先工作的負擔會很重,所以之后編寫了自動統(tǒng)計文本字符的頻率程序,這樣工作量 會減小很多(而且文件的可解密性大大減小,但是也帶來了記錄密鑰的不方便)。 總體感覺程序還行,就是代碼的簡潔性還是有點差,條理還是不那么清晰。 13 / 32 8. 參考文獻 [1]嚴蔚敏 、吳偉明 .數(shù)據(jù)結(jié)構 .清華大學出版社 . [2]Thomas 、 Charles .算法導論 .機械工業(yè)出版社 . 9. 附:程序代碼 include include include include //赫夫曼樹結(jié) 構 typedef struct { char data。 int weight。 int parent, lchild, rchild。 }HuffmanTree。 //字符權重結(jié)構 typedef struct { char data。 int weight。 }Static。 //統(tǒng)計字符時所用到的鏈表結(jié)構 typedef struct node { char data。 int number。 struct node *next。 }Data。 //赫夫曼代 碼結(jié)構 typedef char** HuffmanCode。 //創(chuàng)建赫夫曼樹 void CreatHuffmanTree(HuffmanTree *amp。list, Static *info, int codeSize)。 14 / 32 //創(chuàng)建赫夫曼代碼 void CreatHuffmanCode(HuffmanTree *list, HuffmanCode amp。code, int codeSize)。 //從文件中讀取數(shù)據(jù)并計算各字符出現(xiàn)頻率 void DataCount(Static *amp。info)。 //文件 編碼程序 void FileEncoding()。 //創(chuàng)建文件編碼 void CreatFileCoding()。 //導出編碼后文件 void ExportFileEncoding(HuffmanTree *list, HuffmanCode code, int codeSize)。 //導出文件中字符權重 void ExportCharacterWeight()。 //文件譯碼程序 void FileDecoding()。 //導入編碼后的文件 void InportFileCoding()。 //導入文件中字符權重 void InportCharacterWeight()。 //顯示譯碼后的文件內(nèi)容 void DisplayContext()。 bool CompareData(char *tempCode, int amp。position)。 void Bound(char character, int size)。 //赫夫曼樹 HuffmanTree *list。 //赫夫曼代碼 HuffmanCode code。 //字符權重信息 Static *info。 //字符種數(shù) int codeSize。 //文件名 char fileName[30]。 int main() { char choice。 while (true) 15 / 32 { system(CLS)。 printf( 赫夫曼編碼加密程序 \n)。 Bound(39。39。, 25)。 printf( 1. 文 件 編 碼 \n)。 printf( 2. 文 件 譯 碼 \n)。 printf( 0. 退 出 程 序 \n)。 Bound(39。39。, 25)。 printf( 請選擇 : )。 fflush(stdin)。 choice = getchar()。 switch (choice) { case 39。139。: FileEncoding()。 break。 case 39。239。: FileDecoding()。 break。 case 39。039。: printf(\n)。 system(PAUSE)。 return 0。 break。 default: printf(\n 您的輸入有誤 , 按任意鍵后請從新輸入 !)。 getch()。 break。 } } } void CreatHuffmanTree(HuffmanTree *amp。list, Static *info, int codeSize) { int i, j, limit。 int lnode, rnode。 int value1, value2。 HuffmanTree *ptr。 limit = codeSize * 2 1。 16 / 32 if ((list = (HuffmanTree *)malloc(sizeof(HuffmanTree) * limit)) == NULL) { printf( 內(nèi)存不足 , 操作失敗 !\n)。 exit(0)。 } for(i=0, ptr=list。 icodeSize。 ++i, ++ptr) { ptrdata = info[i].data。 ptrweight = info[i].weight。 ptrparent = ptrlchild = ptrrchild = 1。 } for(。 ilimit。 ++i, ++ptr) { ptrdata = 39。039。 ptrweight = 0。 ptrparent = ptrlchild = ptrrchild = 1。 } for(i=codeSize。 ilimit。 ++i) { value1 = value2 =
點擊復制文檔內(nèi)容
畢業(yè)設計相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1