数据结构课程设计二叉连链表.docx

上传人:b****2 文档编号:23553001 上传时间:2023-05-18 格式:DOCX 页数:14 大小:130.73KB
下载 相关 举报
数据结构课程设计二叉连链表.docx_第1页
第1页 / 共14页
数据结构课程设计二叉连链表.docx_第2页
第2页 / 共14页
数据结构课程设计二叉连链表.docx_第3页
第3页 / 共14页
数据结构课程设计二叉连链表.docx_第4页
第4页 / 共14页
数据结构课程设计二叉连链表.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

数据结构课程设计二叉连链表.docx

《数据结构课程设计二叉连链表.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计二叉连链表.docx(14页珍藏版)》请在冰豆网上搜索。

数据结构课程设计二叉连链表.docx

数据结构课程设计二叉连链表

课程设计指导书

姓名

学号

班级

课程名称

数据结构

课程性质

专业必修课

设计时间

2010年12月1日——2010年12月20日

设计名称

设计二叉链表结构的相关函数库

设计目的

使用MicrosoftVisualC++设计二叉链表结构的相关函数库,并能够在程序设计中调用

设计要求

设计二叉链表结构的相关函数库,以便在程序设计中调用,实现二叉树的各种基本函数以及常用函数;并给出1-2个例子,通过调用自己的库函数来实现问题的求解。

设计思路

设计过程

1.程序需求分析

完成:

根据需求分析,确定各个程序功能的需求;

2.程序总统设计

完成:

根据程序需求,进行程序大概框架的设计;

3.主函数设计

完成:

主函数程序中设计一个菜单,并调试所用算法;

4.其他函数设计

完成:

建立二叉链表以及递归序列遍历算法

5.系统程序完善

完成:

完善整个程序细节代码的要求,进行调试。

计划与进度

12.1-12.2复习对vc++6.0使用,了解关于二叉链表的相关特征等。

12.3-12.4查找有关二叉链表基本操作的算法等。

12.5-12.7根据需求分析,确立各个函数程序功能。

12.8-12.10根据程序需求,进行相关子函数程序的编写。

12.11-12.13进行主函数程序功能的设计编写。

12.14-12.16进行对整个程序的完善。

12.17-12.18进行程序的调试运行。

12.19-12.20资料归档,填写相关文档。

任课教师

意见

备注

 

课程设计报告

 

课程:

学号:

姓名:

班级:

教师

时间:

 

计算机科学与技术系

 

设计名称:

设计二叉链表的相关函数库

日期:

2010年12月20日

设计内容:

使用MicrosoftVisualC++设计二叉链表结构的相关函数库,以便在程序设计中调用

设计目的与要求:

设计二叉链表结构的相关函数库,在程序设计中调用,并实现二叉树的各种基本函数以及常用函数。

设计环境或器材、原理与说明:

器材:

计算机一台

硬件环境:

处理器:

Intelcorei3

内存:

1GB

硬盘空间:

320GB

显卡:

ATIMobilityRadeon

软件环境:

WindowsXP,MicrosoftVisualC++6.0

使用数据结构设计的一般方法步骤进行设计。

设计过程(步骤)和部分程序代码(可以加页):

一.题目要求

设计二叉链表结构的相关函数库,在程序设计中调用,并实现二叉树的各种基本函数以及常用函数。

二.需求分析

建立一棵二叉树:

(1)二叉树的链表结构;

(2)进行先序遍历,输出结果;

(3)进行中序遍历,输出结果;

(4)进行后序遍历,输出结果;

(5)进行层次遍历,输出结果。

三.运行环境

WindowsXP

四.开发工具和编程语言

1.开发工具:

MicrosoftVisualC++6.0

2.编程语言:

C语言

五.概要设计

1.数据结构

typedefchardatatype;

typedefstructnode//定义二叉树结点类型

{

datatypedata;

structnode*lchild;

structnode*rchild;

}Btnode,*Btree;

2.模块划分

1.根据先序递归建立二叉树

Btreepre_creat()

