- 1、本文档共30页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)