#include #include #define N 255 #define M 2*N - 1 char file[20] = " />

亚洲网站在线免费观看,欧美性运动视频免费观看网站,国产精品爽爽久久,熟女少妇丰满一区二区

車載MP3 經常歌放一半就沒了,需要拔插SD卡

提問者: kuangye2009 2014-11-02 00:00

最佳答案

#include #include #include #define N 255 #define M 2*N - 1 char file[20] = "1.txt"; typedef struct { int data; /* 字符值 */ int weight; /* 權重 */ int parent; /* 雙親結點 */ int lchild; /* 左孩子結點 */ int rchild; /* 右孩子結點 */ }Tree; typedef struct { char cd[N]; int start; }Code; Tree ht[M]; Code hcd[N]; int cmp(const void*, const void*); int NumberOfChar(); void Reset(); void InputFile(); void Encode(int); void Decode(int); void OutputFile(int); void PrintHuffmanCode(int); void CreateHT(int); void CreateHCode(int); int main() { int x = 0; int n = 0; char ch; Reset(); InputFile(); /* 排序使得有效字符在前面 */ qsort(ht, N, sizeof(Tree), cmp); /* 記下有效字符的個數 */ n = NumberOfChar(); CreateHT(n); CreateHCode(n); OutputFile(n); PrintHuffmanCode(n); Encode(n); Decode(n); getchar(); return 0; } int cmp(const void *a ,const void *b) { return (*(Tree *)a).weight < (*(Tree *)b).weight ? 1 : -1; } int NumberOfChar() { int i, num = 0; for (i = 0; i < N; i++) { if (ht[i].weight > 0) num++; } return num; } void Reset() { int i; for (i = 0; i < M; i++) { ht[i].weight = 0; ht[i].parent = -1; ht[i].lchild = -1; ht[i].rchild = -1; } } void InputFile() { FILE *fp; char ch; system("cls"); fp = fopen(file, "rt"); /* 讀入字符并處理權重 */ while (fscanf(fp, "%c", &ch) != EOF) { ht[ch].data = ch; ht[ch].weight++; } fclose(fp); printf("原文件 %s 讀入成功!
", file); } void Encode(int n) { int i, k; char ch; FILE *fp1, *fp2; fp1 = fopen(file, "rt"); fp2 = fopen("Encode.txt", "wt+"); /* 一個字符一個字符替換 */ while (fscanf(fp1, "%c", &ch) != EOF) { for (i = 0; i < n; i++) { if (ht[i].data == ch) { for (k = hcd[i].start; k <= n; k++) { fprintf(fp2, "%c", hcd[i].cd[k]); } } } } fclose(fp1); fclose(fp2); printf("編碼成功,結果在 Encode.txt 中!
"); } void Decode(int n) { int i, k; char ch; FILE *fp1, *fp2; fp1 = fopen("Encode.txt", "rt"); fp2 = fopen("Decode.txt", "wt+"); i = 2 * n - 2; while (fscanf(fp1, "%c", &ch) != EOF) { if (ch == '0') i = ht[i].lchild; else i = ht[i].rchild; /* 找到葉子節點為止 */ if (ht[i].lchild == -1) { fprintf(fp2, "%c", ht[i].data); /* 繼續從根節點開始查找 */ i = 2 * n - 2; } } fclose(fp1); fclose(fp2); printf("解碼成功,結果在 Decode.txt 中!
"); } void OutputFile(int n) { FILE *fp; int i, k; fp = fopen("Huffman_Code.txt", "wt+"); for (i = 0; i < n; i++) { fprintf(fp, "%d ", ht[i].data); for (k = hcd[i].start; k <= n; k++) { fprintf(fp, "%c", hcd[i].cd[k]); } if (i < n - 1) fprintf(fp, "
"); } fclose(fp); printf("代碼表文件 Huffman_Code.txt 生成成功!
"); } void PrintHuffmanCode(int n) { int i, k; printf("ASCII \t Char \t HuffmanCode
"); for (i = 0; i < n; i++) { printf("%d \t \"%c\" \t ", ht[i].data, ht[i].data); for (k = hcd[i].start; k <= n; k++) { printf("%c", hcd[i].cd[k]); } printf("
"); } } void CreateHT(int n) { int i, k ,lmin, rmin; int min1, min2; /* 一共有2n-1個節點 */ for (i = n; i < 2 * n - 1; i++) { /*lmin和rmin為最小權重的兩個節點置*/ min1 = min2 = 0x7FFFFFFF; lmin = rmin = -1; for (k = 0; k <= i - 1; k++) { /*只在尚未構造二叉樹的節點中查找*/ if (ht[k].parent == -1) { if (ht[k].weight < min1) { min2 = min1; rmin = lmin; min1 = ht[k].weight; lmin = k; } else if (ht[k].weight < min2) { min2 = ht[k].weight; rmin = k; } } } /* 修改2個小權重節點的雙親 */ ht[lmin].parent = i; ht[rmin].parent = i; /* 修改雙親的權重 */ ht[i].weight = ht[lmin].weight + ht[rmin].weight; /* 修改雙親的孩子 */ ht[i].lchild = lmin; ht[i].rchild = rmin; } } void CreateHCode(int n) { int i, f, c; Code hc; for (i = 0; i < n; i++) { hc.start = n; c = i; f = ht[i].parent; /* 循序直到樹根結點 */ while (f != -1) { /* 處理左孩子結點 */ if (ht[f].lchild == c) hc.cd[hc.start--] = '0'; /* 處理右孩子結點 */ else hc.cd[hc.start--] = '1'; c = f; f = ht[f].parent; } /* start指向哈夫曼編碼最開始字符 */ hc.start++; hcd[i] = hc; } }

回答者:mrp672016-11-02 00:00

相關問題

  • 車載dvd導航一體機接線圖

    不同牌子的機器線的位置不同,但是連接都是一樣的,可根據每條線的具體作用進行連接,發一張圖片給你作為參考,這是廣州科航盛的一款導航儀的接線圖。

    提問者:li11615582016-05-09

  • 車載MP3的用法

    1、你的車要發動起來 2、你要打開收音機,對準頻率,如果收音機在87.9上有干擾,可以退后幾個頻率 3、歌曲可能格式不對,或者解碼率達不到要求 4、歌曲的播放速度支持不了 車載支持的MP3速率是 32—320之間的

    提問者: asdaa543fdgd 2013-03-28

  • 車載充電器車的原理

    就是個轉換接頭,內部加了個穩壓和電源指示。 因為點煙器輸出本身就是5V的

    提問者:craftfox2013-05-09

  • 汽車收音機線怎么接(有接線圖

    1#接棕+ 2#接灰+ 3#接(你發圖準確 情況下)紅黃(兩根接 一起火) 4#接棕- 5#接灰- 6#接 黑(地) 7# 不 接(后買的 機器面板燈和火線內連在 一起) 下圖音頻紅 和 白接

    提問者: oddmig 2013-06-09

  • 手機充電器內部構造

    一、充電器 充電器是給電池補充電能的裝置,一般分二階段充電模式與三階段充電模式兩種。二階段充電模式:先恒壓充電,充電電流隨電池電壓的上升逐漸減小,等電池電量補充到一定程度以后,電池電壓會上升到充電器的設定值,此時轉換為涓

    提問者: zy04060 2013-03-08

  • 建伍車載CD機KDC-MP5036U怎樣接USB存儲設備(如U盤)

    如果能知道 接線柱在哪兒 何必在意選擇什么樣的線呢? 找一個好點兒的常用USB線改裝一下就可以了吧,關鍵是 接線的地方吧。。。 LJCC 網購評價: —— 車載專用 迷你usb口 U盤 專門給車內設有外接音源

    提問者:jcfq73782013-11-06

按字母分類: