数据结构课程设计说明书

合集下载

数据结构的课程设计

数据结构的课程设计

数据结构的课程设计一、课程目标知识目标:1. 理解数据结构的基本概念,掌握线性表、树、图等常见数据结构的特点与应用场景。

2. 学会分析不同数据结构的存储方式和操作方法,并能运用到实际问题的解决中。

3. 掌握排序和查找算法的基本原理,了解其时间复杂度和空间复杂度。

技能目标:1. 能够运用所学数据结构知识,解决实际问题,提高编程能力。

2. 能够运用排序和查找算法,优化程序性能,提高解决问题的效率。

3. 能够运用数据结构知识,分析并解决复杂问题,培养逻辑思维能力和创新意识。

情感态度价值观目标:1. 培养学生对数据结构学科的兴趣,激发学习热情,形成主动探索和积极进取的学习态度。

2. 增强学生的团队协作意识,培养合作解决问题的能力,提高沟通表达能力。

3. 培养学生的抽象思维能力,使其认识到数据结构在计算机科学中的重要性,激发对计算机科学的热爱。

本课程针对高中年级学生,结合学科特点和教学要求,注重理论与实践相结合,培养学生的编程能力和逻辑思维能力。

通过本课程的学习,使学生能够掌握数据结构的基本知识,提高解决实际问题的能力,同时培养良好的学习态度和价值观。

在教学过程中,将目标分解为具体的学习成果,以便进行后续的教学设计和评估。

二、教学内容1. 数据结构基本概念:介绍数据结构的概念、作用和分类,重点讲解线性结构(线性表、栈、队列)和非线性结构(树、图)的特点。

2. 线性表:讲解线性表的顺序存储和链式存储结构,以及相关操作(插入、删除、查找等)。

3. 栈和队列:介绍栈和队列的应用场景、存储结构及相关操作。

4. 树和二叉树:讲解树的定义、性质、存储结构,二叉树的遍历算法及线索二叉树。

5. 图:介绍图的定义、存储结构(邻接矩阵和邻接表)、图的遍历算法(深度优先搜索和广度优先搜索)。

6. 排序算法:讲解常见排序算法(冒泡排序、选择排序、插入排序、快速排序等)的原理、实现及性能分析。

7. 查找算法:介绍线性查找、二分查找等查找算法的原理及实现。

数据结构课程设计(5篇)

数据结构课程设计(5篇)

数据结构课程设计(5篇)第一篇:数据结构课程设计课程设计说明书设计名称:数据结构课程设计题目:设计五:二叉树的相关操作学生姓名:专业:计算机科学与技术班级:学号:指导教师:日期: 2012 年 3 月 5 日课程设计任务书计算机科学与技术专业年级班一、设计题目设计五二叉树的相关操作二、主要内容建立二叉树,并对树进行相关操作。

三、具体要求1)利用完全二叉树的性质建立一棵二叉树。

(层数不小于4层)2)统计树叶子结点的个数。

3)求二叉树的深度。

4)能够输出用前序,中序,后序对二叉树进行遍历的遍历序列。

四、进度安排依照教学计划,课程设计时间为:2周。

本设计要求按照软件工程的基本过程完成设计。

建议将时间分为三个阶段:第一阶段,根据题目要求,确定系统的总体设计方案:即系统包括哪些功能模块,每个模块的实现算法,并画出相应的流程图.同时编写相应的设计文档;第二阶段,根据流程图编写程序代码并调试,再将调试通过的各个子模块进行集成调试;第三阶段,归纳文档资料,按要求填写在《课程设计说明书》上,并参加答辩。

三个阶段时间分配的大概比例是:35: 45: 20。

五、完成后应上交的材料本课程设计要求按照学校有关规范的要求完成,在课程设计完成后需要提交的成果和有关文档资料包括课程设计的说明书,课程设计有关源程序及可运行程序(含运行环境)。

其中课程设计说明书的格式按学校规范(见附件),其内容不能过于简单,必须包括的内容有:1、课程设计的基本思想,系统的总功能和各子模块的功能说明;2、课程设计有关算法的描述,并画出有关算法流程图;3、源程序中核心代码的说明。

4、本课程设计的个人总结,主要包括以下内容:(1)课程设计中遇到的主要问题和解决方法;(2)你的创新和得意之处;(3)设计中存在的不足及改进的设想;(4)本次课程设计的感想和心得体会。

5、源代码要求在关键的位置有注释,增加程序的可读性。

程序结构和变量等命名必须符合有关软件开发的技术规范(参见有关文献)。

数据结构课程设计说明书

数据结构课程设计说明书

计算机本科《数据结构与C语言》课程设计任务书一、设计目的1.学习和巩固C 语言及数据结构的基本知识。

2.充分体会在程序设计中数据的重要作用,学会在程序设计中运用数据结构的相关知识解决问题。

二、设计基本要求1.符合课题要求,实现相应功能;2.要求界面友好美观,操作方便易行;3.注意程序的实用性、安全性;4.随时记录设计情况(备查,也为编写设计说明书作好准备);5.设计成果:设计说明书一份(附录:设计说明书格式及要求);源程序(能编译成可执行文件并能正常运行)。

三、设计组织方法1.分组选题:每班分若干组,每组一个课题(可根据课题工作量大小,合理分配人数),每组设组长一名,负责该组设计工作的协调、分工等。

2.设计过程:1)按组讨论、确定设计方案,确定程序模块,并进行明确分工;2)各人分别完成自己的设计任务,编写源程序,并调试好;3)程序汇总、编译。

四、设计时间第17-18周,共计二周五、设计课题1.飞机订票系统实现如下功能:录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。

修改航班信息:当航班信息改变可以修改航班数据文件要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;2.宿舍管理查询软件为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求:录入数据,数据的修改,查询: A.按姓名查询 B.按学号查询 C.按房号查询,显示任一查询结果,统计等功能3.学生成绩管理系统实现功能:程序菜单功能或详细的提示功能,学生信息输入、输出、添加、删除、查询(按学号及姓名)、排序(按姓名,平均成绩,总成绩)、文件保存、文件读入。

数据结构设计说明书

数据结构设计说明书

[键入公司名称]设计说明书航空订票系统软件***班***2018/1/9[在此处键入文档摘要。

摘要通常为文档内容的简短概括。

在此处键入文档摘要。

摘要通常为文档内容的简短概括。

]设计说明书设计说明书 (1)1.程序系统的结构 (2)2.程序1 (标识符)设计说明 (2)1)程序描述 (2)2)功能 (2)3)性能 (2)4)输入项 (2)5)输出项 (2)6)算法 (3)7)流程逻辑 (3)8)接口 (3)9)存储分配 (3)10)注释设计 (3)11)限制条件 (3)12)测试计划 (3)13)尚未解决的问题 (3)3.程序2 (标识符)设计说明 (4)1 .程序系统的结构用一系列图表列出本程序系统内的每个程序(包括每个模块和子程序)的名称、标识符和它们之间的层次结构关系。

实现的功能:2.程序1 (标识符)设计说明从本节开始,逐个地给出各个层次中的每个程序的设计考虑。

以下给出的提纲是针对一般情况的。

对于一个具体的模块,尤其是层次比较低的模块或子程序,其很多条目的内容往往与它所隶属的上一层模块的对应条目的内容相同,在这种情况下,只要简单地说明这一点即可。

1)程序描述给出对该程序的简要描述,主要说明安排设计本程序的目的意义,并且,还要说明本程序的特点(如是否有返回值?等)。

2)功能说明该程序应具有的功能,可采用输入一处理一输出的形式。

3)性能说明对该程序的全部性能要求,包括对精度、灵活性和时间特性的要求。

4)输入项给出对每一个输入项的特性,包括名称、标识、数据的类型和格式、数据值的有效范围、输入的方式。

数量和频度、输入媒体(例如键盘,文件等、输入数据的来源和安全保密条住笺笺件等等。

5)输出项给出对每一个输出项的特性,包括名称、标识、数据的类型和格式,数据值的有效范围,输出的形式、数量和频度,输出(例如显示器,文件等、对输出图形及符号的说明、安全保密条件等等。

6)算法详细说明本程序所选用的算法,具体的计算公式和计算步骤。

数据结构课程设计说明书

数据结构课程设计说明书

车厢调度问题摘要:实现栈的基本操作,即实现类型。

程序对栈的任何存取,即更改,读取和状态判别等操作,必须借助于基本操作。

在操作过程中的任何状态下都有两种可能的操作:“入”“出”。

每个状态下处理问题的方法都是相同的,具有递归特性。

