1、 游戏算法实践报告 目录 1 问题定义与描述 2 1.1 问题定义 2 1.2 问题描述 2 2 关键技术 2 3 数据的组织 2 3.1 数据类型定义 . 2 3.2 数据存储结构 . 3 4 总体设计 3 4.1 系统模块图 3 4.2 栈的基本操作 . 4 4.3 顺序表的基本操作 . 4 5 详细设计 4 5.1 顺序存储的线性表 . 4 6 测试结果及分析 7 7 心得体会 8 附录:程序代码 9 2 1 1 问题定义与描述问题定义与描述 1.1 问题定义 现实中很多利用顺序表,栈解决一些数学模型问题 1.2 问题描述 围绕着山顶有 10 个圆形排列的洞,狐狸要吃兔子,兔子说: “可
2、以,但必须找到我, 我就藏身于这十个洞中,你可以先到 1 号洞找我,第二次隔一个洞(即 3 号洞)找,第三 次隔两个洞(即 6 号洞)找,以后如此类推,次数不限。 ”但狐狸从早到晚进进出出 1000 次,但仍没有找到兔子,问兔子究竟藏身于哪个洞里 2.2.关键技术关键技术 顺序表一次申请多个空间,包括结构体定义的。N 为整数,这样得到的就是 N 个连续 的空间。顺序表可以利用类似于数组的形式访问,即通过下标访问。当然定义的变量类型 必须是指针类型的,很方便,当然也可以通过像链表一样的访问。单链表只是将空间分散 开了,这样的优点就是动态申请,需要多少就申请多少,一般一次申请一个空间结点,即 N=
3、1。 3 3 数据的组织数据的组织 3.1 数据类型定义 数据结构,顺序表,栈,单链表,数组。在程序设计中,为了处理方便, 把具有相 同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数 组。在 C 语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数 组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数 3 值数组、字符数组、指针数组、结构数组等各种类别。 3.2 数据存储结构 栈以顺序结构实现,队列以链表结构实现。顺序存储,大概意思就是把逻辑上相邻的结 点存储在物理位置上相邻的存储单元里,结点间逻辑关系由存储单元的邻接关系
4、来体现 主要用在线性的数据结构 4 4 总体设计总体设计 4.1 顺序表系统模块图 图 4.1 顺序表系统模块图 4.2 栈的基本操作 定义栈的顺序存取结构,分别定义栈的基本操作(初始化栈、判栈为空、入栈、出 栈等) ,通过定义函数实现。 4.3 顺序表的基本操作 在顺序存储结构实现基本操作:初始化、创建、插入、删除、查找等运算。 4 5 5 详细设计详细设计 5.1 顺序存储的线性表 (1)程序中包括哪些函数?画出函数之间的调用关系。 答:程序中包含 12 个成员函数和 1 个主函数。12 个成员函数。如下, :SqList,SqList,CreateList,Insert,Delete,G
5、etElem,Locate,Clear,Eepty,Full,Length,List Disp (2)程序中数据采用了什么样的逻辑结构、物理结构? 答:逻辑结构为依次存放线性表中的数据; 物理结构为一组地址连续的储存单元。 (3)程序中那个函数实现顺序表的创建?其中包括顺序表的初始化吗? 答:函数 SqList 用于实现顺序表的创建,不包括表的初始化。 (4)程序中哪个函数实现结点的插入?画出流程图。 答: 函数 Insert 实现结点的插入。 5 图 5.1 实现结点插入 (5)程序中哪个函数实现结点的删除?画出流程图。 答:函数 Delete 实现了结点的删除。 6 图 5.2 实现结点删
6、除 (6)程序中提供了几种元素查找方法?分别在哪个函数中实现? 答:一种是按位置查找,在 GetElem中实现;另一种是按元素查找在 Locate 中 实现。 (7)程序退出时,调用了哪个函数?该函数主要操作有哪些? 答:调用SqList 函数,该函数主要操作是:删除顺序表元素,使表长和表容量 为 0. 6 6 测试结果及分析测试结果及分析 运行程序,程序主界面如图 6.1 所示。 7 图 6.1 程序的主界面 运行结果如图 6.2 图 6.2 程序的运行结果 8 7 7 心得体会心得体会 本次课程设计,使我对数据结构这门课程有了更深入的理解。 数据结构是一 门实践性较强的课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。 我的课程设计题目关于顺序表和栈。刚开始做这个程序的时候,感到完全无从下手, 甚至让我觉得完成这次程序设计根本就是不可能的,于是开始查 阅各种资料以及参考文 献,之后便开始着手写程序,写完运行时有很多问题。特别是实现线索二叉树的删除运算 时很多情况没有考虑周全,经常运行出现错误,但通 过同学间的帮助最终基本解决问题。 在本