纸牌游戏—数据结构实训报告

纸牌游戏—数据结构实训报告
纸牌游戏—数据结构实训报告

目录

一、课题目标 (3)

1.1纸牌游戏的简介 (3)

1.2纸牌游戏的基本要求 (3)

二、概要设计及功能的实现 (3)

2.1纸牌游戏的框架图 (3)

2.2主函数和子函数的框架图 (4)

2.3具体的实现 (7)

2.3.1类的设计 (7)

2.3.2功能的实现 (7)

2.3.2.A发牌的功能 (7)

2.3.2.B出牌的功能 (8)

2.3.2.C二叉排序树的插入的功能 (11)

2.3.2.D二叉树的排序 (12)

2.3.2.E主函数的实现 (12)

三、调试分析 (15)

四、实训的经验与心得 (18)

4.1经验 (18)

4.2心得 (18)

一、课题目标

1.1纸牌游戏的简介

创建一副扑克牌,通过用户与电脑的轮流出牌,谁先出完牌,谁就获胜。

1.2纸牌游戏的基本要求

# 这幅扑克牌没有花色(J、Q、K、A、大小王),俩人进行游戏,其中一个为用户,一个为计算机;

# 每人每轮各发五张牌,各自以这五张牌建立二叉排序树;

# 游戏由用户先出,轮流出牌,每次只能出一张牌并且要比被别人出的大,如:用户出3,计算机则要出比3打的纸牌,没有则选择不出;

# 最先出完纸牌的人获胜。

二、概要设计及功能的实现

2.1纸牌游戏的框架图

2.2

子函数框架图出牌的框架图

建立二叉排序树的

2.3具体的实现

2.3.1类的设计

首先在程序中必须有类,而我的纸牌游戏要求是有纸牌和以纸牌建立二叉排序树,故有两个类:class PlayingCards和class tree

2.3.2功能的实现

2.3.2.A发牌的功能

**实现纸牌游戏发牌(fp)的功能,它的初始条件是该纸牌已存在,操作结果是给用户和电脑每人发5张牌。

void PlayingCards::fp()

{int l,e;//临时储存随机牌数

int f;

for(int i = 0;i < 5;i++)

{

l = rand()%9 + 2;//用户得到牌的点数

cout<<"发到的牌"<

f = rand()%4+3;

while(card1[l-1][f-3] == 1)

{l = rand()%9 + 2;f= rand()%4+3;}

card1[l-1][f-3] = 1;//标记哪些牌被发出

b[i] = l ;

bhuase[i] = f;

e = rand()%9 + 2;//电脑得到牌的点数

f = rand()%4+3;

while(card1[e-1][f-3] == 1)

{e = rand()%9 + 2;f = rand()%4+3;}

card1[e-1][f-3] = 1;//标记哪些牌被发出

c[i] = e;

chuase[i] = f;

}

}

2.3.2.B出牌的功能

**实现纸牌游戏的出牌(cp)功能,它的初始条件是用户和电脑每人手上拥有5张牌,操作结果是由用户先出牌,且后一个人出牌的点数要比前一个人出牌的点数大,谁先出完谁赢。

void PlayingCards::cp()