2.递归遍历输出函数

voidpreorder_btree(Btreeroot)//由先根序列遍历输出二叉树

voidinorder_btree(Btreeroot)//由中根序列遍历输出二叉树

voidpostorder_btree(Btreeroot)//由后根序列遍历输出二叉树

3.层次遍历输出算法

voidlevel_btree(Btreeroot)//层次遍历输出二叉树

六.详细设计

1.创建二叉树的实现

Btreepre_creat()//使用先根序列建立二叉树,返回指针

{

Btreet;

charch;

fflush(stdin);

scanf("%c",&ch);//输入一个结点数据

if(ch=='@')

returnNULL;//空结点

else

{

t=(Btnode*)malloc(sizeof(Btnode));//申请结点空间,根节点

t->data=ch;

t->lchild=pre_creat();//生成左子树

t->rchild=pre_creat();//生成右子树

}

returnt;

}

2.先序、中序、后序递归遍历输出算法

voidpreorder_btree(Btreeroot)//由先根序列输出二叉树

{

Btreep=root;

if(p!

=NULL)

{

printf("%3c",p->data);//输出结点值

preorder_btree(p->lchild);//输出左子树

preorder_btree(p->rchild);//输出右子树

}

}

voidinorder_btree(Btreeroot)//由中根序列输出二叉树

{

Btreep=root;

if(p!

=NULL)

{

inorder_btree(p->lchild);//输出左子树

printf("%3c",p->data);//输出结点值

inorder_btree(p->rchild);//输出右子树

}

}

voidpostorder_btree(Btreeroot)//由后根序序列输出二叉树

{

Btreep=root;

if(p!

=NULL)

{

postorder_btree(p->lchild);//输出左子树

postorder_btree(p->rchild);//输出右子树

printf("%3c",p->data);//输出结点值

}

}

3.层次遍历输出算法

voidlevel_btree(Btreeroot)//层次遍历输出二叉树

{

Btreep;

p=(Btnode*)malloc(sizeof(Btnode));//申请一个新结点

p->data='@';

p->lchild=p->rchild=NULL;//为新结点赋初值

intfront,rear;

front=rear=0;//置空队列

p=root;//工作结点指向根节点

if(p!

=NULL)

{

rear++;

Q[rear]=p;//结点不为空就入队

if(rear==1)

{

front=1;

Q[front]=p;//根节点入队作为队列头结点

rear++;

}

while(front!

=rear)

{

p=Q[front];//队头结点出队

front++;

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

if(p->lchild!

=NULL)

{

Q[rear]=p->lchild;

rear++;

}

if(p->rchild!

=NULL)

{

Q[rear]=p->rchild;

rear++;

}

}

}

}

这三个函数实现了二叉树的递归遍历方法。

先序思想是先根、后左孩子、再右孩子,中序遍历思想是先左孩子、后根、再右孩子,后序是先左孩子、后右孩子、再根。

4.主函数

intmain()

