无论打印哪一年的日历,都有两个月份出现下面这样的问题,为什么呀
下面是部分关键代码
应该是打印月份日历代码那里有问题,把其他代码贴上来看看。
#include"Cx_330.h"
void initHuffManTree(HuffmanTree *HT, int n)
{
int m = 2 * n - 1;
*HT = (HuffmanTree)malloc((m + 1) * sizeof(HTnode));//创建m+1个HTnode空间是因为让下标从1开始
for (int i = 1; i <= m; i++) {
(*HT)[i].parent = 0;
(*HT)[i].lchild = 0;
(*HT)[i].rchild = 0;
}
}
void select(HuffmanTree* HT, int* min_1, int* min_2, int m) {
int minWeight = MINWEIGHT;
for (int i = 1; i < m; i++) {
if ((*HT)[i].weight < minWeight && (*HT)[i].parent == 0) {
minWeight= (*HT)[i].weight;
*min_1 = i;
}
}
minWeight = MINWEIGHT;
for (int i = 1; i < m; i++) {
if ((*HT)[i].weight < minWeight && (*HT)[i].parent == 0&&i!=(*min_1)) {
minWeight = (*HT)[i].weight;
*min_2 = i;
}
}
}
void creatHuffManTree(HuffmanTree* HT, int n) {
int m = 2 * n - 1;
int min_1, min_2;
for (int i = n + 1; i <= m; i++) {
select(HT,&min_1,&min_2,i);
(*HT)[min_1].parent = i;
(*HT)[min_2].parent = i;
(*HT)[i].lchild = min_1;
(*HT)[i].rchild = min_2;
(*HT)[i].weight =(*HT)[min_1].weight+(*HT)[min_2].weight;
}
}
void creatHuffManCode(HuffmanTree HT, HuffmanCode* HC, int n) {
(*HC) = (HuffmanCode)malloc((n+1)*sizeof(char*));
char* ptr = (char*)malloc(n*sizeof(char));
ptr[n - 1] = '\0';
int c, f, start;
for (int i = 1; i <= n; i++) {
start = n - 1;
c = i;
f = HT[c].parent;
while (f != 0) {
--start;
if (HT[f].lchild == c) {
ptr[start] = '0';
}
else {
ptr[start] = '1';
}
c = f;
f = HT[c].parent;
}
(*HC)[i] = (char*)malloc(n*sizeof(char));
strcpy((*HC)[i],&ptr[start]);
}
free(ptr);
}
void showHuffManCode(HuffmanCode HC, char* str, int n) {
char* p = NULL;
printf("\n-------------------------------------------------\n");
for (int i = 1; i <= n; i++) {
printf("[%c] 的哈夫曼编码:", str[i-1]);
p = HC[i];
puts(p);
}
printf("\n-------------------------------------------------\n");
}
void show_HuffManTree(HuffmanTree HT,int n) {
printf("-------------------------------------------------\n");
printf("下标 权重 双亲下标 左孩子下标 右孩子下标\n");
for (int i = 1; i <= 2*n-1; i++) {
printf(" [%d] \t%d \t%d \t%d \t\t%d\n",i,HT[i].weight, HT[i].parent, HT[i].lchild, HT[i].rchild);
}
printf("-------------------------------------------------\n");
}
void show_Str(char* str, int n)
{
for (int i = 0; i < n; i++)
{
printf("%c ",str[i]);
}
printf("\n");
}