关键字:栈递归打印0.引言《数据结构》是计算机科学与技术、软件工程及相关学科的专业基础课,也是软件设计的技术基础。

《数据结构》课程的教学要求之一是训练学生进行复杂的程序设计的技能和培养良好程序设计的风格,其重要程度决不亚于理论知识的传授,因此课程设计环节是一个至关重要的环节,是训练学生从事工程科技的基本能力,是培养创新意识和创新能力的极为重要的环节。

基本要求如下:(1) 熟练掌握基本的数据结构;(2) 熟练掌握各种算法;(3) 运用高级语言编写质量高、风格好的应用程序。

1.需求分析(1)这个实验要求我用栈实现车厢调度.(2)车厢的个数是由用户输入的.(3)程序会自动给车厢进行从1到 n的编号.(4)用户输入车厢个数后,程序打印出所有可能的车厢出站顺序.2.数据结构设计在这个程序中存储结构是栈,对于栈的声明和定义如下:typedef struct SqStack{int *top; /*栈顶指针*/int *base;/*在栈构造之前和销毁之后.base的值为NULL*/int stacksize; /*当前分配的存储空间*/}SqStack; /*顺序栈的结构体声明和定义*/3.算法设计3.1 对算法的简单描述这个实验中, 要求用到栈. 实现栈的基本操作,即实现类型。

程序对栈的任何存取(即更改,读取和状态判别等操作)必须借助于基本操作。

在操作过程中的任何状态下都有两种可能的操作:“入”“出”。

每个状态下处理问题的方法都是相同的,具有递归特性。

栈实现是方便的无论如何调度,我们的操作都是入栈和出栈,设定入栈为1,出栈为-1,对n列车厢有2n次这样的操作,例如n=4,则有操作1111-1-1-1-1、1-11-11-11-1等.所以还要构造一个操作命令队列trainlist[]。

数据结构课程设计(附代码)-数据结构设计说明

数据结构课程设计(附代码)-数据结构设计说明

应用技术学院课程设计报告课程名称《数据结构课程设计》设计题目猴子选大王;建立二叉树;各种排序;有序表的合并;成绩管理系统;院系计算机科学与信息工程专业计算机科学与技术班级学号指导教师日期一.目的与要求1. 巩固和加深对常见数据结构的理解和掌握2. 掌握基于数据结构进行算法设计的基本方法3. 掌握用高级语言实现算法的基本技能4. 掌握书写程序设计说明文档的能力5. 提高运用数据结构知识及高级语言解决非数值实际问题的能力二.课程设计容说明1. 项目一(1) 对设计任务容的概述学生成绩管理**任务:要现对学生资料的录入、浏览、插入和删除等功能。

输入:设学生成绩以记录形式存储,每个学生记录包含的信息有:学号和各门课程的成绩,设学生成绩至少3门以上。

存储结构:采用线性链式结构。

(2) 详细设计LinkList *create():输入学生成绩记录函数;void print(LinkList *head):显示全部记录函数LinkList *Delete(LinkList *head):删除记录函数LinkList *Insert(LinkList *head):插入记录函数void menu_select():菜单选择void ScoreManage():函数界面(3) 程序流程图(4) 程序模块及其接口描述该程序可以分为以下几个模块:1、菜单选择:void menu_select();提供五种可以选择的操作,在main函数过switch语句调用菜单menu_select()函数,进入不同的功能函数中完成相关操作。

2、输入功能:LinkList *create();通过一个for循环语句的控制,可以一次完成无数条记录的输入。

并将其存入链表。

3、输出功能:void print(LinkList *head);通过一个while的循环控制语句,在指针p!=NULL时,完成全部学生记录的显示。

知道不满足循环语句,程序再次回到菜单选择功能界面。

《数据结构》课程设计说明书

《数据结构》课程设计说明书设计题目:贪吃蛇的循环队列实现姓名:陈诚班级:计05-2班学号: 28指导教师:顾泽元 _一、设计题目游戏:《贪吃蛇》的队列实现.二、问题描述现有一个大小为Map_Long * Map_Width的方格地图(每一方格尺寸为BoxSize * BoxSize),在地图中间处有一个长度为3*3方格的小蛇。

一旦游戏开始后:地图上随机位置处生成一只大老鼠(占一个方格);小蛇自动朝着一个方向运动,并且用户可以通过按:上、下、左、右键改变小蛇的运动方向。

