软件大作业

发布 2020-02-25 09:24:28 阅读 1021

班级 02-0912

学号 02091112

软件大作业。

题目软件大作业。

学院电子工程学院。

专业电子信息工程。

学生姓名高大容。

导师姓名刘丹华。

第一题。从键盘输入字符(6个以上的字符)建立一棵二叉树(二叉树形式任意),输出该二叉树的dlr,ldr,lrd序列,统计叶子结点个数,总结点个数,及二叉树深度;

一:算法分析。

a. 建立一颗二叉树基本步骤:

1) 按照结点的序号,依次输入结点信息,若输入的结点不是虚节点,则建立一个新结点。

2) 若新结点是第一个结点,则令其为根结点,否则将新结点作为孩子结点链接到它的双亲结点上。

3) 如此反复进行,直到输入结束标志“#”为止。

b. 二叉树遍历(采用递归算法):

dlr序列:

1) 访问根结点。

2) 先序遍历左子树。

3) 先序遍历右子树。

ldr序列:

1) 中序遍历左子树。

2) 访问根结点。

3) 中序遍历右子树。

lrd序列:

1) 后序遍历左子树。

2) 后序遍历右子树。

3) 访问根结点。

c.统计叶子结点个数(采用递归算法):

1)调用递归访问左子树。

2)调用递归访问右子树。

3)左右子树都为空,则为叶子结点。

d.总结点个数(采用递归算法):

1)访问根结点(非空,结点个数加1)

2)调用递归访问左子树。

3)调用递归访问右子树。

e.二叉树深度(采用递归算法):

1)树为空,返回0

2)统计左,右子树的深度u,v

3)u>v,返回u+1,否则返回v+1

二:流程图。

a. 建立一棵二叉树流程图。

b. 三种遍历流程图。

c.统计叶子个数流程图 d。统计结点个数流程图。

e。二叉树深度流程图。

三:程序**。

#include<>

#include<>

typedef char datatype;

typedef struct node

datatype data;

struct node*lchild,*rchild;

bitree;

bitree*root;

int count1=0,count2=0;

bitree*creatree();

void preorder(bitree*p);

void inorder(bitree*p);

void postorder(bitree*p);

void yezi(bitree*p);

void jiedian(bitree*p);

int depthtree(bitree*p);

void main()

int h;

bitree*root;

root=creatree();

preorder(root);

printf("");

inorder(root);

printf("");

postorder(root);

printf("");

yezi(root);

printf("%d",count1);

jiedian(root);

printf("%d",count2);

h=depthtree(root);

printf("%d",h);

bitree*creatree()

char ch;

int front,rear;

bitree*q[1024];

bitree*s;

root=null;

front=1;rear=0;

while((ch=getchar())#

rear++;

q[rear]=s;

if(rear==1) root=s;else

return root;

void preorder(bitree*p)

if(p!=null)

void postorder(bitree*p)

if(p!=null)

postorder(p->lchild);

postorder(p->rchild);

printf("%c",p->data);

void inorder(bitree*p)

if(p!=null)

inorder(p->lchild);

printf("%c",p->data);

inorder(p->rchild);

void yezi(bitree*p)

if(p!=null)

void jiedian(bitree*p)

if(p!=null)

int depthtree(bitree *p) /深度函数。

int u,v;

if (p==null) return 0;

u=depthtree(p->lchild);

v=depthtree(p->rchild);

if (u>v)

return (u+1);

return (v+1);

四、执行结果。

第二题。设电文由a,b,c,d,e五个字符构成,出现的概率分别为0.25,0.

15,0.2,0.1,0.

3,为这些字符设计相应的哈夫曼编码(提示参考算法6.16建立一棵哈夫曼树),并验证译码是否正确。

一、算法。1)编码:提示要编码的文件文件名→读取文件→以字母出现次数为权值建立哈夫曼树→对文本进行哈夫曼编码并输出编码→提示将编码保存的文件名→保存编码文件;

2).译码:提示输入要译码的文件名→利用建立好的哈夫曼树进行译码→将译码输出→提示保存译码文件的文件名→保存译码文件;

3).退出:退出系统,程序运行结束。

二、流程图。

创建哈夫曼树。

编码。译码。

三、三、执行结果。

四、程序**。

#include<>

#include<>

#include<>

#include<>

#include<>

typedef struct赫夫曼树的结构体。

char ch;

int weight权值。

int parent,lchild,rchild;

htnode,*hfmtree;

typedef char **hfmcode;

void select(hfmtree &ht,int a,int *p1,int *p2) /select函数,选出ht树到a为止,权值最小且parent为0的2个节点。

int i,j,x,y;

for(j=1;j<=a;++j)

for(i=j+1;i<=a;++i)

for(j=1;j<=a;++j)

for(i=j+1;i<=a;++i)

if(x>y)

elsevoid hfmcoding(hfmtree &ht,hfmcode &hc,int n) /构建赫夫曼树ht,并求出n个字符的赫夫曼编码hc

int i,start,c,f,m,w;

int p1,p2;

char *cd,z;

if(n<=1)

m=2*n-1;

ht=(hfmtree)malloc((m+1)*sizeof(htnode));

for(i=1;i<=n;++i初始化n个叶子结点。

ht[i].ch=z;

ht[i].weight=w;

ht[i].parent=0;

ht[i].lchild=0;

ht[i].rchild=0;

for(;i<=m;++i初始化其余的结点。

for(i=n+1;i<=m;++i建立赫夫曼树。

select(ht,i-1,&p1,&p2);

ht[p1].parent=i;ht[p2].parent=i;

ht[i].lchild=p1;ht[i].rchild=p2;

ht[i].weight=ht[p1].weight+ht[p2].weight;

《软件基础》大作业

项目名称 双副扑克一人升级游戏 一人与三机器人玩 班级 电气 29 学号 02041271 02041260 02041257 姓名 李余强张亚婷马媛媛 完成时间 2004 11 8 指导老师 卫颜峻。日期 2004 11 24 目录。一 需求分析。1 1开发背景3 1 2项目目标3 1 3运行环境...

软件基础大作业

软件基础课堂内容。一绪论 算法与算法分析 性质 输入性,输出性,有穷性,确定性,可行性。频度 语句重复执行的次数。时间复杂度 算法的时间耗费t n 二线性表 线性表 一个线性表是n个数据元素 结点 的有限序列。是有n个数据元素构成的有线序列。顺序表 顺序映像。插入运算。删除运算。链表 存储数据元素信...

软件工程大作业

目录。引言 1正文 1 3 软件需求分析 2 3.1系统功能需求分析 2 3.2管理信息系统的界面特点 3 3.3 管理系统具体研究 3 4 功能需求描述 5 4.1员工基本信息模块 5 4.2工资结构设置模块 6 4.3数据库设计 6 4.4数据流程图 6 总结 9参考文献 10 基于sql开发的...