{ int e = 0; int f = 0;

int n1 = 0;int n2 = 0;//记录牌打出几张

for(int m = 0;m < 5;m++)

{

for(int i = 0;i < 5;i++)

{

for(int j = 0;j < 5;j++)

{

if(b[j] > f&&card2[j][0] == 0)

{

cout<<"玩家出牌"<

card2[j][0] = 1;//标记b(玩家)的第i张牌已经打出

e = b[j]; Sleep(800);

break;

}

}

n1 = 0;n2 = 0;

for(int i = 0;i < 5; i++)

{

n1 = n1 + card2[i][0];

n2 = n2 + card2[i][1];

}

if(n1 == 5)

{cout<<"玩家赢了 ";

break;

}

for( j = 0;j < 5;j++)

{

if(c[j] > e && card2[j][1] == 0)

{

cout<<"电脑出牌"<

card2[j][1] = 1;f = c[j]; Sleep(800); 把密码转换成ANSCII码

break;

}

}

n1 = 0;n2 = 0;

for( i = 0;i < 5; i++)

{

n1 = n1 + card2[i][0];

n2 = n2 + card2[i][1];

}

if(n2 == 5)

{cout<<"电脑赢了";

break;

}

}

n1 = 0;n2 = 0;

for( i = 0;i < 5; i++)

{

n1 = n1 + card2[i][0];

n2 = n2 + card2[i][1];

}

if(n1 == 5 || n2 == 5)

break;

if(f > e)

{e = 0;

}

if(e > f)

{f = 0;

}//有一方没牌可出了,由牌点数大的那一方继续出牌 }

}

2.2.

3.C二叉排序树的插入(churu)的功能

**二叉排序树是基于二叉树的动态查找结构,因此,在二叉排序树中,插入不需要移动数据元素,只需要修改相应结点中的一个空指针即可。

node * tree::charu(node *t , int key)

{

if(t == NULL)

{

node * p;

p = (node *)malloc(sizeof(node));

p->data = key;

p->LChild = NULL;

p->RChild = NULL;

t = p;

}

else

{

if(key < t->data)

t->LChild = charu(LChild, key);

else

t->RChild = charu(t->RChild, key);

}

return t;

}

2.3.2.D二叉树的排序

**就是以中序的方式遍历输出,在排序过程中运用到了递归的算法。

void tree::paixu1(node * t) //中序遍历输出

{

if(t != NULL)

{

paixu1(t->LChild);

cout<< t->data<<" ";

paixu1(t->RChild);

}

}

2.3.2.E主函数的实现

int main()

{int k =0;

srand((unsigned)time(NULL));//调用系统时间为随机函数

赋初值

int n = 0;

while(k != -1)

{

cout<

cout<<"\t\t\t"<<" **************纸牌游戏

****************"<

cout<<"*************************************"<

cout<<"\t\t\t"<<" *************1.游戏说明******** "<

cout<<"\t\t\t"<<" *************2.开始游戏********* "<

cout<<"\t\t\t"<<"**********3.开始出牌 *********** "<

cout<<"\t\t\t"<<"************4游戏结束 ********** "<

cout<<"*************************************"<

cout<<"\t\t\t"<<"请输入(1、2、3、4) : "<

cin>>k;

switch(k)

{case 1: a.yxsm(); break;

case 2:

{a.qk();

a.fp();

node*t1= NULL; t1 = tr.jianlib(t1);tr.paixu1(t1);//

中序遍历输出

node * t2 = NULL; t2 = tr.jianlic(t2);

n = 0;//初始化

tr.paixu2(t1,&n);

n = 0;

tr.paixu3(t2,&n);

cout<

a.xswj();

a.xsdn();

break;}

case 3: {

a.cp(); a.qk(); break;

}

case 4: k = -1; break;

}

}

return 0;

}

三、调试分析

一般情况下,为解决一个问题所编写的程序代码较长,可能包括几百条甚至成千上万条语句。在检查并排除所有语法错误后,还会有不易发现的逻辑错误,因此要对程序进行认真仔细的测试与调试。

测试是通过运行程序发现错误的过程,常见的错误有数据溢出、数组越界、进入死循环、语句顺序颠倒、多加“;”或少加“{}”等等。调试则是确定测试中找到的错误性质并改正错误的过程。测试与调试通常交替进行,即测试——调试——再测试——再调试。

能检查出尚未发现的、各种不同类型错误的测试才是成功的测试。测试程序需要测试用例,测试用例可用如下公式表示:测试

用例=测试数据+预期结果。

好的测试用例应该是用尽可能少的测试数据发现尽可能多的错误,即发现错误的概率要大。要选择合适的测试数据,使系统在运行时尽量能执行到每条语句,以测试各指令是否正确。还应分别测试输入合法数据与非法数据时,程序的运行情况,。对于合法数据,还要考虑数据的一般性与特殊性,如求最大值的问题,应测试最大值在最前面、最后面、中间某一位置的情况。

建立游戏主界面

游戏说明

开始游戏

开始出牌

游戏结束

四、实训的经验与心得

4.1经验

通过对本题目的开发,学到要掌握以下几点内容:

大程序的设计风格。按“自顶向下,逐步细化,模块化”的方法进行程序设计。

编写函数,并进行测试与调试。当被调函数又需要调用其他函数时,也要遵循逐步细化的原则。

数据结构--C++所要求我们掌握的是组织数据、存储数据和处理数据的基本方法,并加强在实际应用中选择合适的

数据结构和算法进行训练。

定义函数时,应选好参数的个数和数据类型。

4.2心得

在本次实训中,我遇到的问题是二叉树排序用到了递归的思想,这一块让我感到有点难。自己把课本有关这一块的内容仔细的看了一遍,终于领悟了递归调运的方式和算法。也知道了我的程序纸牌存储在数组里,二叉排序树存储在链表中。排序是需要调运

数组里的元素。老师问我最后一个问题是n=0是什么意思?

后来我又看了一遍,明白了它是初始化的意思。

在编译程序错误,改了很多次依然显示错误,而且修改时自己能力不足不能一次性修改完,对很多地方的程序不是很熟悉,很多资料都是网上学习然后修改,也有寻求他人帮助的。希望以后能更加努力并做到更好。

数据结构课程设计报告模板

《数据结构I》三级项目报告 大连东软信息学院 电子工程系 ××××年××月

三级项目报告注意事项 1. 按照项目要求书写项目报告,条理清晰,数据准确; 2. 项目报告严禁抄袭,如发现抄袭的情况,则抄袭者与被抄袭者均 以0分计; 3. 课程结束后报告上交教师,并进行考核与存档。 三级项目报告格式规范 1. 正文:宋体,小四号,首行缩进2字符,1.5倍行距,段前段后 各0行; 2. 图表:居中,图名用五号字,中文用宋体,英文用“Times New Roman”,位于图表下方,须全文统一。

目录 一项目设计方案 (3) 二项目设计分析 (4) 三项目设计成果 (4) 四项目创新创业 (5) 五项目展望 (6) 附录一:项目成员 (6) 附录二:相关代码、电路图等 (6)

一项目设计方案 1、项目名称: 垃圾回收 2、项目要求及系统基本功能: 1)利用数据结构的知识独立完成一个应用系统设计 2)程序正常运行,能够实现基本的数据增加、删除、修改、查询等功能3)体现程序实现算法复杂度优化 4)体现程序的健壮性 二项目设计分析 1、系统预期实现基本功能: (结合本系统预期具体实现,描述出对应基本要求(增、删、改、查等)的具体功能) 1. 2. 3. 4. 5. 6. 7. 2、项目模块功能描述 (基本分为组织实施组织、程序功能模块编写、系统说明撰写等。其中程序功能子模块实现) 模块一: 主要任务:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 模块二: 主要任务:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 模块n: 主要任务:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

数据挖掘实验报告资料

大数据理论与技术读书报告 -----K最近邻分类算法 指导老师: 陈莉 学生姓名: 李阳帆 学号: 201531467 专业: 计算机技术 日期 :2016年8月31日

摘要 数据挖掘是机器学习领域内广泛研究的知识领域,是将人工智能技术和数据库技术紧密结合,让计算机帮助人们从庞大的数据中智能地、自动地提取出有价值的知识模式,以满足人们不同应用的需要。K 近邻算法(KNN)是基于统计的分类方法,是大数据理论与分析的分类算法中比较常用的一种方法。该算法具有直观、无需先验统计知识、无师学习等特点,目前已经成为数据挖掘技术的理论和应用研究方法之一。本文主要研究了K 近邻分类算法,首先简要地介绍了数据挖掘中的各种分类算法,详细地阐述了K 近邻算法的基本原理和应用领域,最后在matlab环境里仿真实现,并对实验结果进行分析,提出了改进的方法。 关键词:K 近邻,聚类算法,权重,复杂度,准确度

1.引言 (1) 2.研究目的与意义 (1) 3.算法思想 (2) 4.算法实现 (2) 4.1 参数设置 (2) 4.2数据集 (2) 4.3实验步骤 (3) 4.4实验结果与分析 (3) 5.总结与反思 (4) 附件1 (6)

1.引言 随着数据库技术的飞速发展,人工智能领域的一个分支—— 机器学习的研究自 20 世纪 50 年代开始以来也取得了很大进展。用数据库管理系统来存储数据,用机器学习的方法来分析数据,挖掘大量数据背后的知识,这两者的结合促成了数据库中的知识发现(Knowledge Discovery in Databases,简记 KDD)的产生,也称作数据挖掘(Data Ming,简记 DM)。 数据挖掘是信息技术自然演化的结果。信息技术的发展大致可以描述为如下的过程:初期的是简单的数据收集和数据库的构造;后来发展到对数据的管理,包括:数据存储、检索以及数据库事务处理;再后来发展到对数据的分析和理解, 这时候出现了数据仓库技术和数据挖掘技术。数据挖掘是涉及数据库和人工智能等学科的一门当前相当活跃的研究领域。 数据挖掘是机器学习领域内广泛研究的知识领域,是将人工智能技术和数据库技术紧密结合,让计算机帮助人们从庞大的数据中智能地、自动地抽取出有价值的知识模式,以满足人们不同应用的需要[1]。目前,数据挖掘已经成为一个具有迫切实现需要的很有前途的热点研究课题。 2.研究目的与意义 近邻方法是在一组历史数据记录中寻找一个或者若干个与当前记录最相似的历史纪录的已知特征值来预测当前记录的未知或遗失特征值[14]。近邻方法是数据挖掘分类算法中比较常用的一种方法。K 近邻算法(简称 KNN)是基于统计的分类方法[15]。KNN 分类算法根据待识样本在特征空间中 K 个最近邻样本中的多数样本的类别来进行分类,因此具有直观、无需先验统计知识、无师学习等特点,从而成为非参数分类的一种重要方法。 大多数分类方法是基于向量空间模型的。当前在分类方法中,对任意两个向量: x= ) ,..., , ( 2 1x x x n和) ,..., , (' ' 2 ' 1 'x x x x n 存在 3 种最通用的距离度量:欧氏距离、余弦距 离[16]和内积[17]。有两种常用的分类策略:一种是计算待分类向量到所有训练集中的向量间的距离:如 K 近邻选择K个距离最小的向量然后进行综合,以决定其类别。另一种是用训练集中的向量构成类别向量,仅计算待分类向量到所有类别向量的距离,选择一个距离最小的类别向量决定类别的归属。很明显,距离计算在分类中起关键作用。由于以上 3 种距离度量不涉及向量的特征之间的关系,这使得距离的计算不精确,从而影响分类的效果。

数据结构设计报告纸牌游戏

纸牌游戏 一.需求分析 1.编号为1-52张牌,正面向上 2. 从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后从第4张开始,以4为基数,是4的倍数的牌翻一次,直到最后一张牌;...再依次5的倍数的牌翻一次,6的,7的直到以52为基数的翻过 3. 输出:这时正面向上的牌; 4.测试数据 52张牌 二.概要设计 1.数组抽象数据类型定义: ADT SqList{ 数据对象:ji=0,…,bi-1,i=1,2,…,n, D= {aj1j2…jn|n(>0)称为数组的维数,bi是数组第i维的长度, ji是数组第i 维的下标, aj1j2…jn∈ElemSet} 数据关系:R={R1,R2,…,Rn} Ri={|0≤jk≤bk-1,1≤k≤n且k≠I, 0≤ji≤bk-2, aj1…ji…jn,aj1,…ji+1,…jn∈D,i=2,…,n} 基本操作: faceringt(L): 操作结果:对纸牌进行翻转 }ADT SqList 2.本程序包含两个模块: (1)主程序模块 void main() {定义一个二叉树; for(i=1;i<=52;i++) { L.r[i].num=i; L.r[i].visit=0;//用0来记正面 } } (2)纸牌翻转模块——翻转纸牌 各模块之间的调用关系如下: 主程序模块 纸牌翻转模块 三.详细设计 1.根据题目要求的数组存储结构 #define MAXSIZE 100//给数组定义一个空间

typedef struct { int num; //牌号 int visit; //牌的正反面 }RedType; //纸牌的信息 typedef struct { RedType r[MAXSIZE+1]; //纸牌数组 int length; }SqList; 2.对纸牌进行翻转 void faceringt(SqList L) { for(i=2;i<=52;i++) //从第二张开始往后 { for(j=i;j<=52;j++) if(L.r[j].num%i==0) //当是i的倍数时翻转 { if(L.r[j].visit==0) //正面翻反面 L.r[j].visit=1; else L.r[j].visit=0; } } for(i=1;i<=52;i++) //显示正面号 { if(L.r[i].visit==0) cout<

数据结构课程设计报告模板

课程设计说明书 课程名称:数据结构 专业:班级: 姓名:学号: 指导教师:成绩: 完成日期:年月日

任务书 题目:黑白棋系统 设计内容及要求: 1.课程设计任务内容 通过玩家与电脑双方的交替下棋,在一个8行8列的方格中,进行棋子的相互交替翻转。反复循环下棋,最后让双方的棋子填满整个方格。再根据循环遍历方格程序,判断玩家与电脑双方的棋子数。进行大小判断,最红给出胜负的一方。并根据y/n选项,判断是否要进行下一局的游戏。 2.课程设计要求 实现黑白两色棋子的对峙 开发环境:vc++6.0 实现目标: (1)熟悉的运用c语言程序编写代码。 (2)能够理清整个程序的运行过程并绘画流程图 (3)了解如何定义局部变量和整体变量; (4)学会上机调试程序,发现问题,并解决 (5)学习使用C++程序来了解游戏原理。 (6)学习用文档书写程序说明

摘要 本文的研究工作在于利用计算机模拟人脑进行下黑白棋,计算机下棋是人工智能领域中的一个研究热点,多年以来,随着计算机技术和人工智能技术的不断发展,计算机下棋的水平得到了长足的进步 该程序的最终胜负是由棋盘上岗双方的棋子的个数来判断的,多的一方为胜,少的一方为负。所以该程序主要运用的战术有削弱对手行动战术、四角优先战术、在游戏开局和中局时,程序采用削弱对手行动力战术,即尽量减少对手能够落子的位置;在游戏终局时则采用最大贪吃战术,即尽可能多的吃掉对手的棋子;而四角优先战术则是贯穿游戏的始终,棋盘的四角围稳定角,不会被对手吃掉,所以这里是兵家的必争之地,在阻止对手进角的同时,自己却又要努力的进角。 关键词:黑白棋;编程;设计

数据挖掘实训报告

项目1:基于sklearn的数据分类挖掘 一、项目任务 ①熟悉sklearn数据挖掘的基本功能。 ②进行用朴素贝叶斯、KNN、决策树C4.5、SVM算法进行数据分类分析。 二、项目环境及条件 ?sklearn-0.18.0 ?python- ?numpy- ?scipy- ?matplotlib- 三、实验数据 Iris数据集 Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。数据集包含150个数据集,分为3类,每类50个数据,每个数据包含4个属性。可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。 Digits数据集 美国著名数据集NIST的子集,模式识别常用实验数据集,图像属于灰度图像。分辨率为8x8

四、项目内容及过程 1.读取数据集 从sklearn中读取iris和digits数据集并测试打印 打印的数据集存在numpy.ndarray中,ndarray会自动省略较长矩阵的中间部分。 Iris数据集的样本数据为其花瓣的各项属性 Digits数据集的样本数据为手写数字图像的像素值 2.划分数据集 引入sklearn的model_selection使用train_test_split划分digits数据集,训练集和测试集比例为8:2 3.使用KNN和SVM对digits测试集分类 引用sklearn的svm.SVC和neighbors.KNeighborsClassifier模块调用算法,使用classification_report查看预测结果的准确率和召回率

数据结构大作业-纸牌游戏

数据结构课程设计大作业 题目纸牌游戏 专业计算机科学与技术 学生姓名 __________________ 学号 _____________________ 指导教师 __________________ 完成日期 __________________ 信息与工程学院

目录 一、实验内容概述(设计任务与技术要求) (1) 二、实验目的概述(总体设计方案) (1) 三、解题思路的描述(数据结构和算法的设计): (1) 四、源程序清单(源程序中应该附有必要的注释) (2) 五、程序调试及测试结果 (4) 六、结论 (4) 七、参考文献 (5)

【内容摘要】 编号为1~52的牌,正面向上,从第二张开始,以2为基数,是2的倍数的牌翻一次,直到最 后一张牌;然后,从第三张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后从 第四张开始,以4为基数,是4的倍数的牌翻一次,直到最后一张牌;依次类推,知道所有以52 为基数的牌翻过一次。输出:这时正面向上的牌有哪些? 【关键字】 52张纸牌,倍数,基数,数组 【Abstract 】 Numbered 1 to 52 cards, face up, starting from the second to 2 as the base, is a multiple of 2 cards turning on ce, un til the last card; and the n, begi nning from the third to 3 as the base,is a multiple of 3 cards turning once, un til the last card; and the n start from the fourth to 4 as the base, is a multiple of 4 cards turning once, un til the last card; and so on, that was all of 52base of the card turned over on ce.Output: At this time what the cards face up? 【Key words 】 52 cards, multiple, base, array

数据结构课程设计报告

山东建筑大学 课程设计成果报告 题目: 1.数组实现两个矩阵的相乘运算 2.成绩分析问题 课程:数据结构A课程设计 院(部):管理工程学院 专业:信息管理与信息系统 班级:信管*** 学生姓名:*** 学号:******** 指导教师:******* 完成日期:2016年12月29日

目录 目录 (2) 一、课程设计概述 (3) 二、课程设计题目一 (3) 用数组实现两个矩阵的相乘运算 (3) 2.1[问题描述] (3) 2.2[要求及提示]: (3) 2.3[详细设计] (4) 2.4[调试分析] (5) 2.5[运行结果及分析] (5) 三、课程设计题目二 (6) 成绩分析问题 (6) 3.1[问题描述] (6) 3.2[概要设计] (6) 3.3[存储结构] (7) 3.4[流程图] (7) 3.5[详细设计] (8) 3.6[调试分析] (8) 3.7[运行结果及分析] (22) 四、参考文献: (25)

一、课程设计概述 本次数据结构课程设计共完成两个题:用数组实现两个矩阵相乘运算、成绩分析问题。使用语言:C 编译环境:vc6.0 二、课程设计题目一 用数组实现两个矩阵的相乘运算 2.1[问题描述] #include “stdio.h” int r[6][6]; void mult(int a[6][6] , int b[6][6]){ } main(){ int i,j; int num1[6][6],num2[6][6]; printf(“请输入第一个矩阵的值:”,); for(i=1;i<=6;i++) for(j=1;j<=6;j++) scanf(“%d”,&num1[i][j]); printf(“请输入第二个矩阵的值:”,); for(i=1;i<=6;i++) for(j=1;j<=6;j++) scanf(“%d”,&num2[i][j]); mult(num1,num2); printf(“\n两个矩阵相乘后的结果为:”); for(i=1;i<=6;i++) {for(j=1;j<=6;j++) printf(“%4d”,r[i][j]); printf(“\n”); } } 2.2[要求及提示]: 1、要求完善函数mult( ),

数据挖掘报告

哈尔滨工业大学 数据挖掘理论与算法实验报告(2016年度秋季学期) 课程编码S1300019C 授课教师邹兆年 学生姓名汪瑞 学号 16S003011 学院计算机学院

一、实验内容 决策树算法是一种有监督学习的分类算法;kmeans是一种无监督的聚类算法。 本次实验实现了以上两种算法。在决策树算法中采用了不同的样本划分方式、不同的分支属性的选择标准。在kmeans算法中,比较了不同初始质心产生的差异。 本实验主要使用python语言实现,使用了sklearn包作为实验工具。 二、实验设计 1.决策树算法 1.1读取数据集 本次实验主要使用的数据集是汽车价值数据。有6个属性,命名和属性值分别如下: buying: vhigh, high, med, low. maint: vhigh, high, med, low. doors: 2, 3, 4, 5more. persons: 2, 4, more. lug_boot: small, med, big. safety: low, med, high. 分类属性是汽车价值,共4类,如下: class values:unacc, acc, good, vgood 该数据集不存在空缺值。

由于sklearn.tree只能使用数值数据,因此需要对数据进行预处理,将所有标签类属性值转换为整形。 1.2数据集划分 数据集预处理完毕后,对该数据进行数据集划分。数据集划分方法有hold-out法、k-fold交叉验证法以及有放回抽样法(boottrap)。 Hold—out法在pthon中的实现是使用如下语句: 其中,cv是sklearn中cross_validation包,train_test_split 方法的参数分别是数据集、数据集大小、测试集所占比、随机生成方法的可

数据结构实验报告

数据结构实验报告 一.题目要求 1)编程实现二叉排序树,包括生成、插入,删除; 2)对二叉排序树进行先根、中根、和后根非递归遍历; 3)每次对树的修改操作和遍历操作的显示结果都需要在屏幕上用树的形状表示出来。 4)分别用二叉排序树和数组去存储一个班(50人以上)的成员信息(至少包括学号、姓名、成绩3项),对比查找效率,并说明在什么情况下二叉排序树效率高,为什么? 二.解决方案 对于前三个题目要求,我们用一个程序实现代码如下 #include #include #include #include "Stack.h"//栈的头文件,没有用上 typedefintElemType; //数据类型 typedefint Status; //返回值类型 //定义二叉树结构 typedefstructBiTNode{ ElemType data; //数据域 structBiTNode *lChild, *rChild;//左右子树域 }BiTNode, *BiTree; intInsertBST(BiTree&T,int key){//插入二叉树函数 if(T==NULL) { T = (BiTree)malloc(sizeof(BiTNode)); T->data=key; T->lChild=T->rChild=NULL; return 1; } else if(keydata){ InsertBST(T->lChild,key); } else if(key>T->data){ InsertBST(T->rChild,key); } else return 0; } BiTreeCreateBST(int a[],int n){//创建二叉树函数 BiTreebst=NULL; inti=0; while(i

