网站大量收购独家精品文档,联系QQ:2885784924

[工学]数据结构课程设计.doc

  1. 1、本文档共30页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]数据结构课程设计

《数据结构》 课程设计报告 专 业: 班 级: 姓 名: 学 号: 指导教师: 2011年 4 月 27日 设计题目 (一)《编程实现二叉排序树的创建于操作》 (二)《Josephu问题的实现》 (三)《迷宫问题求解》 (四)《编程实现无向图的基本操作》 二、设计内容 (一)以二叉链表作二叉排序树中序遍历得有序的存储结构,结点的数据域为int类型,实现以下几个操作: (1)以0为输入结束标志,输入数列L,生成一棵二叉排序树T; (2)对二叉排序树T作非递归中序遍历,输出遍历结果; (3)计算二叉排序树T查找成功的平均查找长度,输出结果; (4)输入元素x,查找二叉排序树T,若存在含x的结点,则删除该结点,并作中序遍历(执行操作2);否则输出信息“x不存在”; (5) 输入元素x,查找二叉排序树T,若整棵树不存在含值为x的结点,则插入该结点,并作中序遍历(执行操作2);否则输出信息“x已经存在”。 (二)Josephu问题的实现。 Josephu问题为:设编号为1,2,… n的n个人围坐一圈,约定编号为k(1=k=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。 输入数据:n,k,m 输出:按照出列的顺序依次输出出列人的编号,编号中间相隔一个空格,每10个编号为一行。? (即每输出10个元素,要求输出一个回车符) Josephu函数要进行非法参数的判断,非法输入的情况有多种,例如: a) 输入的n、k、m的任一个小于1 输出:n,m,k must bigger than 0. b) 输入:kn 输出:k should not bigger than n. (三)迷宫问题求解 迷宫有一个入口,一个出口。一个人从入口走进迷宫,目标是找到出口。阴影部分和迷宫的外框为墙,每一步走一格,每格有四个可走的方向,探索顺序为:南、东、北、西。 输入:输入迷宫数组的行数、列数和迷宫的形状(0为可通,1为墙)。 输出:若有解,输出从入口到出口的一条路径,否则输出 there is no solution! (四)编程实现无向图的基本操作。 (1)自选存储结构,输入含n个顶点和e条边的图G; (2)求每个顶点的度,输出结果; (3)指定任意顶点x为初始顶点,对图G作DFS遍历,输出DFS顶点序列; (4)指定任意顶点x为初始顶点,对图G作BFS遍历,输出BFS顶点序列; (5)输入顶点x,查找图G:若存在含x的顶点(深度优先or广度优先),则删除该结点及与之相关连的边,并作DFS遍历(执行操作3);否则输出信息“不存在x”; (6)判断图G是否是连通图(遍历的顶点与创建时的顶点个数是否一样),输出信息“YES”/“NO”; 三、概要设计 (一)编程实现二叉排序树的创建于操作。 本程序所使用的模块及个模块间的调用关系 (二)Josephu问题的实现 本程序所使用的模块及个模块间的调用关系: (三)迷宫问题求解 本程序所使用的模块及个模块间的调用关系: (四)编程实现无向图的基本操作。 本程序所使用的模块及个模块间的调用关系: 四、详细设计 (一)编程实现二叉排序树的创建与操作 1,二叉排序树类型 typedef struct bitnode { int data; struct bitnode *lson,*rson; int count;/*计数器,用于计算平均查找长度*/ }bitnode,*bitree; 2,栈类型 typedef struct seqstack { bitree b[100]; int top; }stack; 3,栈的操作算法 int isempty(stack* s)/*判空操作*/ { if(s-top!=-1) return 1;/*若栈空返回0,否则返回1*/ else return 0; } void push(stack* s,bitree p)/*压栈操作*/ { if(s-top==100) printf(The stack is overflow!);/*若栈不满,则进行压栈操作*/ else { s-top++; s-b[s-top]=p; } } bitree pop(stack* s)/*出栈操作*/ { if(s-top==-1) printf(The stack is empty!);/*若栈不空,则进行出栈操作*/ else { s-top--; re

文档评论(0)

ctuorn0371 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档