首页 哈夫曼树与哈弗曼编码1

哈夫曼树与哈弗曼编码1

举报
开通vip

哈夫曼树与哈弗曼编码1哈夫曼树与哈弗曼编码1 湖南人文科技学院计算机科学技术系 课程设计说明书 课 程 名 称: 数据结构 课 程 代 码: 408024 题 目: 哈夫曼树与哈弗曼编码 年级/专业/班: 09级软件工程二班 学 生 姓 名: 伍彪 周玉香 学 号: 09436205 09436214 指 导 教 师: 唐海波 开 题 时 间: 2010 年 12 月 18 日 完 成 时 间: 2010 年 12 月 31 日 目 录 摘 要 ............................................

哈夫曼树与哈弗曼编码1
哈夫曼树与哈弗曼编码1 湖南人文科技学院计算机科学技术系 课程设计说明书 课 程 名 称: 数据结构 课 程 代 码: 408024 题 目: 哈夫曼树与哈弗曼编码 年级/专业/班: 09级软件 工程 路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理 二班 学 生 姓 名: 伍彪 周玉香 学 号: 09436205 09436214 指 导 教 师: 唐海波 开 题 时 间: 2010 年 12 月 18 日 完 成 时 间: 2010 年 12 月 31 日 目 录 摘 要 ....................................................... 1 一、引 言 ................................................... 2 二、设计目的与任务 ........................................... 2 1、课程设计目的 ........................................... 2 2、课程设计的任务 ......................................... 3 三、设计 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 ................................................. 3 1、需求 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 ............................................... 3 2、概要设计 ............................................... 3 3、详细设计 ............................................... 4 4、程序清单 ............................................... 4 四、调试分析与体会 .......................................... 17 五、运行结果 ................................................ 17 六、结 论 .................................................. 23 七、致 谢 .................................................. 24 八、参考文献 ................................................ 24 湖南人文科技学院课程设计 摘 要 哈弗曼编码是广泛用于数据文件压缩的十分有效的编码方法,其压缩通常在20%-90% 之间。哈弗曼编码算法使用字符在文件中出现的频度表来建立一个用0,1串表示个字符的 最有表示方式。 哈弗曼算法构造的扩充二叉树称为哈弗曼编码树或哈夫曼树,当然,还有编码和译码 部分。本系统的前端开发工具是Visual C++6.0,具有输入字符集大小及权值大小,构造哈 夫曼树,并对用户输入的字符串进行编码以及译码还有推出等功能;本程序经测试后,功 能均能实现,运行稳定。 该设计是对输入的一串电文字符实现哈弗曼编码,在对哈弗曼编码生成的代码串进行 译码,输出电文字符串为编码,解压缩过程称为译码。此程序中建立了哈弗曼树,并利用 建好的哈夫曼树对文件中的正文进行编码,对文件中的代码进行译码,显示输出等功能。 关键词:哈弗曼树,哈弗曼编码,哈弗曼译码,权值. Abstract Harvard mann coding is widely used in data files compressed very efficient coding method, the compression usually in 20% between - 90. Harvard mann encoding algorithm using characters in files appear frequency table to establish a string representation with 0 means a character most. Harvard mann algorithm the expansion of the binary tree structure called harvard mann coding tree or hoffmann tree, of course, and coding and decoding parts. This system the front-end development tools is Visual c + + 6.0, with input character set size and weitht size, structure hoffmann tree, and user input string coding and decoding and launch function; etc. This procedure, after the test functions can be realized, steady operation. This design is the input a string of message character realize harvard to harvard in Manchester coding, Raman code generated code strings decode, output message strings for coding, unzip process called decode. This program was established in the corner, and using Raman tree built good hoffmann tree on the document text encoded to file the code, decode, shows that the output, and other functions. Key words: Harvard mann tree, harvard mann coding, harvard mann decoding, weights. 1 湖南人文科技学院课程设计 《数据结构》课程设计 ——哈夫曼树与哈弗曼编码 一、引 言 随着我国进一步的开放,我们需要扩大国际交流,加强学习国外的先进经验。掌握国际的领先技术是我们的首要任务。计算机技术发展异常迅速, 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 更新很快,我们对计算机的了解程度也直接影响了我国的现代化和信息化的程度。《数据结构》是计算机程序设计的重要理论技术基础,它不仅是计算机学科的核心课程,而且是其他理工专业的热门选修课。数据结构研究的是世界上所有非数值量的信息结构及其处理方法,它不仅是计算机科学与技术相关专业十分重要的核心课程,也是应用数学、管理科学、环境规划等很多专业的一门重要基础课。所有的计算机系统软件和应用软件都要用到各种类型的数据结构。因此,对于所有想更好地运用计算机来解决实际问题得人们而言,仅掌握几种计算机程序设计语言是难以应付众多复杂的课题的。要想有效地使用计算机、充分发挥计算机的性能,还必须学习和掌握好数据结构的有关知识。打好《数据结构》这门课程的扎实基础,对于学习计算机专业的其他课程,如操作系统、编译原理、数据库管理系统、软件工程、人工智能等都是十分有益的。 本次课程设计的课题是哈夫曼树与哈弗曼编码,哈弗曼树是一种应用广泛的的数据结构,在文件压缩中,根据个字符在文件中的频度不同(有的字符根本没出现),依照频度高,则编码长,频度低则编码短的原则对个字符重新进行编码,从而在总体上是文件长度缩短,达到压缩文件的目的。该设计是对输入的一串电文字符实现哈弗曼编码,再对哈夫曼码生成的代码串进行译码,输出电文字符。在该设计中把数据压缩过程称作编码,解压缩的过程称作译码。此程序中建立了哈弗曼树,并利用建好的哈夫曼树对文件中的正文进行编码,对文件中的代码进行译码,显示输出等功能。 本次课程设计的实例虽然比较简单,程序设计也不是很复杂,但是在课程设计之前我们还是做了很多准备的。例如,在网上和一些资料上查找哈弗曼树与哈弗曼编码的应用。由此我们觉得本次程序的设计过程也是一个学习过程,更是对复杂程序的一个学习过程,还能培养我们的数抽象能力。因此,我们觉得这次课程设计是非常有意义的,能为我们今后学习面向过程的程序设计作一些铺垫。 二、设计目的与任务 1、课程设计目的 本次课程设计教学所要求达到的目的:1(掌握哈夫曼树的建树原理 2(掌握哈夫曼树 2 湖南人文科技学院课程设计 与哈夫曼码逻辑结构和存储结构 3(掌握哈夫曼树与哈夫曼码的基本操作;并通过此次课程设计的训练,使学生巩固和加深对哈夫曼树与哈弗曼编码的理解,利用所学到的计算科学的理论知识,提高解决实际问题的能力,增强运算、编程和使用技术资料的技能,通过实际问题的分析设计、编程和调试,掌握应用软件的分析方法和工程设计方法,能正确阐述设计和实验结果。 2、课程设计的任务 问题描述: 1(输入一个文本,统计各字符出现的频度,输出结果 2(使用字符出现的频度构造哈夫曼树 3(确定和输出各字符的哈夫曼码 4(输入一个由0和1组成的代码序列,翻译并输出与之对应的文体,若最后的代码子序列不能译为文本,则输出相关信息. 5.达到更加灵活的运用所学的理论和知识和方法,以及独立分析和解决问题的能力;培养实事求是、认真、严谨的科学态度和刻苦钻研不断创新的精神,逐步建立正确的全局观念. 三、设计方案 1、需求分析 1)本程序利用count()函数实现文本频度计算。 2)通过PHtTree huffman(int n, int *w)建哈夫曼树,tohuffmancode(char *ch,int n)译码,以及decode(PHtTree huff,char *ch)解码 2、概要设计 一、 基本操作: (1) Select (PHtTree pht, int pos, int *x1, int *x2) 函数功能:找出权值最小及次小的节点m1,m2;x1,x2存储其指针 (2)huffman(int n, int *w) 函数功能:建哈夫曼树 (3)count() 函数功能:计算输入文本的频度 (4)huffmancode(PHtTree huff,int *w,char *ch,int n)及tohuffmancode(char *ch,int n) 函数功能:译码 (5)decode(PHtTree huff,char *ch) 3 湖南人文科技学院课程设计 函数功能:解码 二、 存储结构 typedef struct HtNode { char data; int weight; int parent, lchild, rchild; }HtNode; typedef struct HtTree { struct HtNode ht[MAXNODE+1]; int root; }HtTree, *PHtTree; 3、详细设计 在本次课程设计中,我们用到了哈夫曼树与哈弗曼编码这个重要的数据结构。在实现 程序的功能的时候,有很多重要的程序段是涉及此方面的:有哈弗曼树的建立,有关哈弗 曼编码的译码与解码,另外还有就是对输入文本的频度计算。重要的程序段如下。 1) typedef struct HtNode { char data; int weight; int parent, lchild, rchild; }HtNode; typedef struct HtTree { struct HtNode ht[MAXNODE+1]; int root; }HtTree, *PHtTree; 本课程设计是实现哈弗曼树的建立与哈弗曼编码的译码与解码,上面分别定义了哈弗 曼树的结点结构体和哈夫曼树结构体 2)建立哈夫曼树 4 湖南人文科技学院课程设计 (一):找出权值最小及次小的结点m1,m2;x1,x2存储其指针 void Select (PHtTree pht, int pos, int *x1, int *x2) //找出权值最小及次小的结点m1,m2;x1,x2指向其指针 { int j; int m1 = MAXINT, m2 = MAXINT; for (j=1; jht[j].weight<=m1 && pht->ht[j].parent == 0) { m2 = m1; *x2 = *x1; m1 = pht->ht[j].weight; *x1 = j; } else if (pht->ht[j].weightht[j].parent == 0) { m2 = pht->ht[j].weight; *x2 = j; } } } 此函数用于查找权值最大及次大的结点及结点所在位置:先定义m1,m2并指定其初值, 再定义变量j指向结点位置,将j位置结点的权值与m1,m2比较,得到此次比较的最小与 次小,以此类推,得到权值最小与次小的结点,并用x1,x2分别记下权值最小与次小的结 点位置,为后面建立哈夫曼树打下基础 (二):建树 PHtTree huffman(int n, int *w) //建赫夫曼树 { PHtTree pht; 5 湖南人文科技学院课程设计 int i, x1=0, x2=0; pht = (PHtTree) malloc (sizeof (struct HtTree)); for( i=1; i<=2*n - 1; i++ ) { pht->ht[i].lchild = 0; pht->ht[i].rchild = 0; pht->ht[i].parent = 0; if (i<=n) pht->ht[i].weight = w[i];//用数组储存各叶子节点的权值 else pht->ht[i].weight = 0; } for( i=1; i < n ; i++ ) { Select(pht, n+i, &x1, &x2); pht->ht[x1].parent = n + i; pht->ht[x2].parent = n + i; pht->ht[n+i].weight = pht->ht[x1].weight + pht->ht[x2].weight; //父节点权值等于左右孩子权值之和 pht->ht[n+i].lchild = x1; pht->ht[n+i].rchild = x2; pht->root = n+i; } return pht; } 哈夫曼树的叶子节点为n,则总结点数为2n-1,用数组存储个叶子结点的权值,找权值 最小的结点开始逆向建立哈夫曼树。 3) 译码 (一)从叶子到根逆向求每个字符的哈弗曼编码 void huffmancode(PHtTree huff,int *w,char *ch,int n) //哈弗曼编码,从叶子到根逆向求每个字符的赫夫曼编码 6 湖南人文科技学院课程设计 { int start,c,i,j,f; char code[MAXNUM]; printf("\n各个结点的哈夫曼编码为:\n\n"); code[n-1]='\0'; for(i=1;i<=n;i++)//逐个字符求赫夫曼编码 { start=n-1;//编码结束符位置(根结点) for(c=i,f=huff->ht[i].parent;f!=0;c=f,f=huff->ht[f].parent) //从叶子到根逆向求编码 { if(huff->ht[f].lchild==c) code[--start]='0'; else code[--start]='1'; } strcpy(hc[i],&code[start]);//从code复制编码到hc printf(" %c --> %s",ch[i],hc[i]); if(i%2==0) printf("\n"); else for(j=1;j<=4-(int)(strlen(hc[i])/8);j++) printf("\t"); } printf("\n\n"); } 此函数的功能是从叶子到根逆向求每个字符的哈弗曼编码 (二)求整个输入句子的哈弗曼编码 void tohuffmancode(char *ch,int n) //译码(将输入的句子转化为赫夫曼编码) { int i=0,j; int charnum[MAXNUM]={0}; 7 湖南人文科技学院课程设计 char c; printf("\n请输入需要编码的句子:\n"); c=getchar(); if(c==32) c='_'; while(c!=10) { for (j=1;j<=n;j++) if(c==ch[j]) charnum[++i]=j; c=getchar(); if(c==32) c='_'; } printf("\n其哈夫曼编码为:\n"); for (j=1;j<=i;j++) { printf("%s",hc[charnum[j]]); } printf("\n"); } 在void huffmancode(PHtTree huff,int *w,char *ch,int n)函数的基础上,输入一个由0和1 组成的代码序列,将其译为哈弗曼编码,若不能翻译,则输出相关信息 4)解码:将哈弗曼编码解码为普通句子 void decode(PHtTree huff,char *ch) //解码(将赫夫曼编码解码为普通句子) { int p; char c; p=huff->root; printf("\n请输入需要解码的一串哈夫曼编码:\n"); c=getchar(); while(c!=10) { 8 湖南人文科技学院课程设计 if(c=='0') { p=huff->ht[p].lchild; if(huff->ht[p].lchild==0||huff->ht[p].rchild==0) { printf("%c",ch[p]); p=huff->root; } } if(c=='1') { p=huff->ht[p].rchild; if(huff->ht[p].lchild==0||huff->ht[p].rchild==0) { printf("%c",ch[p]); p=huff->root;} } c=getchar(); } printf("\n"); } 此函数用于将哈弗曼编码翻译为普通句子,0表示指向左孩子,1表示指向右孩子,p指向根结点,多次调用getchar()得到需要解码的哈弗曼编码,解码后将其放入数组ch中 4、程序清单 //赫夫曼树及赫夫曼编码 #include #include #include #define N 16000 //字符不超过N+1 #define M 2*N-1 #define MAXNODE 100 #define MAXNUM 50 #define MAXINT 60000 typedef struct HtNode //建立节点 9 湖南人文科技学院课程设计 { char data; int weight; int parent, lchild, rchild; }HtNode; typedef struct HtTree//建哈弗曼树 { struct HtNode ht[MAXNODE+1]; int root; }HtTree, *PHtTree; char hc[MAXNUM-1][MAXNUM]; HtNode ht0[M+1],ht[M+1]; //huffman树,与COUNT0,COUNT对应 void Select (PHtTree pht, int pos, int *x1, int *x2) //找出权值最小及次小的节点m1,m2;x1,x2指向其指针 { int j; int m1 = MAXINT, m2 = MAXINT; for (j=1; jht[j].weight<=m1 && pht->ht[j].parent == 0) { m2 = m1; *x2 = *x1; m1 = pht->ht[j].weight; *x1 = j; } else if (pht->ht[j].weightht[j].parent == 0) { m2 = pht->ht[j].weight; *x2 = j; } } 10 湖南人文科技学院课程设计 } PHtTree huffman(int n, int *w) //生成哈弗曼编码 { PHtTree pht; int i, x1=0, x2=0; pht = (PHtTree) malloc (sizeof (struct HtTree)); for( i=1; i<=2*n - 1; i++ ) { pht->ht[i].lchild = 0; pht->ht[i].rchild = 0; pht->ht[i].parent = 0; if (i<=n) pht->ht[i].weight = w[i];//用数组储存各叶子节点的权值 else pht->ht[i].weight = 0; } for( i=1; i < n ; i++ ) { Select(pht, n+i, &x1, &x2); pht->ht[x1].parent = n + i; pht->ht[x2].parent = n + i; pht->ht[n+i].weight = pht->ht[x1].weight + pht->ht[x2].weight; //父节点权值等于左右孩子权值之和 pht->ht[n+i].lchild = x1; pht->ht[n+i].rchild = x2; pht->root = n+i; } return pht; } void count() { int COUNT,COUNT0; int i,j,k; char c; printf("请输入文本(字母+标点+空格),按#号结束\n\n"); 11 湖南人文科技学院课程设计 for(i=1;i<=N;i++) //利用for循环输入报文 { c=getchar(); if(c!='#') {ht[i].data=c; ht[i].weight=1;} else {c=getchar(); i--; break; } } COUNT=i; //记录报文总数 k=1; ht0[1]=ht[1]; for(i=2;i<=COUNT;i++) //统计每种字符的频度(出现次数),即权值 { for(j=1;j<=k;j++) if(ht[i].data==ht0[j].data) { ht0[j].weight++; break; } if(j>k){ k++; ht0[k]=ht[i]; } } COUNT0=k; //记录字符种类数 printf("\n\n 序号 结点值 权值(频度) \n"); for(i=1;i<=2*k-1;i++) printf(" %-7d%-8c%-7d%\n",i,ht0[i].data,ht0[i].weight); } void huffmancode(PHtTree huff,int *w,char *ch,int n) //哈弗曼编码,从叶子到根逆向求每个字符的赫夫曼编码 { 12 湖南人文科技学院课程设计 int start,c,i,j,f; char code[MAXNUM]; printf("\n各个结点的哈夫曼编码为:\n\n"); code[n-1]='\0'; for(i=1;i<=n;i++)//逐个字符求赫夫曼编码 { start=n-1;//编码结束符位置(根结点) for(c=i,f=huff->ht[i].parent;f!=0;c=f,f=huff->ht[f].parent) //从叶子到根逆向求编码 { if(huff->ht[f].lchild==c) code[--start]='0'; else code[--start]='1'; } strcpy(hc[i],&code[start]);//从code复制编码到hc printf(" %c --> %s",ch[i],hc[i]); if(i%2==0) printf("\n"); else for(j=1;j<=4-(int)(strlen(hc[i])/8);j++) printf("\t"); } printf("\n\n"); } void tohuffmancode(char *ch,int n) //译码(将输入的句子转化为赫夫曼编码) { int i=0,j; int charnum[MAXNUM]={0}; char c; printf("\n请输入需要编码的句子:\n"); c=getchar(); 13 湖南人文科技学院课程设计 if(c==32) c='_'; while(c!=10) { for (j=1;j<=n;j++) if(c==ch[j]) charnum[++i]=j; c=getchar(); if(c==32) c='_'; } printf("\n其哈夫曼编码为:\n"); for (j=1;j<=i;j++) { printf("%s",hc[charnum[j]]); } printf("\n"); } void decode(PHtTree huff,char *ch) //解码(将赫夫曼编码解码为普通句子) { int p; char c; p=huff->root; printf("\n请输入需要解码的一串哈夫曼编码:\n"); c=getchar(); while(c!=10) { if(c=='0') { p=huff->ht[p].lchild; if(huff->ht[p].lchild==0||huff->ht[p].rchild==0) { printf("%c",ch[p]); p=huff->root; 14 湖南人文科技学院课程设计 } } if(c=='1') { p=huff->ht[p].rchild; if(huff->ht[p].lchild==0||huff->ht[p].rchild==0) { printf("%c",ch[p]); p=huff->root; } } c=getchar(); } printf("\n"); } void print(void) //控制输出 { printf("\n\n\t****************************************************************\n\n"); printf("\t请选择要进行的操作:\n\n\n"); printf("\t\t1----------------------------译 码\n"); printf("\t\t2----------------------------解 码\n"); printf("\t\t3----------------------------重新输入权值\n"); printf("\t\t4----------------------------调用count函数\n"); printf("\t\t0----------------------------退 出\n"); printf("\n\n\t*请选择功能>>>"); } void main() //主函数 { int i,choose,num,n,*w; char *ch; int 15 湖南人文科技学院课程设计 weight2[MAXNUM]={0},weight1[28]={0,186,64,13,22,32,103,21,15,47,57,1,5,32,20,57,63,15,1,48,51,80,23, 8,18,1,16,1}; char char2[MAXNUM]={' '},chars1[28]={' ','_','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',}; PHtTree huff; num=27; XX: printf("\n\n\t\t\t\t哈夫曼编码\n\n"); printf("\n\t******************************************************************\n\n"); printf("\t请选择权值输入的方式:\n\n"); printf("\t1.默认结点与权值,其中包括空格(程序输出时将以""_""代替)和小写字母a,b\n"); printf("\t2.逐个输入结点和结点的权值\n"); printf("\n\t*请选择功能>>>"); scanf("%d",&choose); switch(choose) { case 1: n=num;w=weight1;ch=chars1;break; case 2: { w=weight2;ch=char2; printf("请输入结点个数:"); scanf("%d",&n); getchar(); for(i=1;i<=n;i++) { printf("\n请输入第%d个结点:",i); scanf("%c",&char2[i]); if(char2[i]==32) char2[i]='_'; printf("\n请输入第%d个结点的权值:",i); scanf("%d",&weight2[i]); getchar(); } } 16 湖南人文科技学院课程设计 break; } huff=huffman(n,w); huffmancode(huff,w,ch,n); print(); scanf("%d",&choose); getchar(); while(choose) { switch(choose) { case 1: tohuffmancode(ch,n);break; case 2: decode(huff,ch);break; case 3: goto XX;break; case 4: count(); } print(); scanf("%d",&choose); getchar(); } } 四、调试分析与体会 本次课程设计的实例虽然比较简单,程序设计也不是很复杂。但是在程序的编写和调试过程中,我们还是遇到了一些问题。这些问题有些完全是自己的粗心造成的,有的却是一些由于我们自身的知识面不广造成的。有时由于粗心的原因导致程序编译与运行都过了,但是就是不能出来结果。问题提示我们:在做事情的时候特别是在做研究性的课题的时候一定要胆大心细。同时也告诉我们:在科学的世界里我们要努力的学习,获得更多的知识。 1(先要掌握二叉树,然后在此基础上掌握理解huffman树和编码。 2(要熟知哈弗曼树的性质,及huffman树没有度为1的结点。从而理解M为什么 等于2*N-1。 3(使用外部变量的确很方便。但我总对外部变量不是很感亲切,如果能避免使用,我想我会尽量避免使用。不过此程序,我用的是外部变量。因为它确实很方便,我也要准备考试,不大想花太多时间。 17 湖南人文科技学院课程设计 4(其实,太多的体会我实在没什么。因为,在完成作业过程中,我没遇到什么很大的难题,所以没什么太多的体会。只是我一直很是赞同一位外国计算机人士(忘了他的姓名)说的话:(读或写)程序就是理解。(大概和他的原话也是相差很大,但那个“理解”却是我所不能忘记的)。我在编写前首先是读老师所给的程序,虽然只是算法函数。在读懂的基础上,才进行编写自己程序的。 其实,程序真的就是理解。我想,对于自己编写的程序,每个设计者头脑中都似乎可以想象到计算机执行的每一步过程,至少,有一个很清晰的 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 思路吧。这也是我有时比较喜欢汇编的原因。因为它能单步执行。当运行不正确时,我可以仔细查看哪一步不符合我的要求,从而进行修改。我想C++里也应可以这样,但一直不知道,也从没听到老师提过。真的没有太多的体会,只想强调的是,我一直很是赞同的话,程序就是理解,理解到每一个细节,甚至每一步。 五、运行结果 经过调试和一系列的测试之后,程序终于没有了错误,可以运行了。由于我们的程序是有多个选择功能的,因此运行的结果也是有几个步骤的。如下面所示。 程序在确认没有错误之后,运行。我们的设计是具有多个选择功能的,因此在运行之后,并不会直接要求用户直接输入表达式。 1)程序运行主界面,运行结果如图1所示。 图1 请用户选择功能的界面 2)选择功能1,运行结果如图2所示。 18 湖南人文科技学院课程设计 图2 用户选择功能1之后的界面 (一) 若选择功能1,运行结果如图3所示。 19 湖南人文科技学院课程设计 图3 用户选择功能1之后的界面 (二) 若选择功能2,运行结果如图4所示 20 湖南人文科技学院课程设计 图4 用户选择功能2之后的界面 (三) 若选择功能3,运行结果如图5所示 图5 用户选择功能3之后的界面 (四) 若选择功能4,且输入字符串woaini,运行结果如图6所示 21 湖南人文科技学院课程设计 图6 用户选择功能4,且输入字符串woaini之后的界面 (五) 若选择功能0,运行结果如图7所示 3)选择功能2,运行结果如图8所示。 22 湖南人文科技学院课程设计 图8 用户选择功能2之后的界面 六、结 论 表达式计算作为程序设计语言的基础, 是高级程序设计语言学习者和程序员必备的 基础知识, 本文通过算符优先分析和堆栈的方法, 给出了算术表达式的计算过程, 同时给出了算法描述, 有助于高级语言初学者和计算机编程人员熟悉计算机内部表达式计算的处理过程, 更好地学习和掌握高级语言的编程技术。 通过本次课程设计,我们了解到了课程设计的要求与方法,学会了程序设计的基本步骤,且进一步提高了团队合作的意识。同时,我们也感觉到,一个优秀的程序,不仅仅只 23 湖南人文科技学院课程设计 是可以运行,更应该具有较高的效率,合理的结构,良好的可读性和一定的容错性。其中非常重要的一点是,我们认为整个课程设计是一个团队的工作,一个人要完成所有的工作是非常困难和耗时的,必须发挥团队的团结协作精神,提高工作效率和工作质量,团结协作是我们本次课程设计取得成功的一项尤其重要的保证。在以后的学习中我们也会更加注意各个方面能力的协调和发展。 七、致 谢 感谢我们的指导老师唐海波老师,谢谢他在我们的课程设计过程中提出了指导性的方案和架构,并指引我们阅读相关的资料和书籍,使我们在不熟悉的领域中仍能迅速掌握新的方法和技术。 感谢校领导给我们这次难得的锻炼机会,让我们能更好的理解和实践数据结构编程,让我们对数据结构编程有了更深刻的认知,对已学知识有了更进一步的巩固。 也谢谢我的伙伴与我一起合作,共同完成了这个课程设计。 八、参考文献 [1] 陈一华,数据结构 [M]. 西安:电子科技大学出版社,1998. [2] 严蔚敏,吴伟明. 数据结构 [M]. 北京:清华大学出版社,1999. [3] 谭浩强.C语言程序设计 [M]. 北京;高等教育出版社,2002. [4] 曲建明,刘元红,郑陶然.数据结构 [M]. 北京;清华大学出版社,2005. [5] 李春葆.数据结构教程 [M]. 北京:清华大学出版社,2005. [6] 蒋立翔.C++程序设计技能与百炼 [M]. 西安:中国铁道出版社,2004. 24 湖南人文科技学院课程设计 课程设计任务书及成绩评定 课题名称: 哈弗曼树与哈弗曼编码 完 成 者: 伍彪 周玉香 1、设计的目的与要求: 1) 灵活应用所学数据结构知识,独立完成问题分析。 2) 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等方法。 3) 训练用系统的观点和软件开发一般规范进行软件开发。 4) 提高综合运用所学的理论知识和方法独立分析和解决问题的能力。 2、设计进度及完成情况 日 期 内 容 分析问题,找出所要解决问题的关键 2010.12.20-2010.12.21 总体设计,找出解决方案 2010.12.22-2010.12.23 详细设计,列出解决步骤 2010.12.24-2010.12.25 程序编码 2010.12.26-2010.12.27 程序调试,修改加以完善 2010.12.28-2010.12.29 书写文档 2010.12.30-2010.12.31 3、成绩评定: 设计成绩: ,教师填写, 指导老师: ,签字, 年 月 日 25
本文档为【哈夫曼树与哈弗曼编码1】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_353097
暂无简介~
格式:doc
大小:185KB
软件:Word
页数:33
分类:互联网
上传时间:2017-09-25
浏览量:65