当小蛇吃到大老鼠,即蛇运动到它的蛇头所在坐标等于老鼠所在坐标时,小蛇长度增加1。

如此往复,随着小蛇变成了大蛇,游戏难度也随之增加,但当小蛇吃到自己身体或者头部撞到障碍物时,将扣去小蛇的生命值,直到小蛇生命为0,游戏失败。

若在游戏中,小蛇吃光所有的老鼠,则游戏胜利。

三、概要设计1、游戏地图以及游戏主要数据表示:MAP[Map_Long][Map_Width]-----将屏幕的某一块矩形区域划分成Map_Long * Map_Width(40*20)个格,定义地图数组MAP[Map_Long][Map_Width],用以存放如同地面、蛇身、老鼠、障碍物的信息。

ElemType---结构体类型,包含两个int变量,存放蛇一格身体的所在位置。

CirQueue---结构体类型,循环队列。

存放队列中,元素的地址以及队列头尾位置。

Snake------结构体类型,存放蛇的蛇头坐标、方向、生命值、蜕壳控制参数。

Food————结构体类型,存放小老鼠所在坐标、颜色等信息。

2、方案设计:(1)实现封面、界面绘制。

(2)实现读取地图的功能。

(3)实现蛇的方向控制以及游戏的暂停、速度设置、退出等功能。

(4)实现蛇的移动、长长。

(5)实现蛇的越界折返(运动到地图边界后,蛇从另一侧移出)。

(6)实现随机位置产生食物。

(7)实现读取地图的功能。

(8)实现撞到障碍物,扣除相应生命数值。

数据结构课程设计说明书模板

目录1.设计目的与任务 (2)2.需求分析 (2)3.设计 (2)3.1设计思想 (2)3.2设计表示 (3)4.用户手册 (5)5.测试数据及测试结果 (5)6.课程设计总结 (6)程序清单 (6)1.设计目的与任务2.需求分析模拟某校九层教学楼的电梯系统。

该楼有一个自动电梯,能在每层停留。

九个楼层由下至上依次称为地下层、第一层、第二层、……第八层,其中第一层是大楼的进出层,即是电梯的“本垒层”,电梯“空闲”时,将来到该层候命。

乘客可随机地进出于任何层。

对每个人来说,他有一个能容忍的最长等待时间,一旦等候电梯时间过长,他将放弃。

模拟时钟从0开始,时间单位为0.1秒。

人和电梯的各种动作均要消耗一定的时间单位(简记为t),比如:有人进出时,电梯每隔40t测试一次,若无人进出,则关门;关门和开门各需要20t;每个人进出电梯均需要25t;如果电梯在某层静止时间超过300t,则驶回1层侯命。

而题目的最终要求输出时:按时序显示系统状态的变化过程,即发生的全部人和电梯的动作序列。

3.设计3.1设计思想(1)数据结构设计本题中的电梯的变化,是一个动态变化的过程,要在动态过程中实现正常跳转,首先要确定各种跳转的状态,因而这里我使用枚举类型来表示电梯的各种状态的:enum {up,down,stop,home}State(home);同时初始化最初状态为电梯在本垒层。

而在电梯的运行过程中对于乘客来说,显然有一个进入电梯与出电梯的队列,因而在这里我是用的链表来实现这个过程的,同时用结构体来保存该乘客的信息:typedef struct passage{int now;//乘客当前所在的位置int dis;//乘客的目地地int wait;//最长的等待的时间int waitnow;//已经等待的时间struct passage *next;}Passage;虽然电梯中的状态是由枚举类型来实现的,但是在整个程序的运行过程中,我还是为电梯设置了一个结构体类型,以便保存更多的信息:typedef struct lift{int count_C;//计数电梯已到达的层数int count_A;//系统的总时间计数器记得必须初始化为0int flag_in[High];//九个楼层有无请求的标志哪个楼层如果有请求该标志置1int num;//等待队列中的人数记得要进行初始化为0int people;//电梯中人数int flag_out[High];}Lift;(2)算法设计顾名思义本程序在运行的过程中用到的算法便是—“电梯算法”,电梯算法借鉴了磁盘寻道C-LOOK算法,即电梯向一个方向运行,直到这个方向上没有服务为止。

数据结构课程设计

JOSEPH环1、课程设计目的(1)较熟练地掌握C语言的基本内容及程序设计的基本方法与编程技巧。

(2)较熟练地掌握在系统上编辑、编译、连接和运行C程序的方法。

(3)通过设计一个完整程序,掌握数据结构的算法编写、类C语言算法转换成C程序并上机调试的基本方法。

2、课程设计方案论证2.1 问题描述编号为1,2,……,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正数)。

