软件开发工具论文文档格式.docx

上传人:b****3 文档编号:7298098 上传时间:2023-05-08 格式:DOCX 页数:18 大小:68.80KB
下载 相关 举报
软件开发工具论文文档格式.docx_第1页
第1页 / 共18页
软件开发工具论文文档格式.docx_第2页
第2页 / 共18页
软件开发工具论文文档格式.docx_第3页
第3页 / 共18页
软件开发工具论文文档格式.docx_第4页
第4页 / 共18页
软件开发工具论文文档格式.docx_第5页
第5页 / 共18页
软件开发工具论文文档格式.docx_第6页
第6页 / 共18页
软件开发工具论文文档格式.docx_第7页
第7页 / 共18页
软件开发工具论文文档格式.docx_第8页
第8页 / 共18页
软件开发工具论文文档格式.docx_第9页
第9页 / 共18页
软件开发工具论文文档格式.docx_第10页
第10页 / 共18页
软件开发工具论文文档格式.docx_第11页
第11页 / 共18页
软件开发工具论文文档格式.docx_第12页
第12页 / 共18页
软件开发工具论文文档格式.docx_第13页
第13页 / 共18页
软件开发工具论文文档格式.docx_第14页
第14页 / 共18页
软件开发工具论文文档格式.docx_第15页
第15页 / 共18页
软件开发工具论文文档格式.docx_第16页
第16页 / 共18页
软件开发工具论文文档格式.docx_第17页
第17页 / 共18页
软件开发工具论文文档格式.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

软件开发工具论文文档格式.docx

《软件开发工具论文文档格式.docx》由会员分享,可在线阅读,更多相关《软件开发工具论文文档格式.docx(18页珍藏版)》请在冰点文库上搜索。

软件开发工具论文文档格式.docx

最后返回head。

在对于设置节点的算法时候遇见了麻烦,不知道是该怎样开辟一个新的节点,用new函数对于节点使用后的释放有一定的影响,经过查资料之后,我选择了setnode算法。

//setnode()函数的算法:

设指向node的指针p,用malloc开辟一个node结点并让p指向该结点,返回p。

接下来便是重头戏----构造赫夫曼树了,定义结构体node1,其数据项字符型a(存放叶子结点元素)、整型weight(存放对应权值)、整型sign(起标记作用)、和指向左、右孩子及父母结点的指针lchild、rchild和parent。

整体的构思为,定义指向node1的指针p0、p1、p2、p3、p4和整型的m、n、i、j、k1、k2,n=0、p=head->

next,当p!

=NULL,n++,p=p->

next,开辟可以存储2*n个node1的顺序表,让p0指向表头,p1=p0,p=head->

next,当p!

=NULL时p1->

a=p->

a,p1->

weight=p->

p1的指向左、右孩子及父母的指针指空,p=p->

next,p1++;

p1++,p=p->

next;

i=1,当i<

=n-1,j=0,当j<

2,如果j==0把‘‘1’赋给k1;

否则把‘1’赋给k2;

p2=p0,当p2!

=p1时,如果p2->

sign==NULL并且m=p2->

weight用break结束循环否则p2++;

=p时,如果m>

=p2->

weight并且p2->

sign==NULL,把p2->

weight赋给m,否则p2++;

把p0赋给p2,当p2不等于p1时,如果m等于p2->

sign等于NULL,把‘1’赋给p2->

sign,如果j=0,把p2赋给p1->

lchild,p2->

weight赋给p1->

weight,p1赋给p2->

parent,用break结束循环;

如果j==1,则把p2赋给p1->

rchild,p1->

weight加p2->

如果j等于0,k1++,p2++;

如果j等于1,k2++,p2++;

j++;

如果k1大于k2把p1->

lchild赋给p3,p1->

rchild赋给p4,p4赋给p1->

lchild,p3赋给p1->

sign=NULL,p1++,i++;

然后p--,把p1->

parent=NULL,p1++,把p0赋给p2,当p2不等于p时输出p2的各数据项,拍p2++;

返回p0。

接下来的步骤便是输出赫夫曼编码了。

其中,输出叶子结点的赫夫曼编码思路为设指向huffmancode的指针p,指向code的指针和指向字符型的指针base、top;

把head1(函数的形参)赋给p,当p->

a!

=NULL时,把0赋给n,p->

head->

next赋给h,当h!

=NULL时n++,h=h->