纸牌游戏—数据结构实训报告

目录 一、课题目标 (3) 1.1纸牌游戏的简介 (3) 1.2纸牌游戏的基本要求 (3) 二、概要设计及功能的实现 (3) 2.1纸牌游戏的框架图 (3) 2.2主函数和子函数的框架图 (4) 2.3具体的实现 (7) 2.3.1类的设计 (7) 2.3.2功能的实现 (7) 2.3.2.A发牌的功能 (7) 2.3.2.B出牌的功能 (8) 2.3.2.C二叉排序树的插入的功能 (11) 2.3.2.D二叉树的排序 (12) 2.3.2.E主函数的实现 (12) 三、调试分析 (15) 四、实训的经验与心得 (18) 4.1经验 (18) 4.2心得 (18)

一、课题目标 1.1纸牌游戏的简介 创建一副扑克牌,通过用户与电脑的轮流出牌,谁先出完牌,谁就获胜。 1.2纸牌游戏的基本要求 # 这幅扑克牌没有花色(J、Q、K、A、大小王),俩人进行游戏,其中一个为用户,一个为计算机; # 每人每轮各发五张牌,各自以这五张牌建立二叉排序树; # 游戏由用户先出,轮流出牌,每次只能出一张牌并且要比被别人出的大,如:用户出3,计算机则要出比3打的纸牌,没有则选择不出; # 最先出完纸牌的人获胜。 二、概要设计及功能的实现 2.1纸牌游戏的框架图