一开始任选一个整数作为报数上限值,从第一个人开始顺时针自1开始顺序报数,报到m的人出列,践踏的密码之作为新的m值,从它在顺时针方向上的下一个人开始重新从1开始报数,如此下去,直到所有人全部都出列为止。

试设计一个程序,求出出列顺序。

利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。

测试数据:m的初值为20,n=7 ,7个人的密码依次为3,1,7,2,4,7,4,首先m=则正确的输出是什么?输入数据:建立输入处理输入数据,输入m的初值,n ,输入每个人的密码,建立单循环链表。

输出形式:建立一个输出函数,将正确的输出序列。

2.2 数据结构设计此joseph环运用单向的数据结构循环链表存储结构模拟此过程。

数据的逻辑结构为线性结构;数据的物理结构分为链式结构,顺序存储的结构特点是逻辑顺序与物理顺序一致,可以随机存储,但有缺点就是插入和删除元素要伴随着大量元素的移动,并且存储空间是预先分配的,不灵活,存在空间浪费,表的存储空间难扩充,存储密度等于1。

通过对约瑟夫问题的分析,我认为单循环链表能较好的解决问题。

在建立循环链表时,输入决定约瑟夫环的大小。

与匹配的结点数也会变化,因此要进行动态内存分配。

而链式存储结构的特点是存储空间不一定连续,逻辑关系是由指针来实现的,逻辑上相邻,但物理上不一定相邻,非随即存取即访问任何一个元素的时间不同,存储空是动态分配的,并且存储密度小于1。

编号为1,2,……,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。

数据结构程序设计说明文档

数据结构课题报告说明书数据结构课题报告指导教师:揭安全组长:肖清泉组员:朱智红、苏彦洲班级:计算机科学与技术(正大)专业:计算机科学与技术(师范)时间: 2015-01-20——2015-03-01课程设计题目:图书管理系统图书馆管理系统或许众所周知,任何一个学校,有关单位似乎都需要这个类似的系统以此管理图书与读者借阅情况。

借此,我们合作也做出一个系统,尽管可能有些逊色,但感觉还是可以。

本系统总结了前人牛人的经验,剔除了其中的不足创造了自己独有的特色。

传承了牛人的优点,经过我们仔细的观摩,思考后创造此系统。

“书上得来终觉浅,要知此事需躬行。

”是呀!在没亲身动手去编写程序时,我总觉得我会了。

书本上的我都懂了。

可我真的懂了吗?答案是否定的。

在编写过程中,会出现很多的问题,而这些问题你是在书本上是接触不到的。

只有发现问题,解决问题,你才会有提高。

在过去人们对信息管理的主要方式是基于文本、表格等纸质的手工处理之上的,而用手工进行图书借阅管理存在多种弊端,其中包括图书过于繁多,包含很多的信息数据的管理对于图书借阅情况如:借阅天数、超过限定借阅时间等等的统计和核实,往往采用对借阅卡的人工查询进行,对借阅天数等用人工计算、手抄进行。

信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。

总的来说缺乏系统、规范的管理手段人们操控起来是很困难的;因此,使用电子化的管理手段将是大势所趋,建立一个图书管理系统也是图书管理部门提高工作效益的有效手段。

系统能够合理高效地利用图书资源,使得图书借阅更加的科学合理。

