数据结构课程设计.doc
第1页课程设计说明书设计题目:数据结构课程设计专业:电子信息科学与技术班级:2008级1班设计人:山东科技大学年月日第2页课程设计任务书学院:专业:班级:姓名:一、课程设计题目:数据结构课程设计二、课程设计主要参考资料:(1)(2)(3)三、课程设计应解决的主要问题:(1)约瑟夫环问题(2迷宫问题(2)三元组表示的稀疏矩阵的转置、加法和乘法实现(3)前缀算术表达式转换及表达式计算(4)有向无环图每个顶点出发的最短路径及其长度;(5)2-路归并排序四、课程设计相关附件(如图纸、软件等):五、任务发出日期:课程设计完成日期:指导教师签字:系主任签字:第3页指导教师对课程设计的评语指导教师签字:年月日第4页设计1约瑟夫环问题一、需求分析一、具体目标包括:1实现单循环链表的初始化2理解约瑟夫环的定义,用循环找到每次报数人的序号3.从单循环链表中删除节点,并判断链表空与非空的临界条件。二、单向循环链表的抽象数据类型定义为:ADTCircleList数据对象:Dai|aiElemset,i=1,2,n,n0数据关系:R=<ai-1,ai>,<an,a1>|ai-1,aiD,i=2,n基本操作:LinkInitList(intn)操作结果:构造一个含有n个元素的单向循环链表。三、问题描述设编号为1,2,n(n>0)个人按顺时针方向围坐一圈,每人持有一个正整数密码。开始时任意给出一个报数上限值m,从第一人开始顺时针方向自1起顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他在顺指针方向上的下一个人起重新自1起顺序报数;下去,直到所有人全部出列为止。要求设计一个程序模拟此过程。第5页四、基本要求利用单向循环链表存储结构模拟此过程,按照出列的顺序印出个人的编号。二、概要设计一、本程序分三个模块1)主模块Voidmain()初始化;接受命令;处理命令;2)单向循环表单元模块,实现单向循环链表的抽象数据类型功能;3)节点结构单元模块,定义单向循环链表的节点结构。三、详细设计1、构建一个单循环链表算法流程图1第6页2主模块实现算法从头结点开始,根据报数上限找到下一个出列人的序号,并读出该人的密码作为新的报数上限,从此节点的下一个节点开始进行新的查找。通过指针依次删除出列人相应的节点,直到该链表中无节点,退出循环。P指向申请空间i<=nP指向申请空间i=1head=qP->next=qp=qp->next=L结束第7页四、运行结果及分析测试用例1:(一般数据)输入报数上限j<nm=1?i<mL=L->nexti=i+1=1q=L->next输出q的numberm<0结束m=q->next->number删除q节点初始化一个单循环链表