2.2

子函数框架图出牌的框架图

建立二叉排序树的

2.3具体的实现 2.3.1类的设计 首先在程序中必须有类,而我的纸牌游戏要求是有纸牌和以纸牌建立二叉排序树,故有两个类:class PlayingCards和class tree 2.3.2功能的实现 2.3.2.A发牌的功能 **实现纸牌游戏发牌(fp)的功能,它的初始条件是该纸牌已存在,操作结果是给用户和电脑每人发5张牌。 void PlayingCards::fp() {int l,e;//临时储存随机牌数 int f; for(int i = 0;i < 5;i++) { l = rand()%9 + 2;//用户得到牌的点数 cout<<"发到的牌"<

数据结构课程设计报告

《数据结构课程设计》报告 题目:课程设计题目2教学计划编制 班级:700 学号:09070026 姓名:尹煜 完成日期:2011年11月7日

一.需求分析 本课设的任务是根据课程之间的先后的顺序,利用拓扑排序算法,设计出教学计划,在七个学期中合理安排所需修的所有课程。 (一)输入形式:文件 文件中存储课程信息,包括课程名称、课程属性、课程学分以及课程之间先修关系。 格式:第一行给出课程数量。大于等于0的整形,无上限。 之后每行按如下格式“高等数学公共基础必修6.0”将每门课程的具体信息存入文件。 课程基本信息存储完毕后,接着给出各门课程之间的关系,把每门课程看成顶点,则关系即为边。 先给出边的数量。大于等于0的整形。 默认课程编号从0开始依次增加。之后每行按如下格式“1 3”存储。此例即为编号为1的课程与编号为3的课程之间有一条边,而1为3的前驱,即修完1课程才能修3课程。 例: (二)输出形式:1.以图形方式显示有向无环图

2.以文本文件形式存储课程安排 (三)课设的功能 1.根据文本文件中存储的课程信息(课程名称、课程属性、课程学分、课程之间关系) 以图形方式输出课程的有向无环图。 拓展:其显示的有向无环图可进行拖拽、拉伸、修改课程名称等操作。 2.对课程进行拓扑排序。 3.根据拓扑排序结果以及课程的学分安排七个学期的课程。 4.安排好的教学计划可以按图形方式显示也可存储在文本文件里供用户查看。 5.点击信息菜单项可显示本人的学好及姓名“09070026 尹煜” (四)测试数据(见六测设结果)

二.概要设计 数据类型的定义: 1.Class Graph即图类采用邻接矩阵的存储结构。类中定义两个二维数组int[][] matrix 和Object[][] adjMat。第一个用来标记两个顶点之间是否有边,为画图服务。第二个 是为了实现核心算法拓扑排序。 2.ArrayList list用来存储课程信息。DrawInfo类是一个辅助画图的类,其中 包括成员变量num、name、shuxing、xuefen分别代表课程的编号、名称、属性、 学分。ArrayList是一个DrawInfo类型的数组,主要用来在ReadFile、DrawG、DrawC、SaveFile、Window这些类之间辅助参数传递,传递课程信息。 3.Class DrawInfo, 包括int num;String name;String shuxing;float xuefen;四个成员变量。 4.Class Edge包括int from;int to;double weight;三个成员变量。 5.Class Vertex包括int value一个成员变量。 主要程序的流程图: //ReadFile.java

数据挖掘实验报告三

实验三 一、实验原理 K-Means算法是一种 cluster analysis 的算法,其主要是来计算数据聚集的算法,主要通过不断地取离种子点最近均值的算法。 在数据挖掘中,K-Means算法是一种cluster analysis的算法,其主要是来计算数据聚集的算法,主要通过不断地取离种子点最近均值的算法。 算法原理: (1) 随机选取k个中心点; (2) 在第j次迭代中,对于每个样本点,选取最近的中心点,归为该类; (3) 更新中心点为每类的均值; (4) j<-j+1 ,重复(2)(3)迭代更新,直至误差小到某个值或者到达一定的迭代步 数,误差不变. 空间复杂度o(N) 时间复杂度o(I*K*N) 其中N为样本点个数,K为中心点个数,I为迭代次数 二、实验目的: 1、利用R实现数据标准化。 2、利用R实现K-Meams聚类过程。 3、了解K-Means聚类算法在客户价值分析实例中的应用。 三、实验内容 依据航空公司客户价值分析的LRFMC模型提取客户信息的LRFMC指标。对其进行标准差标准化并保存后,采用k-means算法完成客户的聚类,分析每类的客户特征,从而获得每类客户的价值。编写R程序,完成客户的k-means聚类,获得聚类中心与类标号,并统计每个类别的客户数

四、实验步骤 1、依据航空公司客户价值分析的LRFMC模型提取客户信息的LRFMC指标。

2、确定要探索分析的变量 3、利用R实现数据标准化。 4、采用k-means算法完成客户的聚类,分析每类的客户特征,从而获得每类客户的价值。

五、实验结果 客户的k-means聚类,获得聚类中心与类标号,并统计每个类别的客户数 六、思考与分析 使用不同的预处理对数据进行变化,在使用k-means算法进行聚类,对比聚类的结果。 kmenas算法首先选择K个初始质心,其中K是用户指定的参数,即所期望的簇的个数。 这样做的前提是我们已经知道数据集中包含多少个簇. 1.与层次聚类结合 经常会产生较好的聚类结果的一个有趣策略是,首先采用层次凝聚算法决定结果

数据结构实验报告全集

数据结构实验报告全集 实验一线性表基本操作和简单程序 1.实验目的 (1)掌握使用Visual C++ 6.0上机调试程序的基本方法; (2)掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在顺序存储结构和链表存储结构上的程序设计方法。 2.实验要求 (1)认真阅读和掌握和本实验相关的教材内容。 (2)认真阅读和掌握本章相关内容的程序。 (3)上机运行程序。 (4)保存和打印出程序的运行结果,并结合程序进行分析。 (5)按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果 实验代码: 1)头文件模块 #include iostream.h>//头文件 #include//库头文件-----动态分配内存空间 typedef int elemtype;//定义数据域的类型 typedef struct linknode//定义结点类型 { elemtype data;//定义数据域 struct linknode *next;//定义结点指针 }nodetype; 2)创建单链表