第一章需求分析与目的概述 ---------- 041.1 需求分析概述----------------------- 041.2 系统功能分析----------------------- 04 第二章系统设计----------------------043.1 系统功能模块设计-------------------04 3.1.1 信息录入-------------------053.1.2 学生菜单-------------------053.1.3 老师菜单-------------------063.1.4 图书管理员菜单-------------073.1.5 系统管理员菜单-------------093.2 逻辑结构设计-----------------------093.2.1 系统结构体设计-------------103.2.2 系统业务流程设计------------133.2.3 数据结构逻辑设计-----------14 第三章系统的实施-----------------------294.1 运行相关界面-----------------------294.1.1 登入界面---------------------294.1.2 学生界面----------------------314.1.3 教师界面----------------------314.1.4 图书管理员界面----------------324.1.5 系统管理员界面----------------324.2 系统测试---------------------------334.2.1 学生测试----------------------334.2.2 教师测试----------------------334.3.4 图书管理员测试----------------344.4.4 系统管理员测试----------------34 第四章总结与体会-----------------------34第五章参考文献--------------------------35第一章需求分析与目的概述1.1 需求分析概述我们组设计的是“图书管理系统”,主要是针对住宿学生个人信息的管理,适用对象主要是学校,以方便学校对住宿学生的管理。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

*******************实践教学*******************兰州理工大学计算机与通信学院2014年秋季学期数据结构课程设计题目:猴子吃桃子问题;跳马问题;通过单字符置换可以将一个单词改为另一个单词专业班级:12级信息与计算科学(2)班姓名:林承勇学号:12540236指导教师:包仲贤成绩:目录摘要 (1)一.猴子吃桃问题 (2)1.采用类语言定义相关的数据类型 (2)2.算法设计 (2)3.调试分析 (3)4.测试结果 (4)5.源程序(带注释) (6)二.跳马问题 (10)1.采用类语言定义相关的数据类型 (10)2.算法设计 (10)3.调试分析 (11)4.测试结果 (11)5.源程序(带注释) (13)三.通过单字符置换可以将一个单词改为另一个单词 (16)1.采用类语言定义相关的数据类型 (16)2.算法设计 (16)3.调试分析 (18)4.测试结果 (18)5.源程序(带注释) (19)总结 (23)参考文献 (24)致谢 (25)摘要本程序主要主要解决猴子吃桃问题,跳马问题,通过单字符置换可以将一个单词改为另一个单词。

猴子吃桃问题是分别采用数组数据结构,链式数据结构以及递归方法根据猴子每天吃的桃子数来求解一群猴子摘的桃子数。

跳马问题也称为骑士周游问题,是算法的设计中的经典问题。

如果有这样一种走法,则称所走的这条线为马的周游路线。

在8*8的方格棋盘中马的行走规则从棋盘的某一方格出发,开始在棋盘上周游,如果能不重复地走遍棋盘上的每一个方格,这样的一条周游路线在数学上被称为国际象棋棋盘上马的哈密尔顿链。

通过单字符置换可以将一个单词改为另一个单词是假设存在一个5字母单词的字典,给出一个算法确定单词A是否可以通过一系列的单字符置换转换为单词B,并且如果可以的话,输出相应的单词序列。

正如bleed通过序列bleed、blend、blond、blood转换为blood。

这些程序主要功能是加深我们对算法与数据结构中存储,线性表和栈的理解。

让我们对算法与数据结构有个更深刻的认识。

关键词:猴子吃桃;跳马;字符转换;数据结构一.猴子吃桃问题有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。

用多种方法实现求出原来这群猴子共摘了多少个桃子。

要求:1)采用数组数据结构实现上述求解;2)采用链式数据结构实现上述求解;3)采用递归实现上述求解。

