数据结构(哈夫曼树+KMP)之 数据加密+解密
原理:参考趣学数据结构
代码:
#include<stdio.h>
#include<stdlib.h>
#define N 100
#define INF 2^31-1
int next[N];
int Sum = 0;
typedef struct fNode {
int c;
int parent;
int lchild, rchild;
int weight;
}fNode;
typedef struct rNode {
int r[N];
int start;
int length;
}rNode;
void huffMan(fNode fnode[], int n) {
for (int i = 0; i < n - 1; i++) {
int min1 = INF, min2 = INF;
int u = -1, v = -1;
for (int j = 0; j < n + i; j++) {
if (fnode[j].weight < min1 && fnode[j].parent == -1) {
min2 = min1;
v = u;
min1 = fnode[j].weight;
u = j;
}
else if (fnode[j].weight < min2 && fnode[j].parent == -1) {
min2 = fnode[j].weight;
v = j;
}
}
fnode[n + i].weight = min1 + min2;
fnode[n + i].lchild = u;
fnode[n + i].rchild = v;
fnode[u].parent = fnode[v].parent = n + i;
}
}
void findHuffManCodePath(fNode fnode[], rNode rnode[], int n) {
rNode temp;
int start = n - 1;
for (int i = 0