




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计设计题目数独解谜程序学生姓名学号专业班级指导教师2015年4月20日目 录一、使用资料2二、设计内容11三、详细设计说明12四、软件使用说明13五、附录:部分程序清单(带有较详细的注释)19一、 使用资料C+中栈结构建立与操作什么是栈结构栈结构是从数据的运算来分类的,也就是说栈结构具有特殊的运算规则,即:后进先出。我们可以把栈理解成一个大仓库,放在仓库门口(栈顶)的货物会优先被取出,然后再取出里面的货物。而从数据的逻辑结构来看,栈结构起始就是一种线性结构。如果从数据的存储结构来进一步划分,栈结构包括两类:顺序栈结构:即使用一组地址连续的内存单元依次保存栈中的数据。在程序中,可以定义一个指定大小的结构数组来作为栈,序号为0的元素就是栈低,再定义一个变量top保存栈顶的序号即可。链式栈结构:即使用链表的的形式保存栈中各元素的值。链表首部(head指针所指向元素)为栈顶,链表尾部(指向地址为NULL)为栈底。在栈结构中只能在一端进行操作,该操作端称为栈顶,另一端称为栈底。也就是说,保存和取出的数据都只能从栈结构的一端进行。从数据的运算角度来分析,栈结构是按照“后进先出”的原则处理结点数据的。在栈结构中,只有栈顶元素是可以访问的,栈结构的数据运算也是非常简单。一般栈结构的基本操作只有两个:入栈(Push):将数据保存到栈顶的操作。进行入栈操作前,先修改栈顶指针,使其向上移一个元素位置,然后将数据保存到栈顶指针所指的位置。出栈(Pop):将栈顶数据弹出的操作。通过修改栈顶指针,使其指向栈中的下一个元素。接下来,我们使用C+语言建立顺序栈,并完成顺序栈结构的基本运算准备数据准备在栈操作中需要用到的变量及数据结构等。#define MAXLEN 50struct DATAstring name;int age;struct StackTypeDATA dataMAXLEN+1;int top;定义栈结构的长度MAXLEN,栈结构的数据元素类型DATA,以及栈结构的数据结构StackType。在数据结构StackType中,data为数据元素,top为栈顶的序号。当top=0时,表示栈为空,当top=MAXLEN时表示栈满。数组元素都是充下标0开始的,这里为了讲述和理解方便,我们从下标1开始记录数据结点,下标0的位置不用。初始化栈结构在使用栈结构之前,首先需要创建一个空的顺序栈,也就是初始化顺序栈。顺序栈的初始化操作如下:(1)按照符号常量MAXLEN指定大小申请一片内存空间,用来保存栈中的数据(2)设置栈顶指针的值为0,表示一个空栈。示例代码如下:StackType *STInit()StackType *p;if(p=new StackType)/申请栈空间 p-top=0;/设置栈顶为0return p;/返回栈顶指针 return NULL;首先用new申请内存,然后设置栈顶为0,然后返回申请内存的首地址,申请失败返回NULL;判断空栈判断栈结构是否为空,如果是空栈,则表示该栈结构中没有数据,此时可以进行入栈操作,但是不可以进行出栈操作。示例代码如下:int STIsEmpty(StackType *s)int t;t=(s-top=0);/通过栈顶的值进行判断return t; 输入参数s为一个指向操作的栈的指针。根据栈顶指针top判断是否为0,判断栈是否为空。判断满栈判断栈结构是否为满。如果是满栈,则表示该栈结构中没有多余的空间来保存额外数据。此时不可以进行入栈操作,但是可以进行进栈操作。示例代码如下:int STIsFull(StackType *s)int t;t=(s-top=MAXLEN);return t; 输入参数s为一个指向操作的栈的指针。根据栈顶指针top判断是否和MAXLEN相等,判断栈是否已满。清空栈清空栈就是栈中所有的数据被清除。 示例代码如下: void STClear(StackType *s)s-top=0;将栈顶指针top设置为0,表示执行清空栈操作。(这里只是逻辑上将栈中数据清空,实际上只是将top设置为0,以后再添加数据会覆盖原来的数据)释放空间释放空间是释放栈结构所占用的内存单元,使用delete释放用new运算符申请的内存空间。示例代码如下:void STFree(StackType *s)delete s;在程序中直接调用delete运算符释放已分配的内存空间。一般在不需要使用栈结构时调用该函数,特别是在程序结束的时候。入栈入栈(Push)是栈结构的基本操作,主要操作是将数据元素保存到栈结构。入栈操作的具体步骤如下:(1)首先判断栈顶top,如果top大于等于MAXLEN,则表示溢出,进行出错处理。否则执行以下操作。(2)设置top=top+1(栈顶指针加1,指向入栈地址)(3)将入栈呀U尿素保存到top指向的位置。示例代码如下:int PushST(StackType *s,DATA data)if(s-top+1)MAXLEN)cout栈溢出data+s-top=data;/将元素压入栈 return 1;输入参数s为一个指向操作的栈的指针,输入参数data是需要入栈的数据元素。程序首先判断栈是否溢出,如果溢出就给出警告,不进行入栈操作,否则修改栈顶指针,即top先加1,然后将data放到top现在指向的数据单元。出栈出栈(Pop)是占据诶狗的基本操作,主要操作与入栈相反,它是从栈顶弹出一个数据元素,出栈操作的具体步骤如下:(1)首先判断栈顶top,如果top等于0,则表示为恐慌在哪,进行出错处理。否则执行下面的操作。(2)将栈顶指针top所指向的位置的元素返回(实际是返回的指针)(3)将top的减1,指向栈的下一个元素,原来栈顶的元素被弹出。DATA * PopST(StackType *s)if(s-top=0)cout栈为空,不能再输出!datas-top-);当栈中有数据时,该函数返回值是一个指向DATA类型数据的指针。读取点结构读取点结构也就是读取栈结构中结点的数据。由于栈结构只能在一端进行操作,因此这里的读操作其实就是读站点的数据。需要注意的是,读节点数据的操作和出栈操作不同。读结点操作仅仅是显示栈顶结点数据的内容,而出栈操作则将栈顶数据弹出。示例代码如下:DATA *PeekST(StackType *s)if(s-top=0)cout栈已空datas-top);对比出栈的示例代码,不难发现读取点结构同样返回了栈顶结点的地址,但是却没有使top减1.二、设计内容 1、 开发一款“数独”计算程序规则:将数字1-9放置在每个小格里,使得每一行、没一列、每一个3*3的方框里都没有重复的数字即可。要求: (1)、自行输入数独表格中数字 (2)、组成数独网格 (3)、依次填入数字1-9检查约束条件 (4)、输出符合约束条件的结果三、详细设计说明1.数独小游戏说明 数独游戏在99的方格内进行,分为33的小方格,被称为“区”:区数独游戏的目的是根据下列规则,用1至9之间的数字填满空格,一个格子只能填入一个数字。每个数字在每一行只能出现一次。每个数字在每一列只能出现一次。每个数字在每一区只能出现一次2.数独程序流程图四、软件使用说明工具: vc+6.0;输入数据 运行结果五、附录:部分程序清单(带有较详细的注释)#include/*数字0表示该位置为空,待填入数字0,0,4,6,0,2,0,9,1,2,1,0,9,8,4,0,5,6,9,0,0,0,7,1,4,2,0,1,2,5,0,6,0,3,4,7,4,7,6,0,0,0,9,8,5,8,3,9,0,4,0,1,6,2,0,9,1,2,5,0,0,0,4,5,8,0,4,1,6,0,3,9,6,4,0,3,0,7,5,0,0;*/int data99 = 0,7,0,2,6,0,9,0,0,3,0,0,0,0,8,0,0,7, 0,9,0,0,5,7,0,0,0, 5,0,0,0,0,0,0,7,0, 0,4,7,3,1,2,8,5,0, 0,8,0,0,0,0,0,0,1, 0,0,0,8,2,0,0,4,0, 7,0,0,6,0,0,0,0,2, 0,0,4,0,3,9,0,8,0;void input()int i,j;for(i = 0;i 9;i+)for(j = 0;j 9;j+)scanf(%d,&dataij);void output()int i,j;for(i = 0;i 9;i+)for(j = 0;j 9;j+)printf(%d ,dataij);printf(n);printf(n);/*检查num是否可放置在3*3区域是否有冲突*/int CheckSquare(int line,int col,int num)int i = (line / 3) * 3;int j = (col / 3) * 3;int m,n;for(m = i;m i + 3;m+)for(n = j;n j + 3;n+)if(datamn = num) & !(m = line & n = col)return 0;return 1;/*检查行冲突*/int CheckLine(int line,int col,int num)int i = 9;while(i-)if(datalinei = num) & (i != col)return 0;return 1;/*检查列冲突*/int CheckColumn(int line,int col,int num)int i = 9;while(i-)if(dataicol = num) & (i != line)return 0;return 1;/*检查i行j列是否可放置num*/int Check(int i,int j,int num)return CheckSquare(i,j,num) & CheckLine(i,j,num) & CheckColumn(i,j,num);/*检查是否完成*/int IsDone()int i,j;for(i = 0;i 9;i+)for(j = 0;j 9;j+)if(!Check(i,j,dataij) | (dataij = 0)return 0;return 1;void Calc()int i,j,x;if(IsDone()output();return;for(i = 0;i 9;i+)for(j = 0;j 9;j+)if(dataij = 0)for(x = 1; x = 9;x+)if(Check(i,j,x)dataij = x;Calc();if(x = 10)dataij = 0;return ;in
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 目标考试题及答案
- 昆曲考试题及答案
- 中级财务会计(菏泽学院)知到智慧树答案
- 中级日语II(山东联盟)知到智慧树答案
- 小学数学教师综合素质评比活动专业知识测试卷含答案
- 狂犬病暴露预防处置培训考核试题及答案(伤口处置人员)
- 压力性损伤的预防与护理相关试题(附答案)
- 2025担保抵押影视投资合同范本
- 2025版高品质公寓房屋买卖合同文本下载
- 2025年度智能家居房产广告设计与客户体验提升合同
- 新初中班主任培训
- DB13T 5252-2020 HDPE内衬修复供水管道技术规程
- 2025至2030年中国真空电机行业市场行情监测及前景战略研判报告
- 2025年船舶舾装件项目市场调查研究报告
- 2024生产安全事故应急预案
- 矿用电机车永磁电机驱动及能量回馈系统:技术革新与应用实践
- 医院后勤管理的安全风险防控措施
- 2025-2030木薯市场发展现状调查及供需格局分析预测研究报告
- 雾化吸入技术课件
- 医疗废物管理知识培训课件
- 新教材高中英语必修一全册单词默写
评论
0/150
提交评论