1.采用类语言定义相关的数据类型typedef struct Node{int i;int k;//数据域struct Node *next;//指针域}Node,*PNode;//定义一个指针用于链表求解2.算法设计1.一维数组解决。

建立一个一维数组a[10]从第九天开始算起令a[9]=1利用for循环计算前八天猴子吃的桃子数目并同时将后一天吃的桃子数赋值到前一天。

最后即可得出猴子一共吃的桃子数。

2.递归函数解决:定义一个整形函数DiGui使用if函数控制是否调用函数本身。

桃子数等与一这说明第九天吃了一个桃子函数便可以结束。

如果桃子数不为一则一直调用函数本身知道调用结束。

3链式数据结构解决:定义头指针p1,p2指针指向头结点。

P2指针负责传值进行循环。

利用for函数进行循环。

并将后一天的之赋值给前一天。

最后便可得到猴子吃的总的桃子数。

主函数控制各子函数的调用流程如图1-1所示图1-1 主控制程序流程图3.调试分析a 、调试中遇到的问题及对问题的解决方法;根据第十天所剩桃子个数,采用倒推方法,递归的求出第九天,第八天,第七天….直到算出刚开始猴子拥有桃子的总数。

解决方法主要是用递归算法采用数组存储方法。

b 、算法的时间复杂度和空间复杂度。

通过1、2、3数字键选择计算方法时间复杂度为O(n),空间复杂度为O(1)4321退出DiGuiShuZuLianBia o结束开始输入n判断n请输入正确的选择N4.测试结果1)执行程序进入主菜单,如图1-1所示图1-2 主菜单2)输入1用数组方法求解,如图1-2所示图1-3数组求解3)输入2用链表求解,如图1-3所示图1-4 链表求解4)输入3用递归方法求解,如图1-4所示图1-5递归求解5)输入4退出程序,如图1-5所示图1-6 退出界面5.源程序(带注释)#include<stdio.h>#include<stdlib.h>typedef struct Node{int i;int k;//数据域struct Node *next;//指针域}Node,*PNode;//定义一个指针用于链表求解int ShuZu()//数组求解{int i,a[10];a[9]=1;for(i=8;i>=0;i--)a[i]=(a[i+1]+1)*2;}int DiGui(int i,int j,int k)//递归求解{if(j==i) return k;k=(k+1)*2;DiGui(i,j-1,k);}int LianBiao()//链表求解{int i;PNode p1,p2;if((p1=(PNode)malloc(sizeof(Node)))==NULL){ //生成新的结点printf("分配内存失败!");exit(0);}p1->i=10;p1->k=1;p1->next=NULL;for(i=9;i>0;i--){if((p2=(PNode)malloc(sizeof(Node)))==NULL){printf("分配内存失败!");exit(0);}p2->i=9;p2->k=(p1->k+1)*2;p2->next=NULL;free(p1);p1=p2;}}int main()//主函数{char n;int i,j,k;i=ShuZu();j=DiGui(1,10,1);k=LianBiao();for(;;){printf("\t******************* 欢迎进入猴子吃桃问题***********************\n");printf("\t************************1.数组方法*******************************\n");printf("\t************************2.链表方法*******************************\n");printf("\t************************3.递归方法*******************************\n");printf("\t************************4. 退出*******************************\n");printf("\t*****************************************************************\n");printf("\t输入选项(1~4):");scanf("%s",&n);switch (n){case '1':printf("\n");printf("\t\t\t\t数组方法得出的总桃子数为:%d\n",i);printf("\n");printf("\t\t\t\t*如需继续进入主菜单请按回车键*\n");break;case '2':printf("\n");printf("\t\t\t\t链表方法得出的总桃子数为:%d\n",k);printf("\n");printf("\t\t\t\t*如需继续进入主菜单请按回车键*\n");break;case '3':printf("\n");printf("\t\t\t\t递归方法得出的总桃子数为:%d\n",j);printf("\n");printf("\t\t\t\t*如需继续进入主菜单请按回车键*\n");break;case '4':printf("\n");printf("谢谢使用本系统^o^\n");exit(0);break;default:printf("\n");printf("\n请键入一个正确的选择");printf("\n");printf("\t\t\t\t*如需继续进入主菜单请按回车键*\n");break;}getchar();getchar();system("cls");}}二.跳马问题要求在64个国际象棋格子,任意位置放一个马,如何不重复地把格子走完。

1.采用类语言定义相关的数据类型#include <stdio.h> typedef struct DataType {int board[8][8]; //定义一个int 的二位数组board int step;/*走的步数*/int test;/*可以遍历成功的次数*/ }SeqList; SeqList L; int start;int deltar[] = {-2, -1, 1, 2, 2, 1, -1, -2};int deltac[] = { 1, 2, 2, 1,-1,-2, -2, -1};/*马的可能走法对当前位置的横纵增量*/2.算法设计该问题分为两步首先在8*8的棋盘上的任意一个位置上放一个马(r ,c ),求马所在位置的出口数。

其次选择出口最少的那个位置。

函数执行流程图如 图2-1所示图2-1 函数执行流程图Main ()输入r ,c 表示马在棋盘上的初始位置检测是否有下一出口 (k = next(r, c)) == -1)此路不通此路可通过输出满足该问题的一种正确解法,程序结束。

初始化数组表示棋盘3.调试分析a、调试中遇到的问题及对问题的解决方法对于跳马问题,一般情况下,可以采用回溯法找解,但对于该问题来说,只要找到一种解法即可。

相关文档
最新文档