英文本串哈夫曼編碼的C語言實現

2021-08-19 21:06:24 字數 1612 閱讀 1504

資料結構課的實驗報告···

具體思路是用乙個最小堆去儲存所有哈夫曼的節點,然後每次從堆中彈出兩個哈夫曼節點組成新節點,然後將這個新節點加入原來的最小堆,迴圈往復後最後將哈夫曼樹的根節點彈出。**實現如下:

//

// main.c

// hufftree

////

#include #include #include typedef struct hftreenode *hftree;

typedef struct hnode *heap;

struct hnode ;

struct hftreenode ;

void printcode(hftree root,int *arr,int top);

void printarr(int *arr,int top);

hftree deletemin( heap h );

heap createheap(int size);

void adjust(heap h, int p);

void buildheap(heap h);

heap read(void);

hftree huffman(heap heap);

int main(int argc, const char * argv) ,top=0;

hftree root;

heap heap;

heap=read();

root=huffman(heap);

printcode(root, arr, top);

return 0;

}heap read(void) ;//用於統計次數的陣列

heap heap;

char c;

while((c=getchar())!='\n')

for (int i=0; i<58; i++) //找出輸入的有效字母數量

heap=createheap(num);//建堆

for (int i=0; i<58; i++)

}return heap;

}heap createheap(int maxsize)

void insert( heap h, hftree x )

hftree huffman(heap heap)

p=deletemin(heap);

return p;

}void adjust(heap h, int p)

h->data[parent] = x;

}void buildheap( heap h )

hftree deletemin(heap h)

h->data[parent] = x;

return minitem;

}void printcode(hftree tree,int *arr,int top)

if (tree->right)

// 如果是葉節點就列印

if (tree->left==null&&tree->right==null)

}void printarr(int *arr,int top)

C語言實現哈夫曼編碼

include define n5 葉子數目 define m 2 n 1 結點總數 define maxval 10000.0 define maxsize100 哈夫曼編碼的最大位數 typedef struct hufmtree typedef struct codetype void huf...

哈夫曼編碼 C語言實現

c語言實現哈夫曼編碼 程式功能 提供一段字串,輸出哈夫曼編碼壓縮後的總位元數 計入小寫字母和空格 include include 定義二叉樹結構 typedef struct node bitnode,bitree 定義棧結構,此處的棧用來儲存二叉樹節點 typedef structstack 操作...

C語言實現哈夫曼編碼

include include define n 50 葉子結點數 define m 2 n 1 樹中結點總數 typedef struct htnode typedef struct hcode void createht htnode ht,int n 由ht的葉子結點構造完整的哈夫曼樹 els...