数据结构C语言课程设计-二叉树排序精选.docxVIP

数据结构C语言课程设计-二叉树排序精选.docx

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构C语言课程设计-二叉树排序精选

题目:二叉排序树的实现1 内容和要求编程实现二叉排序树,包括生成、插入,删除;对二叉排序树进行先根、中根、和后根非递归遍历;每次对树的修改操作和遍历操作的显示结果都需要在屏幕上用树的形状表示出来。分别用二叉排序树和数组去存储一个班(50 人以上)的成员信息(至少包括学号、姓名、成绩 3 项),对比查找效率,并说明在什么情况下二叉排序树效率高,为什么?2 解决方案和关键代码2.1 解决方案:先实现二叉排序树的生成、插入、删除,编写DisplayBST函数把遍历结果用树的形状表示出来。前中后根遍历需要用到栈的数据结构,分模块编写栈与遍历代码。要求对比二叉排序树和数组的查找效率,首先建立一个数组存储一个班的成员信息,分别用二叉树和数组查找,利用clock()函数记录查找时间来对比查找效率。2.2关键代码2.2.1树的基本结构定义及基本函数typedefstruct{KeyType key; } ElemType;typedefstructBiTNode//定义链表{ElemType data;structBiTNode *lchild, *rchild;}BiTNode, *BiTree, *SElemType;//销毁树int DestroyBiTree(BiTree T){if (T != NULL)free(T);return 0;}//清空树int ClearBiTree(BiTree T) {if (T != NULL){T-lchild = NULL;T-rchild = NULL;T = NULL;}return 0;}//查找关键字,指针p返回int SearchBST(BiTreeT, KeyTypekey, BiTreef, BiTree p){if (!T){p = f;returnFALSE;}elseifEQ(key, T-data.key){p = T;returnTRUE;}elseifLT(key, T-data.key)return SearchBST(T-lchild, key, T, p);elsereturn SearchBST(T-rchild, key, T, p);}2.2.2二叉树的生成、插入,删除生成void CreateBST(BiTree BT, BiTreep){int i;ElemType k;printf(请输入元素值以创建排序二叉树:\n);scanf_s(%d, k.key);for (i = 0; k.key != NULL; i++){//判断是否重复if (!SearchBST(BT, k.key, NULL, p)){InsertBST(BT, k);scanf_s(%d, k.key);}else{printf(输入数据重复!\n);return;}}}插入int InsertBST(BiTree T, ElemTypee) {BiTree s, p;if (!SearchBST(T, e.key, NULL, p)){s = (BiTree)malloc(sizeof(BiTNode));s-data = e;s-lchild = s-rchild = NULL;if (!p)T = s;elseifLT(e.key, p-data.key)p-lchild = s;elsep-rchild = s;returnTRUE;}elsereturnFALSE;}删除//某个节点元素的删除int DeleteEle(BiTree p){BiTree q, s;if (!p-rchild) //右子树为空{q = p;p = p-lchild;free(q);}elseif (!p-lchild) //左子树为空{q = p;p = p-rchild;free(q);}else{q = p;s = p-lchild;while (s-rchild){q = s;s = s-rchild;}p-data = s-data;if (q != p)q-rchild = s-lchild;elseq-lchild = s-lchild;delete s;}returnTRUE;}//整棵树的删除int DeleteBST(BiTree T, KeyTypekey) //实现二叉排序树的删除操作{if (!T){returnFALSE;}else{if (EQ(key, T-data.key)) //是否相等return DeleteEle(T);elseif (LT(key, T-data.key)) //是否小于return DeleteBST(T-lchild, key);elsereturn DeleteBST(T-rchild, k

文档评论(0)

feixiang2017 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档