- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
课程设计报告2 详细版 程昭 200904213009
课程设计报告
刘丽华老师
200904213008 程昭
课程设计
问题重申
1.编程实现二叉排序树的创建与操作。要求:以二叉链表作二叉排序数的存储结构,结点的数据域为int类型,实现以下几个操作:
(1)以回车(\n)为输入结束标志,输入数列L,生成一棵二叉排序树T;
(2)对二叉排序树T作非递归中序遍历,输出遍历结果;
(3)计算二叉排序树T查找成功的平均查找长度,输出结果;
(4)输入元素x,查找二叉排序树T,若存在含x的结点,则删除该结点,并作中序遍历(执行操作2);否则输出信息“x不存在”;
(5) 输入元素x,查找二叉排序树T,若整棵树不存在含值为x的结点,则插入该结点,并作中序遍历(执行操作2);否则输出信息“x已经存在”。
我的思路是;1 二叉树是n个结点的有限集合,一棵深度为k且有2k-1个结点的二叉树称为满二叉树。对满二叉树的结点进行连续编号,约定编号从跟结点起,自上而下,自左而右。二叉树有两种存储结构。一 顺序存储结构,即用一维数组来存放二叉树的数据元素。他是按照满二叉树的结点层次编号层次来依次存放二叉树中的数据元素。二 设计不同的结点结构可以构成不同形式的链式存储结构。在本程序中,采用顺序存储结构,对二叉树进行插入删除查找遍历等操作。
其次是二叉树的建立 首先对二叉树进行编号,然后依次输入一个结点的值x和改结点的编号k,动态申请一块空间来存放改结点,空间的地址为p。把p的值赋给adr【k】中。如果k=5则重复以上步骤;否则把p的值填入其父结点的指针域中。P的父亲结点地址为adr【k/2],若k为偶数,则使adr[k/2]-lc=p;若k为奇数,则使adr[k/2]-rc=p. 直到结点数据输完为止.
然后是遍历二叉树 使每个节点有且仅仅被访问一次.例如一棵二叉树由根结点D左子树L和右子树R三个部分组成.所以遍历时有三种: 先序遍历DLR中序遍历LDR后序遍历LRD. 在遍历二叉树中由case语句来实现.
在二叉树的插入时首先生成一个新的结点结构,把数据存入新结点,然后搜索二叉树寻找插入结点的位置,再把新结点连接到二叉树.我们把这个操作定义为一个函数,其函数名为instree. 把二叉树的查找函数定义为searchetree.在二叉树中删除一个数据时首先用递归函数遍历这棵树,找到元素然后有四种情况:删除终端结点,删除只有一个左孩子的结点,删除只有一个右孩子的结点,删除带有2个孩子的结点.我们把删除函数的名字定义为deltree.
我们用循环语句while语句在屏幕上显示出主菜单:
A 向树中插入一个元素
B 从树中删除一个元素
C 从树中寻找一个元素
D 打印一棵树
E退出
不同的选项可以通过switch--case语句来实现。
一下是主要设计步骤:
主函数main()由case语句组成
主函数的说明函数 void prttree(treeptr tnode,int t) //打印树.该函数的功能是在屏幕上打印出存放在书中的元素. Tnode 指向根结点的指针;
T是打印方式 1 是前序遍历 2是中序遍历 3是后续遍历
Treeptr instree(char*s,int key,treeptr tnode); //插入一个元素,该函数把一个元素插入到二叉树中
S和key用来接收插入的数据 tnode 是指向根结点的指针
Treeptr searchtree(char*s,treeptr tnode);//查找一个元素,该函数检查树中的元素,如果是其中的成员,则函数返回该元素,否则返回null指针.
S是指向要找的那个元素的指针
Tnode 指向根结点的指针.
Treeptr findingspos(char*s,treeptr tnode);//该函数寻找一个元素要插入的位置.
一下为程序
#includestdio.h
#includestring.h
typedef struct treenode *treeptr; //重定义机构指针类型为treeptrstruct treenode //树结点的基本数据结构
{
int key; //数据域
char data[20]; //数据域
treeptr left,right; //左,右指针
};
//主要的树函数的说明部分
void prttree(treeptr tnode,int t);
treeptr instree(char *s,int key,treeptr tnode);
treeptr searchtree(char *s,treeptr tnode);
treeptr deltree(char *s,treeptr tnode);
treeptr findinspos(char *s
您可能关注的文档
- 中国地质大学(武汉)后勤保障处管理干部培训方案..doc
- 中国地质大学(武汉)教育发展基金会管理办法..doc
- 中国电信校园产品营销方案..doc
- 中国观光车市场全景评估与未来发展趋势报告..doc
- 智能高压开关设备性能检测方案..doc
- 中班角色游戏活动方案..doc
- 中福在线鹰潭销售厅营销诊断方案..doc
- 中国邮政储蓄银行湖南省分行劳动合同书..doc
- 质保金管理办法(最终稿)..doc
- 中宏12楼脚手架使用安全协议书..doc
- 2025年黑龙江省齐齐哈尔市单招职业倾向性测试题库及答案1套.docx
- 2025年黑龙江省齐齐哈尔市单招职业倾向性测试题库推荐.docx
- 2025年黑龙江省齐齐哈尔市单招职业适应性考试题库附答案.docx
- 2025年黑龙江省齐齐哈尔市单招职业倾向性测试题库必考题.docx
- 2025年黑龙江省鸡西市单招职业适应性测试题库必考题.docx
- 2025年执业兽医模拟题库精选附答案.docx
- 2025年黑龙江省鸡西市单招职业倾向性考试题库推荐.docx
- 2025年黑龙江省绥化市单招职业适应性考试题库必考题.docx
- 2025年黑龙江省绥化市单招职业适应性考试题库最新.docx
- 2022年北海职业学院单招职业技能考试题库及答案1套.docx
文档评论(0)