- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
马踏棋盘_实验报告重点讲义
西安交通大学实验报告
课程 数据结构专题实验 实验名称 马踏棋盘 第 1 页 共 9 页
系别__ 自动化 实 验 日 期 2015 年 11 月 8 日
专业班级 自动化43班 实 验 报 告 日 期 2015 年 11月 15 日
姓 名 李欣阳 学号 2140504066 报 告 退 发 ( 订正 、 重做 )
同 组 人 无 教 师 审 批 签 字
一、实验目的
通过本次试验,熟练掌握抽象数据类型栈和队列的实现,学会用栈和队列解决具体应用问题,从而体会栈和队列的特点。
二、实验内容与要求
设计一个国际象棋的马踏棋盘的演示程序,满足:将马随机放在国际象棋8×8棋盘Broad[8][8]的某方格中,马按走棋规则进行移动。可以允许回溯,最终成功走遍棋盘上64个方格。编制非递归程序,求出马的行走路线,按求出的行走路线,将数字1,2,3,···,648×8方阵,并输出该方阵。
三、问题分析
3.1 下一个位置的确定
一般来说,当马处于位置( i ,j )时,可以走到下列八个位置之一,这些位置称之为该位置的邻接位置:
( i-2,j+1 ),( i-1,j+2 ),( i+1,j+2 ),( i +2,j+1 )
( i+2,j+1 ),( i+1,j -2),( i-1,j-2 ),( i-2,j -1 )
给以上八个位置依次编号,在棋盘上显示如下图:
⑧ ① ⑦ ② Δ ⑥ ③ ⑤ ④ 图1 某位置的八个邻接位置
但是如果( i ,j )靠近 -2,-1,1,2,2,1,-1,-2}
HTry2[8]={ 1,2,2,1,-1,-2,-2,-1}
位于( i ,j )的马可以走到的新位置是在棋盘范围内的|”,并在每行输出完成之后,额外输出一行“--”即可,输出表格线时要根据具体情况调整“--”的数目即可。
动态演示的实现需要每一步都输出一次步数标记数组Init1,间隔时间调用Sleep函数。由于Init1的初始化是所有元素赋值为零,在输出该数组时难免出现没走过的空位置显示为零的情况。因此为了使输出结果简洁美观,在输出数组之前先通过if语句把所有为零的位置(尚未走过的位置)转化为空格后再输出,而非零的位置原样输出即可。
四、栈结构及基本操作
4.1 栈的说明及抽象数据类型
本实验采用栈这一线性数据结构来实现,栈是限定仅在表尾进行插入或者删除操作的线性表,表尾称为栈顶,表头称为栈底。栈的抽象数据类型及基本操作定义如下:
ADT Stack{数据对象:D={ai|ai∈ElemSet, i=1,2, …,n, n≥0}数据关系:R1={ai-1,ai|ai-1,ai∈D, i=1,2, …,n } 约定an端为栈顶,a1端为栈底。
基本操作:InitStack( S )
操作结果:构造一个空栈S。
DestroyStack ( S )
初始条件:栈S已存在。
操作结果:栈S被销毁。
Push( S, e )初始条件:栈S已存在。
操作结果:插入元素e为新的栈顶元素。Pop( S, e )
初始条件:栈S已存在且非空。操作结果:删除S的栈顶元素,并用e返回其值。
StackEmpty ( S )
初始条件:栈S已存.
操作结果:若栈S非空则返回TURE,否则返回FALSE。
}ADT Stack
4.2 顺序栈的定义
栈的顺序存储结构是利用一组连续的存储单元依次存放自栈底到栈顶的数据元素,同时设定指针top指示栈顶元素在顺序栈中的位置。顺序栈的存数示意图及C语言定义为:
typedef struct{
int stacksize;
SElemType *base;
SElemType *top;
}SqStack;//顺序栈结构体
4.3顺序栈基本操作的算法描述
(1)栈的初始化:生成一个规定大小的空表,表尾表示栈顶,表头表示栈底。
int InitStack(SqStack S){
S.base = (SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));
if(!S.base) return 0;
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return 1;
}//栈的初始化
(2)入栈操作:将元素x压入栈的top中,即顺序表表尾增加一个节点,栈顶指针后移一个节点
您可能关注的文档
- 2015中考精英英语外研版总复习课件:第36讲 疑问句和倒装句.ppt
- 马尔可夫模型介绍(从零开始).docx
- 2015中考英语 教材考点精讲一 七上 Units 1-4复习课件 人教新目标版.ppt
- 2015中考英语--动词的时态.ppt
- 马成英语语音过关lesson10.pptx
- 2015中考湘教版地理复习课件第九章中国疆域与人口(共35张PPT).ppt
- 2015中考复习形容词比较级最高级专题公开课课件.ppt
- 2015中考英语人教版教材梳理第13讲 八年级下 units 5-6.ppt
- 2015中考英语(人教)语法专题复习:专题十四 复合句(宾语从句、定语从句、状语从句)(共31张PPT).ppt
- 2015中考英语复习专项-特殊句式.doc
文档评论(0)