数据结构课与算法课程课程设计-高校社团管理设计,二叉树的应用(附全代码(编辑修改稿)内容摘要:

ame。 FindAlter(name,isfind,p,q,m,n)。 if(isfind==false) cout没有该社团。 endl。 else{ cout社团: mname,旗下会员有:。 Display(mlch,i)。 Display(mrch,i)。 cout\n是否删除该社团( y/n) :。 高校社团管理 cinyn。 if(yn==39。 y39。 ||yn==39。 Y39。 ){ if(m==root){ Destroy(root)。 root=NULL。 } else{ if(nlch==m){ Destroy(m)。 nlch=NULL。 } else{ Destroy(m)。 nrch=NULL。 } } cout删除社团成功。 endl。 } } system(pause)。 system(cls)。 } 删除会员: else if(order==2){ cout请输入要删除的会员名字:。 cinname。 FindAlter(name,isfind,p,q,m,n)。 if(isfind==false) cout没有该会员。 endl。 高校社团管理 else{ cout是否删除该会员( y/n) :。 cinyn。 if(yn==39。 y39。 ||yn==39。 Y39。 ) DeleteMember(root,m,n)。 } system(pause)。 system(cls)。 } void LeagueManage::DeleteMember(Member *t,Member *p,Member *q){ //删除会员 bool b=1。 Member *s,*m。 if(plch==NULL) s=prch。 else if(prch==NULL) s=plch。 else{ m=p。 s=prch。 while(slch!=NULL){ m=s。 s=slch。 } if(m==p) mrch=srch。 else mlch=srch。 高校社团管理 pname=sname。 ptag=stag。 delete s。 b=0。 } if(b==1){ if(p==root) t=s。 else if(qlch==p) qlch=s。 else qrch=s。 delete p。 } cout删除会员成功。 endl。 } void LeagueManage::FindAlter(string name,bool amp。 isfind,Member *p,Member *q,Member *amp。 m,Member *amp。 n){ //找双亲,用于删除 if(p!=NULL){ if(pname==name){ isfind=true。 m=p。 n=q。 } else{ q=p。 FindAlter(name,isfind,plch,q,m,n)。 FindAlter(name,isfind,prch,q,m,n)。 高校社团管理 } } } 4 调试分析 问题分析和解决 主要问题就是 怎么区分社团和会员。 我用的是一个标识符 tag 来区分。 当tag=0 时表示是会员,当 tag=1 时表示是社团。 算法的时间复杂度分析 创建:因为创建是按二叉树的层次,从上到下从左到右依次录入,唯一所消耗的时间就是计算所插入节点的双亲节点,所以时间复杂度为 O( 1); 插入:此算法就是找到要插入子树的最左边的节点,所以时间复杂度是 O( n); 查询:查询就是查找要查询的节点,所以时间复杂度是 O( n); 修改:与查询一样,时间复杂度是 O( n); 删除:与查询一样,时间复杂度是 O( n); 统计:使用递归来遍历输出,所以时间复杂度是 O( n)。 经验和体会 链表操作 要注意指针,当指针没用好,很有可能就出现错误。 使用二叉链表能很容易的实现一些基本操作。 而且只要能熟练的使用递归都能完成一些常用的算法,二叉树的算法主要的就是递归的使用。 5 用户使用说明 用 户登录系统后根据屏幕上的提示进行相应的操作就可王城一切功能的实现。 6 测试结果 主界面 图 13 主界面 高校社团管理 创建 图 14 创建 查询主界面 图 15 查询主界面 查询社团 图 16 查询社团 高校社团管理 查询会员 图 17 查询会员 修改主界面 图 18 修改主界面 修改社团 图 19 修改社团 高校社团管理 修改会员 图 110 修改会员 插入主界面 图 111 插入主界面 插入社团 图 112 插入社团 高校社团管理 插入会员 图 113 插入会员 统计 图 114 统计界面 删除主界面 图 115 删除主界面 高校社团管理 删除社团 图 116 删除社团 删除会员 图 117 删除会员 退出 图 118 退出界面 高校社团管理 结 论 过本次课程设计 可以得出 链表的操作就是更改指针的指向,但就是因为就是改变指针的指向,所以才做时更应该小心指针的指向位置。 链表存储具有非常大的优势,在内存足够的情况下,没有个数限制;而且对链表的操作除了查找,其它的操作都非常节约时间。 高校社团管理系统总体上完成了对社团的管理工作,圆满的完成了所有要求。 高校社团管理 致 谢 在本次课程设计过程中,首先感谢 周立章老师,其次感谢我的同学们。 他们都给了我很多帮助,让我顺利的完成了本次课程设计。 高校社团管理 参考文献 [ 1]杨宝刚 .开展企业 管理信息化工作的步骤 [ J] .企业管理 .20xx.( 11) .12~15 [2] 朱战立 .数据结构 (C++语言描述 )(第二版本) .高等出版社出版 .20xx年 4月 [3] 王立柱 .C/C++与数据结构 .北京:清华大学出版社, 20xx [4] 顾元刚 .数据结构简明教程 .南京:东南大学出版社等, 20xx [5] 郭福顺,王晓芬,李莲治《数据结构》(修订本),大连理工大学出版社,1997 [6] [美 ]Mark Allen Weiss,数据结构与算法分析 —— C语言描述 (英文版 •第 2版 ),人民邮电出版社, [7] 李春葆著,数据结构教程,清华大学出版社, 高校社团管理 所有代码: includeiostream includestring using namespace std。 typedef string ElemType。 struct Member{ ElemType name。 //姓名 int tag。 //标识符 ,tag=0 表示是会员, tage=1 表示是社团 Member *lch。 Member *rch。 }。 class LeagueManage{ private: Member *root。 public: LeagueManage(){root=NULL。 } ~LeagueManage(){ Destroy(root)。 root=NULL。 } void CreatBTree()。 //建立以二叉链存储的社团 void Find()。 //输入社团名称或社团中团员姓名查询 void Alter()。 //修改 void Insert()。 //插入 void Statistic(){Statistic(root)。 } //统计每个社团中的成员数 void DeleteNode()。 //删除 private: void FindMember(Member*,string,boolamp。 ,ElemType,Member*amp。 )。 //查找会员 void FindLeague(Member*,string,boolamp。 ,Member*amp。 )。 //查找社团 void FindAlter(string,boolamp。 ,Member*,Member*,Member*amp。 ,Member *amp。 )。 //找双亲 void Insert(Member*,string)。 //插入 void Statistic(Member *p)。 void DeleteMember(Member*,Member*,Member*)。 //删除会员 void Destroy(Member*)。 //删除所有节点 void。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。