




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、甘肅政法學(xué)院本科生實(shí)驗(yàn)報(bào)告()姓名:學(xué)院:專業(yè):班級:實(shí)驗(yàn)課程名稱:實(shí)驗(yàn)日期:指導(dǎo)教師及職稱:實(shí)驗(yàn)成績:開課時(shí)間: 2013-2014學(xué)年 第二學(xué)期甘肅政法學(xué)院實(shí)驗(yàn)管理中心印制實(shí)驗(yàn)題目第七章、樹形結(jié)構(gòu)小組合作否姓名班級學(xué) 號一、實(shí)驗(yàn)?zāi)康?.1實(shí)現(xiàn)二叉樹的各種基本運(yùn)算的算法7.2實(shí)現(xiàn)二叉樹的各種遍歷算法7.3求二叉樹從根節(jié)點(diǎn)到葉子節(jié)點(diǎn)的路徑 7.4由遍歷序列構(gòu)造二叉樹 7.5實(shí)現(xiàn)中序線索化二叉樹 7.6構(gòu)造哈夫曼樹7.7用二叉樹來表示代數(shù)表達(dá)式二實(shí)驗(yàn)環(huán)境安裝了Windows7操作系統(tǒng),并且安裝了Microsoft Visual C+ 6.0。三、實(shí)驗(yàn)內(nèi)容與步驟7.1實(shí)現(xiàn)二叉樹的各種基本運(yùn)算的算法
2、【編寫一個(gè)程序exp7-1.cpp,實(shí)現(xiàn)二叉樹的各種基本運(yùn)算的算法。(1) 輸出二叉樹b(2) 輸出H節(jié)點(diǎn)的左右孩子節(jié)點(diǎn)值(3) 輸出二叉樹b的深度(4) 輸出二叉樹b的寬度(5) 輸出二叉樹b的節(jié)點(diǎn)個(gè)數(shù)(6) 輸出二叉樹b的葉子節(jié)點(diǎn)個(gè)數(shù)(7) 釋放二叉樹b輸入程序如下:#include "stdafx.h"/文件名:exp7-1.cpp#include <stdio.h>#include"algo7-1.cpp"typedef char ElemType;/typedef struct node/ElemType data;/數(shù)據(jù)元素/st
3、ruct node *lchild;/指向左孩子/struct node *rchild;/指向右孩子/ BTNode;/extern void CreateBTNode(BTNode *&b,char *str);/extern BTNode *FindNode(BTNode *b,ElemType x);/extern BTNode *LchildNode(BTNode *p);/extern BTNode *RchildNode(BTNode *p);/extern int BTNodeDepth(BTNode *b);/extern void DispBTNode(BTNode
4、 *b);/extern int BTWidth(BTNode *b);/extern int Nodes(BTNode *b);/extern int LeafNodes(BTNode *b);/extern void DestroyBTNode(BTNode *&b);void main()BTNode *b,*p,*lp,*rp;CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N),C(F,G(,I)");printf("二叉樹的基本運(yùn)算如下:n");printf(" (1)輸出二叉樹:");Dis
5、pBTNode(b);printf("n");printf(" (2)H節(jié)點(diǎn):");p=FindNode(b,'H');if (p!=NULL)lp=LchildNode(p);if (lp!=NULL) printf("左孩子為%c ",lp->data);elseprintf("無左孩子 ");rp=RchildNode(p);if (rp!=NULL)printf("右孩子為%c",rp->data);elseprintf("無右孩子 ");
6、printf("n");printf(" (3)二叉樹b的深度:%dn",BTNodeDepth(b);printf(" (4)二叉樹b的寬度:%dn",BTWidth(b);printf(" (5)二叉樹b的節(jié)點(diǎn)個(gè)數(shù):%dn",Nodes(b);printf(" (6)二叉樹b的葉子節(jié)點(diǎn)個(gè)數(shù):%dn",LeafNodes(b);printf(" (7)釋放二叉樹bn");DestroyBTNode(b);輸入程序并運(yùn)行,如圖7.2實(shí)現(xiàn)二叉樹的各種遍歷算法編寫一個(gè)程序exp7
7、-2.cpp,實(shí)現(xiàn)二叉樹的各種遍歷算法。 輸入程序如下:#include "stdafx.h"/文件名:exp7-2.cpp#include <stdio.h>#include "algo7-1.cpp"#include <malloc.h>#define MaxSize 100typedef char ElemType;void PreOrder(BTNode *b) /先序遍歷的遞歸算法if (b!=NULL) printf("%c ",b->data);/訪問根節(jié)點(diǎn)PreOrder(b->lc
8、hild);/遞歸訪問左子樹PreOrder(b->rchild);/遞歸訪問右子樹void PreOrder1(BTNode *b)BTNode *StMaxSize,*p; int top=-1; if (b!=NULL) top+;/根節(jié)點(diǎn)入棧 Sttop=b; while (top>-1)/棧不為空時(shí)循環(huán) p=Sttop;/退棧并訪問該節(jié)點(diǎn) top-; printf("%c ",p->data); if (p->rchild!=NULL)/右孩子入棧 top+; Sttop=p->rchild; if (p->lchild!=NU
9、LL)/左孩子入棧 top+; Sttop=p->lchild;printf("n");void InOrder(BTNode *b) /中序遍歷的遞歸算法if (b!=NULL) InOrder(b->lchild);/遞歸訪問左子樹printf("%c ",b->data);/訪問根節(jié)點(diǎn)InOrder(b->rchild);/遞歸訪問右子樹void InOrder1(BTNode *b)BTNode *StMaxSize,*p;int top=-1;if (b!=NULL)p=b;while (top>-1 | p!=N
10、ULL)while (p!=NULL)top+;Sttop=p;p=p->lchild;if (top>-1)p=Sttop;top-;printf("%c ",p->data);p=p->rchild;printf("n");void PostOrder(BTNode *b) /后序遍歷的遞歸算法if (b!=NULL) PostOrder(b->lchild);/遞歸訪問左子樹PostOrder(b->rchild);/遞歸訪問右子樹printf("%c ",b->data);/訪問根節(jié)點(diǎn)
11、void PostOrder1(BTNode *b)BTNode *StMaxSize;BTNode *p;int flag,top=-1;/棧指針置初值if (b!=NULL)dowhile (b!=NULL)/將t的所有左節(jié)點(diǎn)入棧top+;Sttop=b;b=b->lchild;p=NULL;/p指向當(dāng)前節(jié)點(diǎn)的前一個(gè)已訪問的節(jié)點(diǎn)flag=1;while (top!=-1 && flag)b=Sttop;/取出當(dāng)前的棧頂元素if (b->rchild=p)/右子樹不存在或已被訪問,訪問之printf("%c ",b->data);/訪問*
12、b節(jié)點(diǎn)top-;p=b;/p指向則被訪問的節(jié)點(diǎn)elseb=b->rchild;/t指向右子樹flag=0; while (top!=-1);printf("n"); void TravLevel(BTNode *b)BTNode *QuMaxSize;/定義循環(huán)隊(duì)列int front,rear;/定義隊(duì)首和隊(duì)尾指針front=rear=0;/置隊(duì)列為空隊(duì)列 if (b!=NULL) printf("%c ",b->data); rear+;/節(jié)點(diǎn)指針進(jìn)入隊(duì)列Qurear=b; while (rear!=front)/隊(duì)列不為空 front=(
13、front+1)%MaxSize;b=Qufront;/隊(duì)頭出隊(duì)列if (b->lchild!=NULL)/輸出左孩子,并入隊(duì)列printf("%c ",b->lchild->data);rear=(rear+1)%MaxSize;Qurear=b->lchild;if (b->rchild!=NULL)/輸出右孩子,并入隊(duì)列printf("%c ",b->rchild->data);rear=(rear+1)%MaxSize;Qurear=b->rchild; printf("n");
14、void main()BTNode *b;CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N),C(F,G(,I)"); printf("二叉樹b:");DispBTNode(b);printf("n");printf("層次遍歷序列:");TravLevel(b);printf("先序遍歷序列:n");printf(" 遞歸算法:");PreOrder(b);printf("n");printf(" 非遞歸算法:"
15、;);PreOrder1(b);printf("中序遍歷序列:n");printf(" 遞歸算法:");InOrder(b);printf("n");printf(" 非遞歸算法:");InOrder1(b);printf("后序遍歷序列:n");printf(" 遞歸算法:");PostOrder(b);printf("n");printf(" 非遞歸算法:");PostOrder1(b);DestroyBTNode(b); 輸入程序
16、并運(yùn)行,如圖圖87.3求二叉樹從根節(jié)點(diǎn)到葉子節(jié)點(diǎn)的路徑對7.1的二叉樹,設(shè)計(jì)一個(gè)程序exp7-3.cpp完成如下功能:(1) 輸出所有葉子節(jié)點(diǎn)(2) 輸出所有葉子節(jié)點(diǎn)到根節(jié)點(diǎn)的路徑(3) 輸出(2)中的第一條最長路徑輸入程序如下:#include "stdafx.h"/文件名:exp7-3.cpp#include <stdio.h>#include <malloc.h>#include "algo7-1.cpp"#define MaxSize 100typedef char ElemType;Node *&b);void
17、AllPath(BTNode *b)struct snode BTNode *node;/存放當(dāng)前節(jié)點(diǎn)指針 int parent;/存放雙親節(jié)點(diǎn)在隊(duì)列中的位置 QuMaxSize;/定義順序隊(duì)列int front,rear,p;/定義隊(duì)頭和隊(duì)尾指針 front=rear=-1;/置隊(duì)列為空隊(duì)列rear+; Qurear.node=b;/根節(jié)點(diǎn)指針進(jìn)入隊(duì)列Qurear.parent=-1;/根節(jié)點(diǎn)沒有雙親節(jié)點(diǎn) while (front<rear)/隊(duì)列不為空 front+;b=Qufront.node;/隊(duì)頭出隊(duì)列if (b->lchild=NULL && b->
18、;rchild=NULL)/*b為葉子節(jié)點(diǎn)printf(" %c到根節(jié)點(diǎn)逆路徑:",b->data);p=front;while (Qup.parent!=-1)printf("%c ",Qup.node->data);p=Qup.parent;printf("%cn",Qup.node->data);if (b->lchild!=NULL)/左孩子入隊(duì)列rear+;Qurear.node=b->lchild;Qurear.parent=front;if (b->rchild!=NULL)/右孩子入
19、隊(duì)列rear+;Qurear.node=b->rchild;Qurear.parent=front; void AllPath1(BTNode *b,ElemType path,int pathlen)int i;if (b!=NULL)if (b->lchild=NULL && b->rchild=NULL)/*b為葉子節(jié)點(diǎn)printf(" %c到根節(jié)點(diǎn)逆路徑: %c ",b->data,b->data);for (i=pathlen-1;i>=0;i-)printf("%c ",pathi);pri
20、ntf("n");elsepathpathlen=b->data;/將當(dāng)前節(jié)點(diǎn)放入路徑中pathlen+;/路徑長度增1AllPath1(b->lchild,path,pathlen);/遞歸掃描左子樹AllPath1(b->rchild,path,pathlen);/遞歸掃描右子樹pathlen-;/恢復(fù)環(huán)境void LongPath(BTNode *b,ElemType path,int pathlen,ElemType longpath,int &longpathlen)int i;if (b=NULL)if (pathlen>long
21、pathlen)/若當(dāng)前路徑更長,將路徑保存在longpath中for (i=pathlen-1;i>=0;i-)longpathi=pathi;longpathlen=pathlen;elsepathpathlen=b->data;/將當(dāng)前節(jié)點(diǎn)放入路徑中pathlen+;/路徑長度增1LongPath(b->lchild,path,pathlen,longpath,longpathlen);/遞歸掃描左子樹LongPath(b->rchild,path,pathlen,longpath,longpathlen);/遞歸掃描右子樹pathlen-;/恢復(fù)環(huán)境void D
22、ispLeaf(BTNode *b) if (b!=NULL) if (b->lchild=NULL && b->rchild=NULL) printf("%c ",b->data); else DispLeaf(b->lchild);DispLeaf(b->rchild);void main()BTNode *b;ElemType pathMaxSize,longpathMaxSize;int i,longpathlen=0;CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N),C(F,G(,I
23、)"); printf("二叉樹b:");DispBTNode(b);printf("n");printf("b的葉子節(jié)點(diǎn):");DispLeaf(b);printf("n");printf("AllPath:n");AllPath(b);printf("AllPath1:n");AllPath1(b,path,0);LongPath(b,path,0,longpath,longpathlen);printf("第一條最長逆路徑長度:%dn",l
24、ongpathlen);printf("第一條最長逆路徑:");for (i=longpathlen-1;i>=0;i-)printf("%c ",longpathi);printf("n");DestroyBTNode(b);輸入程序并運(yùn)行,如圖圖127.4由遍歷序列構(gòu)造二叉樹【設(shè)計(jì)一個(gè)程序exp7-4.cpp實(shí)現(xiàn)由先序遍歷以及由中序遍歷序列構(gòu)造一顆二叉樹的功能要求以括號表示和凹入表示法輸入該二叉樹。并用“ABDEHJKLMNCFGI”和“DBJHLKMNEAFCGI”以及由中序遍歷序列“DBJHLKMNEAFCGI”和后序遍
25、歷序列“DJLNMKHEBFIGCA”進(jìn)行驗(yàn)證。輸入程序如下:#include "stdafx.h"/文件名:exp7-4.cpp#include <stdio.h>#include <malloc.h>#include"algo7-1.cpp"#define MaxSize 100#define MaxWidth 40typedef char ElemType;/typedef struct node /ElemType data;/數(shù)據(jù)元素/struct node *lchild;/指向左孩子/struct node *rch
26、ild;/指向右孩子/ BTNode;/extern void DispBTNode(BTNode *b);/extern void DestroyBTNode(BTNode *&b);BTNode *CreateBT1(char *pre,char *in,int n)BTNode *s;char *p;int k;if (n<=0) return NULL;s=(BTNode *)malloc(sizeof(BTNode);/創(chuàng)建二叉樹節(jié)點(diǎn)*ss->data=*pre;for (p=in;p<in+n;p+)/在中序序列中找等于*ppos的位置kif (*p=*p
27、re)break;k=p-in;s->lchild=CreateBT1(pre+1,in,k);s->rchild=CreateBT1(pre+k+1,p+1,n-k-1);return s;BTNode *CreateBT2(char *post,char *in,int n,int m)BTNode *s;char *p,*q,*maxp;int maxpost,maxin,k;if (n<=0) return NULL;maxpost=-1;for (p=in;p<in+n;p+)/求in中全部字符中在post中最右邊的那個(gè)字符for (q=post;q<p
28、ost+m;q+)/在in中用maxp指向這個(gè)字符,用maxin標(biāo)識它在in中的下標(biāo)if (*p=*q)k=q-post;if (k>maxpost) maxpost=k;maxp=p;maxin=p-in;s=(BTNode *)malloc(sizeof(BTNode);/創(chuàng)建二叉樹節(jié)點(diǎn)*ss->data=postmaxpost;s->lchild=CreateBT2(post,in,maxin,m);s->rchild=CreateBT2(post,maxp+1,n-maxin-1,m);return s;void DispBTNode1(BTNode *b) /
29、以凹入表表示法輸出一棵二叉樹BTNode *StMaxSize,*p;int levelMaxSize2,top=-1,n,i,width=4;char type;if (b!=NULL)top+;Sttop=b;/根節(jié)點(diǎn)入棧leveltop0=width;leveltop1=2;/2表示是根while (top>-1)p=Sttop;/退棧并凹入顯示該節(jié)點(diǎn)值n=leveltop0;switch(leveltop1)case 0:type='L'break;/左節(jié)點(diǎn)之后輸出(L)case 1:type='R'break;/右節(jié)點(diǎn)之后輸出(R)case 2:
30、type='B'break;/根節(jié)點(diǎn)之后前輸出(B)for (i=1;i<=n;i+)/其中n為顯示場寬,字符以右對齊顯示printf(" ");printf("%c(%c)",p->data,type);for (i=n+1;i<=MaxWidth;i+=2)printf("-");printf("n");top-;if (p->rchild!=NULL)/將右子樹根節(jié)點(diǎn)入棧top+;Sttop=p->rchild;leveltop0=n+width;/顯示場寬增wi
31、dthleveltop1=1;/1表示是右子樹if (p->lchild!=NULL)/將左子樹根節(jié)點(diǎn)入棧top+;Sttop=p->lchild;leveltop0=n+width; /顯示場寬增widthleveltop1=0; /0表示是左子樹void main()BTNode *b;ElemType pre="ABDEHJKLMNCFGI"ElemType in="DBJHLKMNEAFCGI"ElemType post="DJLNMKHEBFIGCA"b=CreateBT1(pre,in,14);printf(&
32、quot;先序序列:%sn",pre);printf("中序序列:%sn",in);printf("構(gòu)造一棵二叉樹b:n");printf(" 括號表示法:");DispBTNode(b);printf("n");printf(" 凹入表示法:n");DispBTNode1(b);printf("nn");printf("中序序列:%sn",in);printf("后序序列:%sn",post);b=CreateBT2(pos
33、t,in,14,14);printf("構(gòu)造一棵二叉樹b:n");printf(" 括號表示法:");DispBTNode(b);printf("n");printf(" 凹入表示法:n");DispBTNode1(b);printf("n");DestroyBTNode(b);運(yùn)行程序,如圖7.5 實(shí)現(xiàn)中序線索化二叉樹設(shè)計(jì)一個(gè)程序exp7-5.cpp實(shí)現(xiàn)中序線索化二叉樹采用遞歸和非遞歸兩種方式輸出線索中序序列。輸入程序如下:/ 4.cpp : Defines the entry point f
34、or the console application#include "stdafx.h"/文件名:exp7-5.cpp#include <stdio.h>#include <malloc.h>#define MaxSize 100typedef char ElemType;typedef struct nodeElemType data;int ltag,rtag;/增加的線索標(biāo)記struct node *lchild;/左孩子指針struct node *rchild;/右孩子指針 TBTNode;void CreateTBTNode(TBTNo
35、de * &b,char *str)TBTNode *StMaxSize,*p=NULL;int top=-1,k,j=0; char ch;b=NULL;/建立的二叉樹初始時(shí)為空ch=strj;while (ch!='0')/str未掃描完時(shí)循環(huán)switch(ch) case '(':top+;Sttop=p;k=1; break;/為左節(jié)點(diǎn)case ')':top-;break;case ',':k=2; break;/為右節(jié)點(diǎn)default:p=(TBTNode *)malloc(sizeof(TBTNode);p-
36、>data=ch;p->lchild=p->rchild=NULL;if (b=NULL)/*p為二叉樹的根節(jié)點(diǎn)b=p;else/已建立二叉樹根節(jié)點(diǎn)switch(k) case 1:Sttop->lchild=p;break;case 2:Sttop->rchild=p;break;j+;ch=strj;void DispTBTNode(TBTNode *b)if (b!=NULL)printf("%c",b->data);if (b->lchild!=NULL | b->rchild!=NULL)printf("(
37、");DispTBTNode(b->lchild);if (b->rchild!=NULL) printf(",");DispTBTNode(b->rchild);printf(")");TBTNode *pre;/全局變量void Thread(TBTNode *&p)if (p!=NULL)Thread(p->lchild);/左子樹線索化if (p->lchild=NULL)/前驅(qū)線索p->lchild=pre;/建立當(dāng)前節(jié)點(diǎn)的前驅(qū)線索p->ltag=1;else p->ltag=0
38、;if (pre->rchild=NULL)/后繼線索pre->rchild=p;/建立前驅(qū)節(jié)點(diǎn)的后繼線索pre->rtag=1;else pre->rtag=0;pre=p;Thread(p->rchild);/右子樹線索化TBTNode *CreateThread(TBTNode *b)/中序線索化二叉樹TBTNode *root;root=(TBTNode *)malloc(sizeof(TBTNode);/創(chuàng)建根節(jié)點(diǎn)root->ltag=0;root->rtag=1;root->rchild=b;if (b=NULL)/空二叉樹root-
39、>lchild=root;elseroot->lchild=b;pre=root;/pre是*p的前驅(qū)節(jié)點(diǎn),供加線索用Thread(b);/中序遍歷線索化二叉樹pre->rchild=root;/最后處理,加入指向根節(jié)點(diǎn)的線索pre->rtag=1;root->rchild=pre;/根節(jié)點(diǎn)右線索化return root;void InOrder(TBTNode *tb)/被ThInOrder算法調(diào)用if (tb->lchild!=NULL && tb->ltag=0)/有左孩子InOrder(tb->lchild);printf
40、("%c ",tb->data);if (tb->rchild!=NULL && tb->rtag=0)/有右孩子InOrder(tb->rchild);void ThInOrder(TBTNode *tb)/中序遞歸算法InOrder(tb->lchild);void ThInOrder1(TBTNode *tb)/中序非遞歸算法TBTNode *p=tb->lchild;/指向根節(jié)點(diǎn)while (p!=tb)while (p->ltag=0) p=p->lchild;printf("%c &quo
41、t;,p->data);while (p->rtag=1 && p->rchild!=tb)p=p->rchild;printf("%c ",p->data);p=p->rchild;void DestroyTBTNode1(TBTNode *tb)/被DestroyTBTNode算法調(diào)用if (tb!=NULL)if (tb->lchild!=NULL && tb->ltag=0) /有左孩子 DestroyTBTNode1(tb->lchild);if (tb->rchild!=
42、NULL && tb->rtag=0) /有右孩子 DestroyTBTNode1(tb->rchild);free(tb);void DestroyTBTNode(TBTNode *tb)/釋放中序線索二叉樹的所有節(jié)點(diǎn)DestroyTBTNode1(tb->lchild);free(tb);void main()TBTNode *b,*tb;CreateTBTNode(b,"A(B(D,E(H(J,K(L,M(,N),C(F,G(,I)"); printf("二叉樹:");DispTBTNode(b);printf(&
43、quot;n");tb=CreateThread(b);printf("線索中序序列:n");printf(" 遞歸算法:");ThInOrder(tb);printf("n");printf(" 非遞歸算法:");ThInOrder1(tb);printf("n");DestroyTBTNode(tb);運(yùn)行程序,如圖7.6構(gòu)造哈夫曼樹設(shè)計(jì)一個(gè)程序exp7-6.cpp構(gòu)造一顆哈弗曼樹,輸出對應(yīng)哈弗曼樹編碼和平均查找長度。輸入程序如下#include "stdafx.h&qu
44、ot;/文件名:exp7-6.cpp#include <stdio.h>#include <string.h>#define N 50/葉子節(jié)點(diǎn)數(shù)#define M 2*N-1/樹中節(jié)點(diǎn)總數(shù)typedef structchar data5;/節(jié)點(diǎn)值int weight;/權(quán)重int parent;/雙親節(jié)點(diǎn)int lchild;/左孩子節(jié)點(diǎn)int rchild;/右孩子節(jié)點(diǎn) HTNode;typedef structchar cdN;/存放哈夫曼碼int start; HCode;void CreateHT(HTNode ht,int n)int i,k,lnode,r
45、node;int min1,min2;for (i=0;i<2*n-1;i+)/所有節(jié)點(diǎn)的相關(guān)域置初值-1hti.parent=hti.lchild=hti.rchild=-1;for (i=n;i<2*n-1;i+)/構(gòu)造哈夫曼樹min1=min2=32767;/lnode和rnode為最小權(quán)重的兩個(gè)節(jié)點(diǎn)位置lnode=rnode=-1;for (k=0;k<=i-1;k+)if (htk.parent=-1)/只在尚未構(gòu)造二叉樹的節(jié)點(diǎn)中查找if (htk.weight<min1)min2=min1;rnode=lnode;min1=htk.weight;lnode=
46、k;else if (htk.weight<min2)min2=htk.weight;rnode=k;htlnode.parent=i;htrnode.parent=i;hti.weight=htlnode.weight+htrnode.weight;hti.lchild=lnode;hti.rchild=rnode;void CreateHCode(HTNode ht,HCode hcd,int n)int i,f,c;HCode hc;for (i=0;i<n;i+)/根據(jù)哈夫曼樹求哈夫曼編碼hc.start=n;c=i;f=hti.parent;while (f!=-1)/循
47、序直到樹根節(jié)點(diǎn)if (htf.lchild=c)/處理左孩子節(jié)點(diǎn)hc.cdhc.start-='0'else/處理右孩子節(jié)點(diǎn)hc.cdhc.start-='1'c=f;f=htf.parent;hc.start+;/start指向哈夫曼編碼最開始字符hcdi=hc;void DispHCode(HTNode ht,HCode hcd,int n)int i,k;int sum=0,m=0,j;printf("輸出哈夫曼編碼:n"); /輸出哈夫曼編碼for (i=0;i<n;i+)j=0;printf(" %s:t"
48、,hti.data);for (k=hcdi.start;k<=n;k+)printf("%c",hcdi.cdk);j+;m+=hti.weight;sum+=hti.weight*j;printf("n");printf("平均長度=%gn",1.0*sum/m);void main()int n=15,i;char *str="The","of","a","to","and","in","tha
49、t","he","is","at","on","for","His","are","be"int fnum=1192,677,541,518,462,450,242,195,190,181,174,157,138,124,123;HTNode htM;HCode hcdN;for (i=0;i<n;i+)strcpy(hti.data,stri);hti.weight=fnumi;CreateHT(ht,n);Creat
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2019-2025年軍隊(duì)文職人員招聘之軍隊(duì)文職教育學(xué)題庫與答案
- 2025年軍隊(duì)文職人員招聘之軍隊(duì)文職管理學(xué)與服務(wù)考試題庫
- 2021-2022學(xué)年廣東省廣州市白云區(qū)六校七年級(下)期中數(shù)學(xué)試卷(含答案)
- 企業(yè)級數(shù)據(jù)安全合規(guī)策略制定服務(wù)協(xié)議
- 網(wǎng)絡(luò)直播平臺合作項(xiàng)目表
- 四川省成都市武侯區(qū)2024-2025學(xué)年七年級上學(xué)期期末生物學(xué)試題(含答案)
- 湖南省岳陽市岳陽縣2024-2025學(xué)年七年級上學(xué)期期末生物學(xué)試題(含答案)
- 語言學(xué)英語翻譯技能測試卷
- 濕地松采脂承包合同
- 團(tuán)隊(duì)目標(biāo)與績效考核表
- CB/T 495-1995吸入口
- 建筑工程施工安全技術(shù)與管理課件
- 二年級下冊數(shù)學(xué)下冊第一單元
- 本科教學(xué)工作合格評估基本知識課件
- 物業(yè)管理服務(wù)大型活動(dòng)服務(wù)方案
- 外科護(hù)理病歷
- 跨境電商行業(yè)深度研究報(bào)告
- 《總體國家安全觀學(xué)習(xí)綱要》全書PPT
- 軟件項(xiàng)目進(jìn)度計(jì)劃完整參考模板
- 特種設(shè)備使用單位名稱變更申請表(共2頁)
- CASS勘測定界操作指導(dǎo)方案
評論
0/150
提交評論