next,开辟一个可以存储n+1个字符的栈,让base指向栈底,top=base,把h=p->

next,当h!

=NULL时,*top=h->

a,top++,h=h->

next;

top--,当to不等于base时,输出*top,top--;

输出*top;

p++。

然后,输出字符串的赫夫曼编码设计思路为设指向huffmancode的指针p1,指向code的指针h和指向字符型的指针base,top,p2,让p2指向字符串的第一个元素,当*p2!

=‘\0’时,输出*p2,p2++;

当*p!

=‘\0’时(p为函数的形参),把0赋给n(n为整型)p1=p0(p0为形参)当p1->

=NULL时,如果p1->

a等于*p把p1->

=NULL时,h=h->

next,base指向可以存储n+1个字符的栈底,top=base,把p1->

=NULL,*top=h->

a,top++,h=h->

next,top自减,当top!

=base,输出*top,top--,输出*top,用break结束循环,p++。

在主函数中,我选择的是调用control()函数。

在想好了设计之后,为了接下来的工作有条不紊的进行,我绘制了一个流程图。

在最后,我还有自己的一点想法想要说的,虽然我对于赫夫曼编码非常感兴趣,但是实际操作起来才深切的感受到,课本上讲的知识在对于实际操作起来,还是有很大的差距的。

如果想真的座椅电动吸出来,必须阅读大量的资料,参考大量的文献书籍,才能够实现举一反三,正正的做出东西来。

并且,学软件这一行的必须要亲自动手,不能坐享其成,毕竟软件是从国外流入中国的,既然学习了国外的先进知识,那么在于此同时,我们必须也要尊崇他们的传统,那就是支持原创!

合理的编程方法是我这次课程设计的最大收获。

附录:

主函数

//程序的编译环境是Visualstudio2010

//把统计叶子结点元素和权值的函数放在“计算权值.h”中

#include<

iostream>

usingnamespacestd;

typedefstructnode//存储叶子结点元素及其权值的结构体

{

chara;

//叶子结点的元素

int

listnodehead,p1,p2;

char*n,*t,*h;

inti=1,j=1,r=0;

head=setnode();

p1=head;

for(n=a;

*n!

='

\0'

n++)

{

if(n==a)

p2=setnode();

for(t=n;

*t!

t++)//统计相同的字符在字符串中出现的次数

if(*t==*n)

r++;

p2->

a=*n;

b=r;

p1->

next=p2;

p1=p2;

}

else

i++;

r=0;

j=1;

for(t=a;

t++)

if(*t==*n)

r++;

for(h=a;

h!

=n;

h++)

if(*h==*n)

break;

j++;

if(i==j)

//调用setnode()函数开辟结点

next=NULL;

cout<

<

"

电文的长度为:

i<

endl;

------------------------------------------------"

叶子结点"

\t"

权值"

for(p1=p1->

p1!

=NULL;

p1=p1->

next)

p1->

a<

\t\t"

b<

returnhead;

intcoutdata(listnodehead)//统计叶子结点的个数

listnodep;

intn=0;

for(p=head->

p!

p=p->

n++;

returnn;

//把构造赫夫曼树的函数放在头文件“构造赫夫曼树.h”中

#include"

计算权值.h"

typedefstructnode1//赫夫曼树的结点结构体

{

//结点元素

intweight,sign;

//结点的权值和结点的标记

structnode1*parent,*lchild,*rchild;

//指向父母结点和左、右孩子的指针

}*listnode1;

//指向node1的指针

listnode1settree(listnodehead)//构造赫夫曼树的函数

listnode1p0,p1,p2;

intm,n,i,j,k1,k2;

structnode1*p3,*p4;

n=0;

p0=(listnode1)malloc(2*n*sizeof(node1));

//开辟可以存储2n个赫夫曼树结点的顺序表

p1=p0;

next)//把叶子结点的信息读入到顺序表中

a;

b;

lchild=NULL;

parent=NULL;

rchild=NULL;

sign=NULL;

p1++;

for(i=1;

=n-1;

i++)

for(j=0;

j<

2;

j++)

if(j==0)

k1=1;

elseif(j==1)k2=1;

for(p2=p0;

p2!

=p1;

p2++)

if(p2->

sign==NULL)

m=p2->

weight;

break;

if(m>

weight)

if(p2->

m=p2->

if(m==p2->

{

p2->

sign=1;

if(j==0)//把先找到的权值最小的作为左孩子

{

p1->

lchild=p2;

weight=p2->

p2->

parent=p1;

}

elseif(j==1)//把后找到的权值最小的最为右孩子

rchild=p2;

weight=p1->

weight+p2->

break;

if(j==0)

k1++;

//标记先找到的权值最小的结点在顺序表中的位置

elseif(j==1)

k2++;

//标记后找到的权值最小的结点在顺序表中的位置

if(k1>

k2)/*如果先找到的权值最小的结点在顺序表中的位置在后找到的后面

{则他们父母结点的左右孩子指针交换*/

p3=p1->

lchild;

p4=p1->

rchild;

lchild=p4;

rchild=p3;

}

p1--;

p2=p0;

左孩子"

\t\t"

父母结点"

右孩子"

//输出构造的赫夫曼树

while(p2!

=p1)

p2->

weight<

lchild<

parent<

rchild<

p2++;

returnp0;

//把叶子结点赫夫曼编码的获取的函数放在头文件“获得赫夫曼编码.h”中

构造赫夫曼树.h"

typedefstructcode//存储赫夫曼编码的结构体

//存储‘0’、‘1’编码

structcode*next;

//指向链表下一个结点的指针

}*listcode;

//指向该结构体的指针

typedefstructhuffmancode//存储叶子结点元素和赫夫曼编码链表的头指针的结构体

listcodehead;

//指向存储赫夫曼编码链表的指针

}*listhuffmancode;

listcodesetcode()//开辟存储‘0’、‘1’编码结点的函数

listcodep;

p=(listcode)malloc(sizeof(code));

returnp;

}