nodetype *create()//建立单链表,由用户输入各结点data域之值,//以0表示输入结束 { elemtype d;//定义数据元素d nodetype *h=NULL,*s,*t;//定义结点指针 int i=1; cout<<"建立一个单链表"<> d; if(d==0) break;//以0表示输入结束 if(i==1)//建立第一个结点 { h=(nodetype*)malloc(sizeof(nodetype));//表示指针h h->data=d;h->next=NULL;t=h;//h是头指针 } else//建立其余结点 { s=(nodetype*) malloc(sizeof(nodetype)); s->data=d;s->next=NULL;t->next=s; t=s;//t始终指向生成的单链表的最后一个节点

数据结构纸牌游戏课程设计报告

合肥学院 计算机科学与技术系 课程设计报告 2009~2010学年第二学期 课程数据结构与算法 课程设计名称纸牌游戏 学生姓名常丽君 学号0704013024 专业班级08计科(3) 指导教师李红沈亦军

2010年6月 题目:(纸牌游戏)编号为1~52张牌,正面向上,从第二张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后从第三张牌开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;直到以52为基数的翻过,输出:这时输出正面向上的牌有哪些? 一、问题分析和任务定义 1、问题分析:编号为1的牌没有进行翻牌,即翻牌的次数为0,仍然为正面朝上;编号为2的牌在整个过程中只翻了一次,为反面朝上;编号为3的牌在整个过程中只翻了一次,为反面朝上;编号为4的牌在整个过程中翻了两次,为正面朝上;编号为5的牌在整个过程中翻了一次,为反面朝上;编号为6的牌在整个过程中翻了三次(由于6是 2、 3、6的倍数),为反面朝上;以此类推直至编号为52的牌,从上述过程可以总结出这样的规律:从编号为1的第一张牌到编号为52的最后一张牌,只要它翻过的次数为偶数则是正面朝上,反之则为反面朝上。因此我们可以依据每张牌翻过的次数来确定它最终是否为正面向上,从而输出实验所需要的结果:所有正面向上的牌的编号。 2、任务定义:实现本程序需要解决以下几个问题: (1)如何存储52张牌,所选择的存储结构要便于实现题给要求的操作。 (2)如何设计翻牌程序。 (3)在经过所有的翻牌以后,如何知道每一张牌是否为正面向上。 (4)如何输出所有正面向上的牌的编号。 本问题的关键在于选择合适的数据结构存储52张牌,难点在于在所选的数据结构下实现题给要求的翻牌操作。最主要的难点在于如何设计翻牌程序。第二个难点在于所有的牌都进行了翻牌操作后,如何知道每一张牌是否为正面向上。 3、原始数据的输入、输出格式:用户选择开始游戏后,输入一个正整数K(1<=K<=51),窗口将显示翻牌K次之后所有正面向上的牌的编号,然后选择继续游戏或结束游戏。 二、数据结构的选择和概要设计 1、数据结构的选择 本实验可以选择顺序表或单链表存储52张纸牌的信息,我选用单链表这种数据结构来对52张牌进行链接存储。单链表是有限个具有相同类型的数据元素组成的链表,且该链表中的每一个结点只有一个指针域。根据第一部分的问题分析可知该单链表中每个结点应包括三个部分:存储该结点所对应的牌的编号信息number域、记录该结点所对应的牌的翻牌次数times域、存储其直接后继的存储位置的next域(指针域)。 图1 单链表结点数据类型 故可创建以单链表为存储结构的结构体,如下: //自定义单链表结点数据类型 typedef struct node { int number; //纸牌的编号 int times; //翻牌的次数 struct node *next; //指向下一个结点的指针 }LinkList;