{

Btreeboot;

boot=(Btnode*)malloc(sizeof(Btnode));

boot=NULL;

intx;

do

{

printf("_____________________________________\n");

printf("--------------欢迎使用!

-------------\n");

printf("_____________________________________\n");

printf("\n***************主菜单****************\n");

printf("x=1...先序遍历建立二叉树!

\n");

printf("x=2...先序遍历输出二叉树!

\n");

printf("x=3...中序遍历输出二叉树!

\n");

printf("x=4...后序遍历输出二叉树!

\n");

printf("x=5...层次遍历输出二叉树!

\n");

printf("x=0...退出\n");

printf("****************************************\n");

do

{

fflush(stdin);

printf("请输入x的值:

");

scanf("%d",&x);

if((x!

=1)&&(x!

=2)&&(x!

=3)&&(x!

=4)&&(x!

=0)&&(x!

=5))

{

printf("请输入正确的x的值\n");

}

}while((x!

=1)&&(x!

=2)&&(x!

=3)&&(x!

=4)&&(x!

=0)&&(x!

=5));

switch(x)

{

case1:

printf("\t先序遍历建立二叉树:

\n");

printf("\t请输入二叉树结点的值!

:

\n");

printf("(可以输n个值均为字母或'@'(n<100)字符间以回车符换行,想结束时输多个'@'):

\n");

boot=pre_creat();//顺序表的逆置

printf("\n\n");

break;

case2:

printf("\t先序遍历输出二叉树!

:

\n");

printf("建立的二叉树是:

");

preorder_btree(boot);

printf("\n\n");

break;

case3:

printf("\t中序遍历输出二叉树!

:

\n");

printf("建立的二叉树是:

");

inorder_btree(boot);

printf("\n\n");

break;

case4:

printf("\t后序遍历输出二叉树!

:

\n");

printf("建立的二叉树是:

");

postorder_btree(boot);

printf("\n\n");

break;

case5:

printf("\t层次遍历输出二叉树!

:

\n");

printf("建立的二叉树是:

");

level_btree(boot);

printf("\n\n");

break;

}

}while(x!

=0);

printf("ByeBye!

");

returnx;

}

7.运行结果:

图一

图二

图三

图四

图五

图六

图七

 

设计结果与分析(可以加页):

本次课程设计实现了二叉链表的相关函数库的调用。

为了实现以链表为存储结构的二叉树的有关操作,要熟练掌握二叉链表的特性,但对于一些算法较为复杂,代码量多些,容易出现一些变量的定义、函数声明、函数调用等细节上的问题出错。

在本程序的设计过程中,为了克服以上困难,采取了一些措施:

建立清晰的程序设计的步骤方法,分步各个模块程序设计,进行仔细的总体结构设计,反复调试、细心观察达到完善整个系统等。

设计体会与建议:

数据结构是计算机程序设计的重要理论技术基础,在理论学习和基础实验的基础上,通过实践设计一定量的程序,掌握应用计算机解决实际问题的基本方法,是理解和运用数据结构及算法,提高编程能力的有效途径,并为学习软件专业课程积累理论基础和实践基础。

程序的设计和开发过程,不仅要求我们牢固地掌握各种基础知识,更考查了对基础知识的综合运用能力。

这次我的实验课题是二叉树的基本算法综合分析。

算法是数据结构的核心,是我们学习软件开发必须掌握的基本知识。

简单课程设计最重要的是基础知识的运用,以及综合分析问题的能力。

二叉树的递归算法主要是将二叉树存储到链表结构中。

遍历是二叉树各种操作的基础,先序、中序、后序是二叉树遍历的三种基本遍历方法。

而这些都是数据结构的基础内容,是我们必须理解和牢记的基础知识。

将这些基础算法综合起来,更能清晰地认识和理解各种算法的作用。

当然,要学会编程不会仅局限于课本知识,而是根据课本知识进行有效的拓展,并且不得不学会在众多的参考资料中搜索有用的自己所需的知识,并迫使自己去学习掌握它们,从中不断提高自己。

例如,课本上只给出了二叉树的递归中序遍历方法,由此可容易推出递归的前序和中序遍历方法。

二叉树的基本操作是多种多样的,由于时间的短促和作者水平有限,因不能做太大规模的设计。

虽然程序规模不大,我依然为此付出了努力,仍免不了各种错误的出现。

编程过程需要很大的毅力和耐心,而且要有良好的思维和扎实的专业基础知识,所以我需要不断的学习,发现自身不足之处并改正它,逐步提高自身能力,不断取得进步。

对于数据结构的学习,我一直感到很吃力,但想过放弃。

通过实践,让我们认识到知识的运用性,并加深对基础知识的理解,从中了解自己需要学习的东西并学会自学。

在此我要感谢我的老师对我们专心致志的辅导,让我学会了许多分析和解决问题的方法,让我受益匪浅。

作为一名计算机专业的学生,今后我将加倍努力学习专业知识,为自己从事的职业打下坚实基础。

设计成绩:

教师签名:

年月日

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

当前位置:首页 > 工程科技 > 电力水利

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1