listhuffmancodegethuffmancode(listnode1p)//把得到的叶子结点及其{赫夫曼编码存到顺序表中的函数

listnode1p1,p2,p4;

intn=0;

listhuffmancodel,l1;

listcodeh,h1;

for(p2=p;

lchild==NULL&

&

rchild==NULL;

l=(listhuffmancode)malloc((n+1)*sizeof(huffmancode));

//开辟可以存储n+1个叶子结点信息的顺序表

l1=l;

for(p4=p;

p4->

p4++)

p1=p4;

h1=setcode();

l1->

head=h1;

for(;

parent!

parent)

if(p1==p1->

parent->

lchild)

h=setcode();

h->

a='

0'

h1->

next=h;

h1=h;

elseif(p1==p1->

rchild)

1'

h1->

a=p4->

l1++;

a=NULL;

returnl;

//把输出赫夫曼编码的函数放在头文件““输出赫夫曼编码.h”中

获得赫夫曼编码.h"

voidprinthuffmancode(listhuffmancodehead1)//输出叶子结点及其赫夫曼编码{的函数

listhuffmancodep;

p=head1;

listcodeh;

intn;

char*base,*top;

cout<

for(p=head1;

p->

p++)

h=p->

head;

for(h=h->

h=h->

n++;

base=(char*)malloc((n+1)*sizeof(char));

top=base;

*top=h->

top++;

top--;

for(;

top!

=base;

top--)

cout<

*top;

voidprint(char*p,listhuffmancodep0)//输出输入字符串的赫夫曼编码

listhuffmancodep1;

listcodeh;

char*base,*top,*p2;

电文内容:

*p2!

*p2;

电文的赫夫曼编码:

*p!

for(p1=p0;

p1++)

if(p1->

a==*p)

h=p1->

for(h=h->

n++;

base=(char*)malloc((n+1)*sizeof(char));

top=base;

*top=h->

top++;

for(--top;

cout<

cout<

}

//把control函数放在头文件“控制函数.h”中

输出赫夫曼编码.h"

voidcontrol()//调用各个功能函数

数据结构课程设计"

chara[20];

intn;

接受到的电文内容(不超过20个字符):

cin>

>

p=getdata(a);

n=coutdata(p);

if(n==1)//如果只有一个叶子结点,说明该叶子结点就是根结点,无法构造赫夫曼树

p=p->

该树只有一个叶子结点即根结点(根结点没有赫夫曼编码)>

根结点"

listnode1p1;

p1=settree(p);

listhuffmancodep2;

p2=gethuffmancode(p1);

printhuffmancode(p2);

print(a,p2);

endl<

程序结束................"

//主函数放在源文件“赫夫曼编码.cpp“中

控制函数.h"

voidmain()

control();

//调用control函数

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2