定義的結構體
typedef
struct node
node;
int
calculateweight
(char a,
char b,
float weight)
len1=i;
//記錄輸入字元的個數
i=0;
while
(a[i]
!='\0'
)//計算輸入資料的權重}if
(j==len2)
//已記錄資料不存在該字元則新增該字元
}for
(i=0
;i)return len2;
//返回不重複的字元數
}
void
codenum
(node t,
int l)
else
if(temp.rch!=-1
)//檢視是否有右子樹}if
(temp.rch==-1
&&temp.lch==-1
)}}
#include
#include
#include
#define max 1000
typedef
struct node
node;
intcalculateweight
(char a,
char b,
float weight)
;//輸入字串計算權重,返回字串長度
node *
huffmantree
(char b,
float weight,
int len)
;//計算huffman樹
void
codenum
(node t,
int l)
;//計算字首編碼並輸出
intmain()
,b[max]=;
float weight[max]=;
int len;
node *t;
printf
("請輸入需要編譯的字串(以輸入回車為截止):\n");
gets
(a);
len=
calculateweight
(a,b,weight)
; t=
huffmantree
(b,weight,len)
;codenum
(t,len)
;printf
("以上為編碼表\n");
return0;
}int
calculateweight
(char a,
char b,
float weight)
len1=i;
//記錄輸入字元的個數
i=0;
while
(a[i]
!='\0'
)//計算輸入資料的權重}if
(j==len2)
//已記錄資料不存在該字元則新增該字元
}for
(i=0
;i)return len2;
//返回不重複的字元數
}node *
huffmantree
(char b,
float weight,
int len)
for(i=
0;i)//葉結點的賦值
for(j=len;j)//補充二叉樹
else
if(t[i]
.weight//尋找權重次小點}}
t[j]
.weight=t[p1]
.weight+t[p2]
.weight;
//生成父母
t[p1]
.parent=j;
//二叉樹關係的建立
t[p2]
.parent=j;
t[j]
.lch=p1;
t[j]
.rch=p2;
small1=1;
small2=1;
len++
;//新增結點算入總長
}return t;
}void
codenum
(node t,
int l)
else
if(temp.rch!=-1
)//檢視是否有右子樹}if
(temp.rch==-1
&&temp.lch==-1
)}}
資料結構(五) 樹和二叉樹
樹的定義 樹的概念 二叉樹的概念 二叉樹的性質 性質1 在二叉樹的第i i 1 層上至多有2i 1個結點。性質2 深度為k的二叉樹最多有2k 1個結點。性質3 具有n個結點的完全二叉樹的深度為 log2n 1 性質4 對任意二叉樹t,如果度數為0結點數為n0,度數為1結點數為n1,度數為2結點數為n...
資料結構實驗五 樹和二叉樹
資料結構實驗五 樹和二叉樹 一 實驗目的 1.回樹和二叉樹的邏輯結構和儲存方法,清楚掌握樹和二叉樹的遍歷操作。2.學習樹的相關知識來解決實際問題。3.進一步鞏固程式除錯方法。4.進一步鞏固模板程式設計。二 實驗時間 準備時間為第10周到第12前半周,具體集中實驗時間為12周周四。2個學時。三 實驗內...
資料結構 樹和二叉樹
第一節 二叉樹的定義與基本操作 定義 我們把滿足以下兩個條件的樹型結構叫做二叉樹 binary tree 1 每個結點的度都不大於2 2 每個結點的孩子結點次序不能任意顛倒。由定義得出 二叉樹的每個結點只能含有0 1或2個孩子,且有左右之分。1 二叉樹的五種基本形態 2 二叉樹性質 性質1 二叉樹第...