数据结构课程设计报告范例

Guangxi University of Science and Technology 课程设计报告 课程名称:算法与编程综合实习 课题名称: 姓名: 学号: 院系:计算机学院 专业班级:通信121 指导教师: 完成日期:2012年12月15日

目录 第1部分课程设计报告 (3) 第1章课程设计目的 (3) 第2章课程设计内容和要求 (4) 2.1 问题描述 (4) 2.2 设计要求 (4) 第3章课程设计总体方案及分析 (4) 3.1 问题分析 (4) 3.2 概要设计 (7) 3.3 详细设计 (7) 3.4 调试分析 (10) 3.5 测试结果 (10) 3.6 参考文献 (12) 第2部分课程设计总结 (13) 附录(源代码) (14)

第1部分课程设计报告 第1章课程设计目的 仅仅认识到队列是一种特殊的线性表是远远不够的,本次实习的目的在于使学生深入了解队列的特征,以便在实际问题背景下灵活运用它,同时还将巩固这种数据结构的构造方………………………………………………………………………………………………………………………………………………………………………………………..(省略)

第2章课程设计内容和要求 2.1问题描述: 迷宫问题是取自心理学的一个古典实验。在该实验中,把一只老鼠从一个无顶大盒子的门放入,在盒子中设置了许多墙,对行进方向形成了多处阻挡。盒子仅有一个出口,在出口处放置一块奶酪,吸引老鼠在迷宫中寻找道路以到达出口。对同一只老鼠重复进行上述实验,一直到老鼠从入口走到出口,而不走错一步。老鼠经过多次试验最终学会走通迷宫的路线。设计一个计算机程序对任意设定的矩形迷宫如下图A所示,求出一条从入口到出口的通路,或得出没有通路的结论。 图A 2.2设计要求: 要求设计程序输出如下: (1) 建立一个大小为m×n的任意迷宫(迷宫数据可由用户输入或由程序自动生成),并在屏 幕上显示出来; (2)找出一条通路的二元组(i,j)数据序列,(i,j)表示通路上某一点的坐标。 (3)用一种标志(如数字8)在迷宫中标出该条通路; (4)在屏幕上输出迷宫和通路; (5)上述功能可用菜单选择。

数据挖掘分类实验详细报告概论

《数据挖掘分类实验报告》 信息安全科学与工程学院 1120362066 尹雪蓉数据挖掘分类过程 (1)数据分析介绍 本次实验为典型的分类实验,为了便于说明问题,弄清数据挖掘具体流程,我们小组选择了最经典的决策树算法进行具体挖掘实验。 (2)数据准备与预处理 在进行数据挖掘之前,我们首先要对需要挖掘的样本数据进行预处理,预处理包括以下步骤: 1、数据准备,格式统一。将样本转化为等维的数据特征(特征提取),让所有的样 本具有相同数量的特征,同时兼顾特征的全面性和独立性 2、选择与类别相关的特征(特征选择) 3、建立数据训练集和测试集 4、对数据集进行数据清理 在本次实验中,我们选择了ILPD (Indian Liver Patient Dataset) 这个数据集,该数据集已经具有等维的数据特征,主要包括Age、Gender、TB、DB、Alkphos、Sgpt、Sgot、TP、ALB、A/G、classical,一共11个维度的数据特征,其中与分类类别相关的特征为classical,它的类别有1,2两个值。 详见下表: 本实验的主要思路是将该数据集分成训练集和测试集,对训练集进行训练生成模型,然后再根据模型对测试集进行预测。 数据集处理实验详细过程:

●CSV数据源处理 由于下载的原始数据集文件Indian Liver Patient Dataset (ILPD).csv(见下图)中间并不包含属性项,这不利于之后分类的实验操作,所以要对该文件进行处理,使用Notepad文件,手动将属性行添加到文件首行即可。 ●平台数据集格式转换 在后面数据挖掘的实验过程中,我们需要借助开源数据挖掘平台工具软件weka,该平台使用的数据集格式为arff,因此为了便于实验,在这里我们要对csv文件进行格式转换,转换工具为weka自带工具。转换过程为: 1、打开weka平台,点击”Simple CLI“,进入weka命令行界面,如下图所示: 2、输入命令将csv文件导成arff文件,如下图所示: 3、得到arff文件如下图所示: 内容如下:

数据结构实验总结报告

数据结构实验总结报告 李博杰PB10000603 一、调试过程中遇到哪些问题? (1)在二叉树的调试中,从广义表生成二叉树的模块花了较多时间调试。 由于一开始设计的广义表的字符串表示没有思考清晰,处理只有一个孩子的节点时发生了混乱。调试之初不以为是设计的问题,从而在代码上花了不少时间调试。 目前的设计是: Tree = Identifier(Node,Node) Node = Identifier | () | Tree Identifier = ASCII Character 例子:a(b((),f),c(d,e)) 这样便消除了歧义,保证只有一个孩子的节点和叶节点的处理中不存在问题。 (2)Huffman树的调试花了较长时间。Huffman编码本身并不难处理,麻烦的是输入输出。 ①Huffman编码后的文件是按位存储的,因此需要位运算。 ②文件结尾要刷新缓冲区,这里容易引发边界错误。 在实际编程时,首先编写了屏幕输入输出(用0、1表示二进制位)的版本,然后再加入二进制文件的读写模块。主要调试时间在后者。 二、要让演示版压缩程序具有实用性,哪些地方有待改进? (1)压缩文件的最后一字节问题。 压缩文件的最后一字节不一定对齐到字节边界,因此可能有几个多余的0,而这些多余的0可能恰好构成一个Huffman编码。解码程序无法获知这个编码是否属于源文件的一部分。因此有的文件解压后末尾可能出现一个多余的字节。 解决方案: ①在压缩文件头部写入源文件的总长度(字节数)。需要四个字节来存储这个信息(假定文件长度不超过4GB)。 ②增加第257个字符(在一个字节的0~255之外)用于EOF。对于较长的文件,会造成较大的损耗。 ③在压缩文件头写入源文件的总长度%256的值,需要一个字节。由于最后一个字节存在或不存在会影响文件总长%256的值,因此可以根据这个值判断整个压缩文件的最后一字节末尾的0是否在源文件中存在。 (2)压缩程序的效率问题。 在编写压缩解压程序时 ①编写了屏幕输入输出的版本 ②将输入输出语句用位运算封装成一次一个字节的文件输入输出版本 ③为提高输入输出效率,减少系统调用次数,增加了8KB的输入输出缓存窗口 这样一来,每写一位二进制位,就要在内部进行两次函数调用。如果将这些代码合并起来,再针对位运算进行一些优化,显然不利于代码的可读性,但对程序的执行速度将有一定提高。

数据结构课程设计报告—纸牌游戏

课题设计2:扑克牌游戏 1、问题描述 编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后…从第4张开始,以4为基数,是4的倍数的牌翻一次,直到最后一张牌;...再依次5的 倍数的牌翻一次,6的,7的直到以52为基数的翻过,输出:这时正面向上的牌有哪些?存储结构: 源程序:#include void main() { int i,j,a[52]; for(i=2;i<=52;i++) for(j=i-1;j<52;j+=i) a[j]=!a[j]; printf("正面向上的牌有:"); for(i=0;i<52;i++) if(a[i]) printf("%4d",i+1); } 测试结果:正面向上的牌有:1 4 9 16 25 36 49 算法的时间复杂度:T(n)=O(n2) 课题设计3:joseph环 一. 需求分析:利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。首先创建一个空链表,初始化链表,构造出一个只有头结点的空链表,建立好一个约瑟夫环。 1. 输入的形式和输入值的范围 本程序中,输入报数上限值m和人数上限l,密码,均限定为正整数,输入的形式为一个以“回车符”为结束标志的正整数。 2. 输出的形式 从屏幕显示出列顺序。 3. 程序功能 提供用户从键盘输入,Joseph约瑟夫环的必要数据,并显示出列顺序。 二、概要设计 以单向循环链表实现该结构。 1. 抽象数据类型的定义为:

ADT LNode { 数据对象:D={ai | ai∈CharSet,i= 1,2,…,n,n≥0} 数据关系:R1={< ai-1 ,ai > | ai ∈D,I=2,…,n} 三.源程序:#include #include typedef struct Node { int key;//每个人持有的密码 int num;//这个人的编号 struct Node *next;//指向下一个节点 }Node,*Link; void InitList(Link &L) //创建一个空的链表 { L=(Node *)malloc(sizeof(Node)); if(!L) exit(1); L->key=0; L->num=0; L->next=L; } void Creater(int n,Link &L) //初始化链表 { Link p,q; q=L; for(int i=1;i<=n;i++) { p=(Node *)malloc(sizeof(Node)); if(!p) exit(1); printf("the key_%d is:",i); scanf("%d",&p->key); p->num=i; L->next=p; L=p; } L->next=q->next; free(q); } void main() { Link L,p,q; int n,x; L=NULL; InitList(L);//构造出一个只有头结点的空链表 printf("please input the totle number of people:"); scanf("%d",&n);//总共的人数n printf("the start key is:");

相关文档
最新文档