91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

數據結構課程設計用哈夫曼編碼實現文件壓縮: 一、實驗題目: 用哈夫曼編碼實現文件壓縮 二、實驗目的: 1、了解文件的概念。 2、掌握線性鏈表的插入、刪除等算法。 3、掌握Huffman樹的概念及構造方法。 4、掌握二叉樹的存儲結構及遍歷算法。 5、利用Huffman樹及Huffman編碼,掌握實現文件壓縮的一般原理。 三、實驗設備與環境: 微型計算機、Windows 系列操作系統 、Visual C++6.0軟件 四、實驗內容: 根據ASCII碼文件中各ASCII字符出現的頻率情況創建Haffman樹,再將各字符對應的哈夫曼編碼寫入文件中,實現文件壓縮。 五、概要設計: 1、數據結構類型定義 /*****Huffman結構定義**********/ typedef struct node { long w;//w為權值 short p,l,r; //p為parent,l為左孩子,r為右孩子 }htnode,*htnp;//動態分配數組存儲哈夫曼樹 /*****Huffman編碼表結構定義*****/ typedef struct huffman_code { unsigned char len;//長度 unsigned char *codestr; }hufcode; typedef char **huffmancode;//動態分配數組存儲哈夫曼編碼表 2、本程序的構成,共有14個函數,一個菜單函數 int initial_files(char *source_filename,FILE **inp,char *obj_filename,FILE **outp); //1.初始化文件名 char *create_filename(char *source_filename,char* obj_filename); //2.創建文件名 int compress(char *source_filename,char *obj_filename); //3.壓縮文件

資源截圖

代碼片段和文件信息

#include??//主要包括常用的輸入/輸出函數
#include??//主要包括常用的字符串操作函數
#include??//字符串轉換函數、內存分配函數、過程控制函數

//以下兩個庫函數可使用之一,完成庫函數的調用
#include?//作用是將鍵盤輸入的在屏幕上?打印?出來等
//#include?//字符的輸入、輸出函數,字符操作函數、顏色設置函數

/*****Huffman結構定義**********/
typedef?struct?node?
{?
????long????w;//w為權值
????short???plr;?//p為parent,l為左孩子,r為右孩子
}htnode*htnp;//動態分配數組存儲哈夫曼樹

/*****Huffman編碼表結構定義*****/
typedef?struct?huffman_code?
{?
????unsigned?char?len;//長度
????unsigned?char??*codestr;?
}hufcode;

typedef?char?**huffmancode;//動態分配數組存儲哈夫曼編碼表


/*********函數聲明*********/
int?initial_files(char?*source_filenameFILE?**inpchar?*obj_filenameFILE?**outp);
//1.初始化文件名
char?*create_filename(char?*source_filenamechar*?obj_filename);
//2.創建文件名
int?compress(char?*source_filenamechar?*obj_filename);
//3.壓縮文件
long?frequency_data(FILE?*inlong?fre[]);
//4.頻率數據
int?search_set(htnp?htint?nint?*s1?int?*s2);
//5.選取結點權值最小的樹
int?create_hftree(long?w[]int?nhtnode?ht[]);
//6.創建哈夫曼樹
int?encode_hftree(htnp?htpint?nhufcode?hc[]);
//7.編碼哈夫曼樹
unsigned?char?chars_to_bits(const?unsigned?char?chars[8]);
//8.把字符串用二進制數字表示:運用位運算的知識
int?write_compress_file(FILE?*inFILE?*outhtnp?hthufcode?hc[]char*?source_filenamelong?source_filesize);
//9.寫入壓縮文件
int?decompress(char?*source_filenamechar?*obj_filename);
//10.解壓縮
void?get_mini_huffmantree(FILE*?inshort?mini_ht[][2]);
//11.解壓構造微哈夫曼樹
int?write_decompress_file(FILE?*inFILE*?outshort?mini_ht[][2]long?bits_poslong?obj_filesize);
//12.寫入解壓縮
int?d_initial_files(char?*source_filenameFILE?**inpchar?*obj_filenameFILE?**outp);
//13.重新變成原始文件
/*菜單函數*/
void?main()
{
int?s;
char?filename[10];
//system(“color?3F“);//設置背景顏色?1.深藍色?2.墨綠色?3.天藍色4.棕紅色?5.紫色6.褐色7.灰色
????printf(“????????****************************************************\n“);
printf(“????????????????????*???????????菜單:????????????*\n“);
printf(“????????????????????*???1.------壓縮--------??????*\n“);
printf(“????????????????????*???2.------解壓縮------??????*\n“);
printf(“????????????????????*???0.------退出--------??????*\n“);
printf(“????????****************************************************\n“);
scanf(“%d“&s);
while(s!=0)
{
getchar();
switch(s)
{
case?1:
puts(“請輸入待壓縮文件路徑:“);
gets(filename);
compress(filenameNULL);
break;
case?2:
puts(“請輸入待解壓文件路徑:“);
gets(filename);
decompress(filenameNULL);
break;
default?:?
printf(“指令錯誤!請重新輸入指令:\n“);
}
puts(“?“);
printf(“????????****************************************************\n“);
printf(“????????????????????*???????????菜單:??????????????*\n“);
printf(“????????????????????*???1.------壓縮--------?????????*\n“);
printf(“????????????????????*???2.------解壓縮------????????*\n“);
printf(“????????????????????*???0.------退出--------??????????*\n“);
printf(“????????****************************************************\n“);
scanf(“%d“&s);
}
}

?????????????????

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????496042??2016-04-03?23:56??34.doc
?????文件???????16418??2013-12-20?12:46??huffman34.cpp

評論

共有 條評論