数据通信实验总结报告

2024-08-31

数据通信实验总结报告(精选11篇)

1.数据通信实验总结报告 篇一

实验

SQL语言数据查询语言DQL

一、实验内容

了解SQL语言的SELECT语句对数据的查询,学会在Navicat for MySQL中用SELECT语句对表中的数据进行简单查询、连接查询、嵌套查询和组合查询。

启动Navicat for MySQL,用SELECT语句进行简单查询操作,具体实验步骤如下:(实验步骤里的内容)

1启动Navicat for MySQL,登录到本地数据库服务器后,连接到test数据库上。用Create Table建立Student表、Course表和Choose表:

2.用INSERT语句分别向Student表中插入3个元组、Course表中插入3个元组、Choose表中插入7个元组:

3.用SELECT语句,查询计算机学院学生的学号和姓名。

4.用SELECT语句的between„and„表示查询条件,查询年龄在20~23岁的学生信息。

5.用SELECT语句的COUNT()聚集函数,统计Student表中学生总人数。

6.分别用SELECT语句的max()、min()、sum()、avg()四个聚集函数,计算Choose表中C1课程的最高分、最低分、总分、平均分。

7.用SELECT语句对空值(NULL)的判断条件,查询Course表中先修课称编号为空值的课程编号和课程名称。

8.用SELECT语句的连接查询,查询学生的学号、姓名、选修的课程名及成绩。

9.用SELECT的存在量词EXISTS,查询与“张三”在同一个学院学习的学生信息。

10.用SELECT语句的嵌套查询,查询选修C1课程的成绩低于“张三”的学生的学号和成绩。

11.用SELECT语句的组合查询(UNION),查询选修了C1课程或者选修了C3课程的学生学号。

12.用SELECT语句的组合查询(UNION)与DISTINCT短语,查询选修了C1课程或者选修了C3课程的学生学号,并取消重复的数据。

二、遇到的问题及解决

该实验中,由于对SQL中语句的不熟悉,多次导致了输入错误,得不到实验结果,对存在量词EXISTS陌生,不熟悉,导致实验步骤中的13小题无法根据题目要求完成,要对书本上的知识加以熟悉。

三、心得体会

在实验过程中,要独立思考、独立完成实验任务,不懂的要虚心向教师或同学请教,这样自己才会学到真的东西,对自己有所提升,并且可以为专业课程有所帮助。

2.数据通信实验总结报告 篇二

2012年,莫言获得诺贝尔文学奖,他是有史以来首位获得诺贝尔文学奖的中国籍作家。2013年12月诺贝尔颁奖典礼前后,财新数据可视化实验室推出数据新闻,向一百年来的七百多位获奖者致敬。

如今,越来越多的中国媒体和中国人关注诺贝尔,而要了解诺贝尔的历史,财新网的这张《百年诺奖》数据可视化动态图一目了然。而且在此专题出品一年后,细心地加上了2014诺贝尔奖的信息。可视化设计师任远说,这个专题会常年更新下去。

这个项目 从数据分 析——视觉 通道——视觉结构——视觉设计,经过多次迭代的方式,最终得到较满意的设计。跟着可视化设计师任远的思路,图解设计过程:

一、数据分析

在分析了诺贝尔的原始数据以后,决定以时间线为导向,分别展示各年份的数据:

(1)该年各奖项获奖比例;

(2)该年各国各奖项获奖比例;

(3)该年各国按获奖年龄分布的获奖人,获奖人的数据包含:照片,名字,英文名,性别,获奖年龄,国家,奖项类别。

为获奖人的属性分配可视化的“视觉通道”:

(1)获奖年龄:位置;

(2)国家:位置;

(3)奖项类别:颜色;

(4)其他的数据信息:边栏。

二、视觉结构设计

由获奖年龄、国家、奖项类别的视觉通道:位置、颜色,可以确定用散点图的结构会比较直观。由于国家的列表项有40多个,用横向和纵向的散点图会超出界面边界,所以把散点图折成了圆形来表现。半径表示获奖年龄,对应圆心的角度表示国家,颜色表示奖项类别。再加一层时间轴就构成了基本的数据图(见图1)。

可以看到用圆形表示散点图,越靠近圆心等分的面积越小,比较受限制,可读性和视觉效果也不佳。所以将圆形变成了环形的散点图(见图2)。

三、权衡视觉设计、交互设计、用户体验

这样一来,数据图不论是在视觉和可读性上,都有了提高。可是问题又出现了,时间轴放在最里面,用户操作起来很不方便。因为还需要一个可以精确点选到从1900-2013年的某一年的功能。于是在接下来的几天尝试了另外几种解决方案。

根据之前的数据图,拓扑出来了6个方案(见图3),但都有各自的优缺点,始终不能达到权衡视觉设计、交互设计、用户体验的最完美状态。最后选择了两个比较接近的设计,第一个和第五个。然后,加入“各国各奖项获奖比例”继续往下设计。

最终选择了“图4”中的第二个方案。

四、环形文字的可读性处理

前面的图中文字在环形排列时会有反转的情况,可读性不高。在尝试左右反转的方式后,最终又改为另一种方式:将环形用“X”分为上下左右4个部分,上下用竖排文字,左右用横排文字,文字的排列遵循从左到右和从上到下。这种方式很适合中文字体,因为中文字体基本上都是显方形的,在元素细节构图上会比较好看。如果是英文字体的话可能不太美观,英文字体大多为长方形,所以竖排的文字会显的扁一些(见图5)。

五、真实的数据往往会有“缺陷”

诺贝尔的数据在“1900”和“1940-1942”两个年份段有空缺,时间在变化的时候,数据图右侧会出现两次人物列表空白。而两个年代,第一次是在开始时间1900年,第二次是在二战期间19401942年。

为了画面元素平衡,开始时,使用诺贝尔头像和文字标题替代右侧的空白处;二战期间,用坦克和文字标题替代右侧的空白处;都用插画风格来表现,和左侧的环形数据图相应和。插画用少面积的蓝色填充,达到画面色彩平衡。

六、整体和局部展示

整个诺贝尔可视化的过程都是展示单个年份,没有一个整体呈现的过程。所以在一开始的时候加了一个整体概况分布。

3.实验,因数据而精彩 篇三

一、小学生在实验数据处理中遇见的问题

在小学科学教学中学生对于数据的处理还存在许多的问题,这些问题都会严重影响学生的数据收集意识的培养,不利于学生养成严谨的科学探索态度。下面就主要谈几点问题。

1.学生对于数据的收集不太真实

在小学科学教学过程中,学生往往会对课堂实验表现出极大的兴趣,会比较认真地观摩教学实验,一旦学生有机会上手做实验也会非常认真。但是在做实验的过程中,学生经常忽略一个环节,那就是收集数据并记录数据。所以往往会出现学生实验结束后,课本上的记录却是空白情况。等到实验进行完成后,教师需要实验数据时,学生会互相询问数据,凭借自己的记忆,然后比较草率地填写数据,最终造成数据收集不太真实,会导致学生在处理实验现象的时候被不真实的数据所诱导,偏离实验本质要求。例如在《导体和绝缘体》的教学中,学生就只顾去分辨材料,实验也是越做越开心,可是最终却忘记记录材料是否绝缘,导致数据收集不太真实,容易出错,也不利于后期整理材料是否绝缘的实验报告。这种现象在低年级的学生身上很容易发生。

另一方面,教师在科学教学过程中经常会对学生进行提问,但是往往在提问中会找优秀的学生进行回答,当学生回答正确后,教师会停止讨论。所以久而久之,学生开始为了迎合教师的问题而对数据进行“修改”,最终给出“完美”的实验数据。故而,这也导致了学生在科学教学中收集数据不真实,影响学生数据意识的培养。

2.学生对数据的处理不准确

在小学科学教学过程中,还存在一个问题,就是学生对于数据的收集处理不太准确。这也会导致学生在科学数据处理中出现错误,不利于数据意识的培养。例如在小学科学实验中经常会出现对比实验,而且在对比试验中还经常出现比较高的要求,但是学生却不能有效对实验中的对比变量进行认识和控制,所以会导致在科学实验过程中出现数据处理不准确,最终与实验现象差距较大,出现错误等现象。还有在一些需要利用仪器进行实验的科学试验中,学生因为不能准确掌握仪器正确使用方法和规则,也很容易造成数据的错误采集。例如对于温度计的读数,正确方法是平视温度计的刻度线,但是如果学生俯视或者仰视温度计刻度线,那么就会导致温度计读数出现错误,最终导致收集的数据不准确,影响实验效果。

3.学生对实验数据的收集不太全面

在科学实验过程中,经常会发生学生因为时间问题自己保留一部分实验数据,教师就参考学生这部分数据进行实验分析,最终导致实验出现较大的偏差,这样的实验数据导致实验结果不全面,降低实验真实性。所以实验数据收集不全面也是学生经常容易在科学试验中所出现的问题。

二、小学生数据处理中存在问题的原因

对于在小学科学实验教学过程中,学生容易出现的问题需要仔细分析其背后的原因,帮助学生尽快纠正,利于学生养成良好的数据意识,利于学生未来研究能力的提升。

首先从教师角度讲,在小学科学实验教学过程中缺乏对学生数字收集意识的培养。教师从教学计划出发,忽略学生在数字收集上的能力拓展,只是教会学生分析实验现象和实验结果,往往忽略了学生需要掌握数据收集,分析和整理才能更加准确地形成数据意识,也才能更好地分析出实验现象和结果,所以教师在意识上还存在问题。另外教师在指导学生形成数据意识的方法上也存在问题。教师不能激发学生自己形成数据收集的意识,而是一味让学生记录数据,寻找数据,整理数据,缺乏对学生创新能力的培养,让学生只形成简单的数据记录,不能有效建立数据敏感,更不能通过数据得出结论,指导实验。

从学生角度看,学生对于实验比较好奇,但是对实验数据的重视度却偏低,很多时候收集实验数据都只是为了完成任务,而不是提高自己的数据收集能力。所以这种意识淡薄的情况就会导致数据收集出现问题,最终影响数据意识的形成。另外,学生很容易为了获得教师的认可和表扬,就会去对收集的数据进行“修改”,然后导致所有试验数据处理痕迹过多,严重影响实验的真实性,最终导致实验数据无法体现实验现象,更加大学生对数据的收集的淡薄意识,不利于数据意识的创新与发展。最后,学生在实验过程中没有记录数据的意识,导致在试验后没有充分时间整理数据,所以很容易出现错误的数据,这也是数据不准确的主要原因。

最后,仪器的准确度以及操作方法也成为学生数据意识难以形成的原因。

三、对策

既然知道了问题,并且分析了原因,那么就需要进一步落实对策,帮助学生收集好数据,分析好数据,利用好数据,形成良好的数据意识,帮助学生创新与发展,提高学生的探索能力,利于学生未来的成长。

1.充分做好课前准备

首先在小学科学实验教学过程中,教师要加强学生数据意识的培养,要精心为学生数据意识培养设置实验。任何科学的推导都需要数据作为支撑,所以在数据的收集中更加需要精心设计,教师需要为学生数据收集预留空间,教会学生科学地探究知识,结合原有不足的数据收集问题,针对性设计实验,帮助学生观察实验的同时还能做好数据采集工作,帮助学生形成良好的数据收集意识,要时刻提醒学生数据收集的重要性,让学生重视数据,提高数据的准确性。

其次,要为学生创造良好的氛围,让学生在科学实验过程中更加大胆和创新。对于学生数据出现问题后,教师要耐心了解,要倾听学生内心的想法,让数据收集有问题的学生也能畅所欲言。这样可以培养学生的勇气和胆量,更加利于学生在数据收集过程中勇于创新,大胆采集,利于学生建立数据意识。

2.设计好记录表,让数据说话

要让学生养成数据收集的意识,就需要让学生看到数据的价值,最好是能直观为学生展示出来。所以利用数据记录表格就可以准确为学生做好数据记录,帮助学生透过数据看到实验的真实情况,更加了解数据的价值,更有利于学生培养数据意识。例如在“测量心跳和呼吸”这个实验中,教师需要制作一个表格,在“行”与“列”的首个表格中注明“心率”和“呼吸频率”,这样学生就可以将不同的心率对应到不同的呼吸频率中,这样得出的数据就是一一对应,既能有效收集数据,而且还能让数据发声,清楚展示出心率与呼吸频率的对应关系,让学生一目了然,更能体会到数据的真实性和有效性,更容易激发学生数据意识的形成。

3.教师要熟练实验,帮助学生解惑

教师在指导学生实验前需要自己先熟悉实验,要对实验数据进行掌握和预判断。因为每个实验存在的条件不一致,所以很可能在实验过程中出现数据难以掌握的情况,最终数据不能有效解决实验现象,就会打击学生收集数据的积极性,导致学生数据意识的偏差。所以教师需要对每个实验的数据进行预先评价,控制数据的范围,让学生得到的数据能够更加准确。例如“研究拉力大小与小车的运动的关系”,由于摩擦力的存在,所以,最开始小车静止时,拉力计显示的数据会比后面小车运动的数据大,但是学生往往会觉得这是错误的数据,所以教师在预判断的时候就需要指导学生进行数据处理,帮助学生形成良好的数据分析能力,让学生相信数据,借助数据,最终解决问题,不断在数据使用中进行创新与发展,更有利于数据意识的形成。

四、结束语

数据是试验中非常重要的资源,对于现象的解释,实验的成败具有重要作用,所以在小学科学实验教学中帮助学生形成良好的数据意识,让学生在数据上进行创新和发展,为将来的实验学习提供思维方法,帮助学生成长。

4.通信实验报告4 篇四

学院(系):

信息与通信工程学院 专业:

电子信息工程

班级: 姓

名:学号:组:___ 实验时间:

2016.5.05 实验室:

创新园 C227

实验台: 指导教师签字:成绩:

实验四 FSK传输系统实验

一、实验数据及测试波形

(一)、FSK调制

1、FSK基带信号观测

1码基带信号周期:26.912us

2、发端同相支路和正交支路信号

0码基带信号周期:53.680us

输入全1码两正交信号

产生正交载波的目的是:方便解调时滤波。

3、连续相位FSK调制基带信号观测 由图可得结论:

输入0/1码和输入特殊序列时在码元切换点基带信号波形相位都是连续的。

输入0/1码和FSK基带信号

输入特殊序列码和FSK基带信号

4、FSK调制中频信号波形观测

输入0/1码和FSK中频信号 断开一路基带调制信号:

输入特殊序列码和FSK中频信号

输入0/1码和FSK中频信号

输入特殊序列码和FSK中频信号

由图可得知,采用FSK一路同相信号时,TPK03输出波形在码元切换点相位是不连续的,而采用FSK同相支路信号与正交支路信号时,TPK03输出波形在码元切换点相位是连续的。

(二)、FSK解调

1、解调基带FSK信号

图一:输入1码和解调基带信号,周期26.72us

图二:输入0/1码和解调基带信号

2、接收位同步信号相位抖动观测

1码观测不到抖动

由图,在输入全0码和全1码时TPMZ07信号波形没有抖动,而在输入0/1码和特殊序列码时TPMZ07信号波形有抖动。

思考:和全1码时无抖动,是因为输入信号无相位变化,所以无抖动

4、解调器位定时恢复与最佳抽样判决点波形观测 图四:

5、位定时锁定和位定时调整观测

输入M序列

输入1码

输入0码

全1码

断开中频环路,M序列

不断按确认键,观察到TPMZ07调整过程和锁定之后的相位之间没有变化。当输入全1码或全0码时,观察到TPMZ07调整过程和锁定之后的相位之间有变化。

6、观察各种输入码字下FSK的输入输出数据

图十:输入0/1码

7、FSK解调过程综合分析

图十一:输入特殊序列码

输入M序列

二、思考题

1、FSK正交调试方式与传统一般FSK调制方式有什么不同?其主要有哪些特点?

一般FSK调制方式产生FSK信号的方法是根据输入的数据比特是0还是1,在两个独立的振荡器中切换。采用这种方法产生的波形在切换的时刻相位是不连续的,因此这种FSK信号称为不连续FSK信号。而FSK正交调制方式产生FSK信号的方法是,首先产生FSK基带信号,利用基带信号对单一载波振荡器进行频率调制。在二进制ASK系统中,其频带利用率是1bit/s·Hz,若利用正交载波调制技术传输ASK信号,可使频带利用率提高一倍。如果再把多进制与其它技术结合起来,还可进一步提高频带利用率。

2、TPi03和TPi04两信号具有什么关系?两信号正交。

3、测试各测量点工作波形:如上图。

4、叙述位定时的调整过程,并说明输入码字对位定时恢复的影响,在实际通信中为什么要加扰码措施。

输入码字当中的连1或者连0对于接收端位定时的提取有很大的影响,对于接收端讲要准确的提取位定时,对接收码流要求不能有太多的连1连0,因此接收码流中连1连0的数目会影响位定时的恢复。

5.数据结构实验报告 篇五

电子文档命名为“学号+姓名”,如:E01214058宋思怡

《数据结构》实验报告

(一)学号:姓名:专业年级:

实验名称:线性表

实验日期:2014年4月14日

实验目的:

1、熟悉线性表的定义及其顺序和链式存储结构;

2、熟练掌握线性表在顺序存储结构上实现基本操作的方法;

3、熟练掌握在各种链表结构中实现线性表基本操作的方法;

4、掌握用 C/C++语言调试程序的基本方法。

实验内容:

一、编写程序实现顺序表的各种基本运算,并在此基础上设计一个主程序完成如下功能:

(1)初始化顺序表L;

(2)依次在L尾部插入元素-1,21,13,24,8;

(3)输出顺序表L;

(4)输出顺序表L长度;

(5)判断顺序表L是否为空;

(6)输出顺序表L的第3个元素;

(7)输出元素24的位置;

(8)在L的第4个元素前插入元素0;

(9)输出顺序表L;

(10)删除L的第5个元素;

(11)输出顺序表L。

源代码

调试分析(给出运行结果界面)

二、编写程序实现单链表的各种基本运算,并在此基础上设计一个主程序完成如下功能:

„„„„

„„„„

小结或讨论:

(1)实验中遇到的问题和解决方法

(2)实验中没有解决的问题

6.数据挖掘实验报告 篇六

—--— -K 最近邻分类算法 指导老师 :

陈 莉

学生姓名

:

李阳帆

学 学

号 号

201531 46 7

专 专

业 :

计算机技术

20 16年 8月 月 31 日

摘 摘要

数据挖掘就是机器学习领域内广泛研究得知识领域,就是将人工智能技术与数据库技术紧密结合, 让计算机帮助人 们从庞大得数据中智能地、自动地提取出有价值得知识模式,以满足人们不同应用得需要。

K K近邻算法(KNN)就是基于统计得分类方法,就是大数据理论与分析得分类算法中比较常用得一种方法。该算法具有直观、无需先验统计知识、无师学习等特点,目前已经成为数据挖掘技术得理论与应用研究方法之一。本文主要研究了 K K

近邻分类算法, 首先简要地介了 绍了数据挖掘中得各种分类算法,详细地阐述了 K近邻算法得基本在 原理与应用领域,最后在 mat lab 环境里仿真实现,并对实验结果进行分析,提出了改进得方法。

关键词:K

近邻,聚类算法,权重,复杂度,准确度

1、、引言......................................................................................0 2、、义 研究目得与意义误错ﻩ 错误!未定义书签。

3、、算法想 思想误错ﻩ 错误!未定义书签。

4、、现 算法实现 1ﻩ4、1

置 参数设置误错ﻩ 错误!未定义书签。

4、2 集 数据集 1ﻩ4骤、3实验步骤误错ﻩ 错误!未定义书签。、4 析 实验结果与分析误错ﻩ 错误!未定义书签。

5、、思 总结与反思误错ﻩ 错误!未定义书签。

附件1 1误错ﻩ 错误!未定义书签。

1、、引言 随着数据库技术得飞速发展,人工智能领域得一个分支—— 机器学习得研究自 20 世纪 50 年代开始以来也取得了很大进展。用数据库管理系统来存储数据,用机器学习得方法来分析数据,挖掘大量数据背后得知识,这两者得结合促成了数据库中得知识发现(Knowledge Discovery in Databases,简记 KDD)得产生,也称作数据挖掘(Data Ming,简记 DM)。

数据挖掘就是信息技术自然演化得结果。信息技术得发展大致可以描述为如下得过程:初期得就是简单得数据收集与数据库得构造;后来发展到对数据得管理,包括:数据存储、检索以及数据库事务处理;再后来发展到对数据得分析与理解,这时候出现了数据仓库技术与数据挖掘技术。数据挖掘就是涉及数据库与人工智能等学科得一门当前相当活跃得研究领域。

数据挖掘就是机器学习领域内广泛研究得知识领域,就是将人工智能技术与数据库技术紧密结合,让计算机帮助人们从庞大得数据中智能地、自动地抽取出有价值得知识模式,以满足人们不同应用得需要[1].目前,数据挖掘已经成为一个具有迫切实现需要得很有前途得热点研究课题。

2、、研究目得与意义 近邻方法就是在一组历史数据记录中寻找一个或者若干个与当前记录最相似得历史纪录得已知特征值来预测当前记录得未知或遗失特征值[14]。近邻方法就是数据挖掘分类算法中比较常用得一种方法。K近邻算法(简称 KNN)就是基于统计得分类方法[15]。KNN 分类算法根据待识样本在特征空间中 K 个最近邻样本中得多数样本得类别来进行分类,因此具有直观、无需先验统计知识、无师学习等特点,从而成为非参数分类得一种重要方法。

大多数分类方法就是基于向量空间模型得。当前在分类方法中,对任意两个向量:

x=与存在 3 种最通用得距离度量:欧氏距离、余弦距离[16]与内积[17]。有两种常用得分类策略:一种就是计算待分类向量到所有训练集中得向量间得距离:如 K近邻选择 K 个距离最小得向量然后进行综合,以决定其类别。另一种就是用训练集中得向量构成类别向量,仅计算待分类向量到所有类别向量得距离,选择一个距离最小得类别向量决定类别得归属。很明显,距离计算在分类中起关键作用。由于以上 3 种距离度量不涉及向量得特征之间得关系,这使得距离得计算不精确,从而影响分类得效果。

3、、算法 思想 K 最近邻(K-Nearest Neighbor,KNN)算法,就是著名得模式识别统计学方法,在机器学习分类算法中占有相当大得地位.它就是一个理论上比较成熟得方法。既就是最简单得机器学习算法之一,也就是基于实例得学习方法中最基本得,又就是最好得文本分类算法之一.其基本思想就是:假设每一个类包含多个样本数据,而且每个数据都有一个唯一得类标记表示这些样本就是属于哪一个分类,KNN就就是计算每个样本数据到待分类数据得距离,如果一个样本在特征空间中得 k 个最相似(即特征空间中最邻近)得样本中得大多数属于某一个类别,则该样本也属于这个类别。该方法在定类决策上只依据最邻近得一个或者几个样本得类别来决定待分样本所属得类别.K—最临近分类方法存放所有得训练样本,在接受待分类得新样本之前不需构造模型,并且直到新得(未标记得)样本需要分类时才建立分类.K-最临近分类基于类比学习,其训练样本由N维数值属性描述,每个样本代表 N 维空间得一个点。这样,所有训练样本都存放在 N维模式空间中.给定一个未知样本,k—最临近分类法搜索模式空间,找出最接近未知样本得K 个训练样本。这 K 个训练样本就是未知样本得 K 个“近邻”.“临近性”又称为相异度(Dissimilarity),由欧几里德距离定义,其中两个点 X(x 1,x 2 ,„x n)与 Y(y 1 ,y 2,„yn)得欧几里德距离就是:

未知样本被分配到K个最临近者中最公共得类.在最简单得情况下,也就就是当K=1时,未知样本被指定到模式空间中与之最临近得训练样本得类.4、、算法实现 4、、1 1 参数设置 K 值得设定 K 值设置过小会降低分类精度;若设置过大,且测试样本属于训练集中包含数据较少得类,则会增加噪声,降低分类效果。通常,K值得设定采用交叉检验得方式(以 K=1为基准),通过查找相关资料,K一般低于训练样本数得平方根,本实验中得训练样本数为 100个,因此选取 k=7。、2 数据集 本文得实验数据采用软木塞得数据集,软木塞得样本可分为三类,分别用1,2,3代表,共 150 个样本,我们选取其中得 100 个样本为训练集,其余得 50 个样本为测试集。每个样本均包含10 维特征,由于用 10 维特征计算量太大,本实验得目得主要就是明白 K-最近邻算法得思想,重点不在计算,因此我们选取其中得两个属性作为

本实验得数据,实验数据得部分截图如图 1 所示。

图 1、部分实验数据、3 实验步骤 第一步,初始化距离为最大值。

第二步,计算未知样本与每个训练样本得距离 dist。

第三步,得到目前 K 个最临近样本中得最大距离 maxdist。

第四步,如果dist小于 maxdist,则将该训练样本作为 K-最近邻样本.第五步,重复步骤 2、3、4,直到未知样本与所有训练样本得距离都算完.第六步,统计K—最近邻样本中每个类标号出现得次数。

第七步,选择出现频率最大得类标号作为未知样本得类标号。、4 实验结果与分析 按照上述实验步骤,在matlab中仿真实现k-近邻分类算法得结果如下图2所示,图中得第一列数据表示样本编号,第二列与第三列表示软如塞数据得两位特征得值,第三列得数字表示本实验得分类结果图,第四列表示样本实际所属类別。

图 3 中列出了详细错误信息.第一行与第一列表示样本类别,第 i 行第 j 列得元素表示第 i类样本被分为第 j 类样本得个数(2≤i,j≤4),第五列表示每类样本分类错误总数,第六列表示错误率。由图中数据易得,本实验得平均正确率为 86、7%。

图 2、7—最近邻分类结果图

图 3、错误统计图

KNN 方法虽然从原理上也依赖于极限定理,但在类别决策时,只与极少量得相邻样本有关。因此,采用这种方法可以较好地避免样本得不平衡问题。另外,由于 KNN方法主要靠周围有限得邻近得样本,而不就是靠判别类域得方法来确定所属类别得,因此对于类域得交叉或重叠较多得待分样本集来说,KNN 方法较其她方法更为适合。

该方法得不足之处就是计算量较大,因为对每一个待分类得文本都要计算它到全体已知样本得距离,才能求得它得 K个最近邻点.目前常用得解决方法就是事先对已知样本点进行剪辑,事先去除对分类作用不大得样本。该算法比较适用于样本容量比较大得类域得自动分类,而那些样本容量较小得类域采用这种算法比较容易产生误分。

5、、总结与反思 模式分类在现实领域有着非常广泛得应用。

K近邻算法就是模式分类算法中一类常用得算法。本文针对传统得 KNN 算法得不足之处,提出了两点改进措施。

1、针对 KNN 算法得计算量大、速度慢得缺点,对训练数据采用了预处理得方法.首先采用某一聚类方法对训练数据进行分类,然后再与 K近邻方法相结合来判断待测样本得类别。现有得方法都就是经过聚类之后确定类别,按一定得规则挑选出来具有代表性得数据。然后再将这些挑选出来得数据作为训练样本.但这类方法能去除得数据非常有限,因此对计算量大得改进不大,而本文提出得新得算法:在聚类之后,首先计算出来各个类别得中心,然后只需要考虑待测样本与聚类中心得距离就可以.然后再根据最终得到得距离得大小判断该点所属得类别。通过实例验证表明,该方法在算法得时间复杂度方面有一定得改进。

2、关于准确度得问题,我们主要就是舍弃了原来常用得欧式距离得计算公式,主要考虑了属性对分类得影响,在欧式距离得计算中引入了权值.尽管权值得确定在一定程度上增加了计算时间得代价,但就是从改进分类准确率上来说仍然就是必要得,尤其就是在数据中无关属性比较多,传统得分类算法误差较大得情况下学习特征权值尤其适用。权值得确定也已经有了不少得方法,如可以通过神经网络来确定权值等。本文从训练样本出发,逐一统计计算每一个属性对分类结果得影响,根据影响得大小来确定权值。通过实例验证,可知这种方法得到得权值与其她常用得方法相比,在分类准确度方面有一定得提高。

参考文献

[ [1 1] ] 邓箴, , 包宏、用模拟退火改进得

KNN 分类算法 [J ]。计算机与应用化学,2 010,27(3)

:3 03--307.[2 2 ]郭躬德,黄杰,陈黎飞、基于

K NN

模型得增量学习算法 [J ]。模式识别与人工智能,20 10 ,23(5):70 1-7 7 07。

[ 3 ]黄杰,郭躬德,陈黎飞、增量

K K N N 模型得修剪策略研究[J J ].小型微型计算机系统,201 1, , 5(5):

5- 849.[ [ 4] ] 李欢,焦建民.简化得粒子群优化快速

KNN 分类算法[J J ]。计算机工程与应用,2 008,4 4(3 2)):

57--5 5 9。

[ [5 5 ]王晓晔, , 王正欧.K -最近邻分类技术得改进算法[J J ]。电子与信息学报,2005,27 7(3):4 87 7 — 49 1.

[ 6 ] Gu o

Gongde, W ang Hui, Be ll

D D,e t al.U sin g K NN model for aut t o ma ti i c

tex t

ca t egori za a t ion [ J ]、Soft

putin g — A F u sion o f

F F oun dat i on, M e thodo lo gi es

and d

A pplicatio n,200 6, ,1 1 0(5):42 2 3--430.[ [7 7 ]余小鹏,周德翼。一种自适应k-最近邻算法得研究 [J].,计算机应用研究,2006(2): 7 70 0 -7 7 2。

附件 1:

源代码

KNN、m

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %

KNN、m

K-最近邻分类算法 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% A=x ls rea d('E : 上课\机器学习模式识别课件 数据\COR K_ STOPPEx RS、xls",2); f=zer os(150,5); f f(:, 1:2)=A(1 :150, 3:4); f1 =A(1 :50,3 :4); f2= A(51:100,3 :4);f3= A(101:15 0, 3:4);c cl s= zero s(1 50,10);o for

i= 1:150

for j =1:1 50

c ls(i,j)=norm(f(i,1:2)-f(j,1 :2));

end end % 对计算出得每个样本与其她 150 个样本(包括自己)得距离排序,选 K=10 arr ay= zeros(300,11); f or ii =1:150

[val ue,inde x]=sort(cl s(i i, :));

arra y(2 *ii— 1,:)=val ue(1: 11);

a rray(2 *ii, :)=in dex(1 :1 1); end 类 %对每个样本分类 fo r ii= 1:150

a11=length(f ind(array(2 *i i,:)〈50));

a12=l ength(f ind(arr ay(2*ii,:)〉50 &a rr ay(2*i i,:)〈100)); ;

a13=len gth(find(a rray(2 *ii,:)〉1 00 &array(2 *i i,:)<15)

0));

if(max(max(a11,a12),a13)==a11)

f(ii,3)=1;

else if(max(max(a11,a12),a1 3)==a12)

f(ii,3)=2;

els e

f(i i,3)=3 ;

end

en d

end % 错误计算 e rro r=ze ro s(3,5);for

i=1 :50

if(f(i,3)= =2)

error(1,2)= error(1,2)+1 ;

end

if(f(i,3)==3)

err or(1,3)= erro r(1,3)+1 ;

end

if(f(5 0+i,3)==1)

er ror(2,1)=erro r(2,1)+ 1;

end

if(f(5 0+i, 3)==3)

err or(2,3)=e rror(2,3)+1 ;

en d

if(f(100+ i,3)==1)

error(3,1)= erro r(3,1)+1;

end

i f(f(100+i, 3)== 2)

er ror(3,2)=er ro r(3,2)+ 1;

end

e nd for

7.实验数据的获取与处理 篇七

[获取数据的途径]

1. 直接从测量工具上读取.除了基本读数的方法外,对于微小量,通常还会采用“积少成多”的方法——累积法。如在“用双缝干涉测波长”的实验中,相邻两亮条纹间距[Δx]很小,可以先测量多级条纹的间距,再用[Δx=xn-xmn-m],求出[Δx]。

2. 改变实验条件,测出多组数据。如在描绘小灯泡的伏安特性曲线实验中,调节滑动变阻器滑片的位置,从0开始,测出多组电压表和电流表的示数。在探究弹簧的伸长和受到的外力关系的实验中,是不断增加钩码的个数,来测量对应的伸长量[Δx]。

3. 从轨迹图上获取数据。(1)从纸带上获取数据。如在“研究匀变速直线运动”“验证机械能守恒定律”“测自由下落物体运动的重力加速度”等实验中,纸带上记录的是运动物体(或者质点)在不同时刻所在的位置,因此,可以从纸带上测量出不同时刻的位置坐标。(2)从坐标系上获取数据。如在“研究平抛物体的运动”中,通过描迹的方法,得到了物体做平抛运动的轨迹,只要把描出的轨迹图线放在坐标系内,就可以读出几个特殊点的坐标,从而分析平抛运动的特点,计算出测物体的初速度。

4. 辅助方法。如在用油膜法测分子直径的实验中,为了得到油膜的面积,采用近似的思想,用数小格子的方法,估测油膜的面积。

[处理数据的方法]

1. 作图法。(1)作力的图示:如在“验证平行四边形定则”的实验中,用作力的图示法,比较[F1]与[F2]的合力[F]的图示与实验中测量出来的[F测]的图示之间的位置和大小关系,从而验证在误差允许的范围内平行四边形定则的正确性。(2)描迹法:如在“研究平抛物体的运动”“描绘等势线”实验中,通过描绘轨迹的方法来处理数据。(3)画光路图:如在“测定玻璃的折射率”的实验中,不论采用什么方法测定,最终都要作光路图,找到两个角(入射角和折射角)以及计算这两个角的正弦的有关线段。

2. 解析法。解析法就是从实验原理出发,把得到的数据代入相应的物理公式、定理或者定律,列方程求解,最后得出结论。如在“研究匀变速直线运动”的实验中,利用公式[vn=xn+1-xn-12T]求某点的瞬时速度,利用逐差法[Δs=aT2]求运动过程中的平均加速度a。在“验证机械能守恒定律的实验”中,由比较减少的重力势能[mgΔh]与增加的动能[12mv22-12mv21],转化为比较[gΔh]和[12v22-12v21],要是在误差允许的范围内两个量相等,便可以验证机械能守恒定律的正确性。

3. 图像法。如在“单摆测重力加速度”“探究做功与速度变化的关系”“测定电源的电动势和内阻”等实验中,处理多组实验数据时,总是先建立平面直角坐标系,作出相应的图像(一般是直线),再从图像上获取信息(直线的斜率,坐标轴上的截距等)并处理这些信息,从而得出结论。

8.数据库实验报告 篇八

一、实验室名称: 软件工程实验室

二、实验项目名称:创建HIS数据库

三、实验原理: 数据定义语言DDL

四、实验目的:

在SQL Server 2008 中创建HIS 数据库和表。

五、实验内容:

用SQL的Create Database语句创建医院数据库HIS,并创建表。备份数据库并删除。

六、实验器材(设备、元器件):

PC机,WINDOWS, MS SQLSERVER 2008

七、实验步骤:

(一)用SQL的Create Database语句创建学生学籍管理数据库。

(二)用SQL的Create Table创建学生信息表、学生成绩表、课程信息表。注意表中的各类约束。

八、实验数据及结果分析:

建立学生学籍管理数据库:

建立学生信息表:

建立课程信息表:

建立学生成绩表:

在学生信息表中添加联系方式:

删除学生信息表中的联系方式:

建立视图:

建立学生信息视图:

建立课程信息视图:

建立成绩信息视图:

创建索引:

九、实验结论:使用SQL Server 2008中数据定义语言DDL成功创建了学生学籍管理数据库并在该数据库中依次成功创建学生信息表、课程信息表、学生成绩表,视图以及索引。

十、总结及心得体会:通过本次实验,学会了使用SQL Server 2008中数据定义语言DDL创建一个数据库以及创建相关的表和表中各列和它们之间的关系。

9.数据库上机实验报告 篇九

试验内容

1、数据表的建立

基本表《简单的》带有主键

带有外码约束的(外码来自其他表或者本表)

2、数据表的修改

添加删除列

修改列属性类型

添加删除约束(约束名)

元组的添加,修改,删除

删除数据表

试验过程

1、create

table

student

(sno

char(9)

primary

key,/*sno是主码

列级完整性约束条件*/

sname

char(20)

unique,/*sname取唯一值*/

ssex

char(2),sage

smallint,/*类型为smallint*/

sdept

char(20)

/*所在系*/);

create

table

course

(cno

char(4)

primary

key,/*列级完整性约束条件,cno是主码*/

cname

char(40),cpno

char(4),/*cpno的含义是先行课*/

ccredit

smallint,foreign

key

(cpno)

references

course(cno)

/*表级完整性约束条件,cpno是外码,被参照表是course,被参照列是cno*/);

create

table

sc

(sno

char(9),cno

char(4),grade

smallint,primary

key

(sno,cno),/*主码有两个属性构成,必须作为表级完整性进行定义*/

foreign

key

(sno)

references

student(sno),/*表级完整性约束条件,sno是外码,被参照表是student*/

foreign

key

(cno)

references

course(cno),/*表级完整性约束条件,cno是外码,被参照表示course*/);

1、create

table

s

(cno

varchar(3),/*变长的字符串,输入2个字符就是两个字符不会补空格*/

sname

varchar(20),status

int,city

varchar(20),constraint

pk_sno

primary

key(sno),/*约束条件的名字为pk_sno*/);

create

table

p

(pno

varchar(3),pname

varchar(20),color

varchar(3),weight

int,constraint

pk_pno

primary

key

(pno),/*约束条件的名字是pk_pno*/);

create

table

j

(jno

varchar(3),jname

varchar(20),city

varchar(20),constraint

pk_jno

primary

key(jno)

/*约束条件的名字为pk_jno*/);

2、create

table

spj

(sno

varchar(3),/*第一个表中的主码*/

pno

varchar(3),jno

varchar(3),qty

int,/*数量*/

constraint

pk_spj

primary

key(sno,pno,jno),/*主码由3个属性组成*/

foreign

key(sno)

references

s(sno),/*表级完整性约束条件,sno是外码,被参照表是s*/

foreign

key(pno)

references

p(pno),/*表级完整性约束条件,pno是外码,被参照表是p*/

foreign

key(jno)

references

10.《数据结构》实验教学方法探讨 篇十

关键词:数据结构实验教学

0引言

《数据结构》是计算机专业课程体系的核心课程之一。课程主要讲述各种数据的逻辑结构、物理结构及基本操作的实现算法以及数据查找、排序算法,并对各种算法进行性能分析和比较。

根据调查发现,目前大多数院校《数据结构》课程教学现状不容乐观。学生普遍反映课程学习比较困难,教师也感觉教学效果不理想。实验教学更是因为程序设计语言基础不扎实、课程内容太抽象等原因而较难开展,有些学校因此而缩短学时甚至不开设实验。一些专家和教师就课程实验教学改革已经提出了一些具体的教学方法,如案例驱动、课题答辩等。这些方法都具有比较重要的借鉴价值,但某些文章过于片面的强调某一种教学方法。笔者认为根据学生的实际情况完善教学设计、加强教学管理,通过行之有效的教学手段使学生学有所获才是根本。下面结合自己的实际教学工作,谈谈对数据结构实验教学方法的认识。我校《数据结构>课程理论学时48,实践学时16,教材选用严蔚敏的《数据结构(C语言版)》)。

1讲好理论第一课.明确课程性质

仅从课程名称来看,<数据结构》就很容易被误解为实践性不强的理论课。讲好第一堂理论课非常重要,应让学生明确课程性质并理解实践学习的重要性。

结合程序设计语言、操作系统等课程内容,笔者设计了一些学生比较熟悉并容易理解的应用实例和学生一起探讨。如:int a[10]和a[i]-5的确切含义;文件簇的链式形态;国际象棋大师与超级计算机的对决:图的着色问题等。在讲解图的着色问题时引导学生思考图的存储中需要关心什么,怎么存以及大致的程序逻辑等。通过对实例的分析,引入课程主要内容,学生也可明确课程的性质和专业地位并思考课程学习目标。

2制定实验教学计划.设计实验内容

程序设计语言是数据结构的前驱课程之一,多数院校都是以c语言程序设计作为学生程序逻辑训练的课程。数据结构教材中采用类C语言来描述算法,对指针、结构体等内容并未作详细的介绍。对于刚刚学完C语言的学生来说,指针等内容本来就比较模糊,要将类C算法转换为程序实现就更加困难。

在制定实验教学计划时,可以采用由易到难、逐步加深的方式来安排实验内容。结合实验学时数和教学大纲要求,笔者将实验内容作了如下设计和安排:

2.1第一次上机任务只要求学生运用以前学过的C语言知识来编写一个程序:给定一个整数序列,要求①用冒泡或选择算法进行排序:②输入一个整数x,在此有序序列中进行查找,如成功,则返回其位置;③如查找不成功,将×插入到序列中并使序列仍然有序。此题目运用到数组的定义、排序、查找、数组元素插入算法等相关内容。通过此实验,不仅能了解学生程序语言的熟悉程度,也能了解学生对排序和查找等基础算法的掌握情况,为后面教学内容设计作好铺垫。

2.2结合教学进度要求学生实现常见数据结构的基本操作,并能作一些验证性的实验。如用数字菜单的形式实现单向链表的基本操作,并完成两个有序链表合并算法的验证。实验要求学生能实现大多数基本操作算法,完成头文件的设计,并能利用已实现的基本操作完成复杂算法的验证。通过此类实验,学生对数据结构的理解更直观,程序逻辑更清晰,C语言的掌握能力逐渐增强,同时也为面向对象课程的学习打下一定的基础。

2.3设计性实验即课程设计安排。课程设计的目的在于培养学生分析和解决实际问题的能力,训练和提高学生规范的程序设计方法。教师可推出一些典型的并与后续课程有一定联系的题目供学生选择。每个题目规模不能太小,并能反映相关数据结构在程序设计中起的关键作用。如:①实现一个串的基本操作演示程序,提供命令行的输入(仿照COMMAND),并对命令行能进行简单的编译和出错处理,最后根据命令动词的功能来执行命令:②利用哈夫曼编码算法实现简单文本文件的压缩和解压。题目随着理论教学进度推出,有难有易,学生结合自己实际来选择并可提前完成。

3规范实验过程.加强实验教学管理

为保障划的有效实施,必须规范实验过程并加强实验教学管理。

3.1根据计划制定实验指导书。指导书中给出每个实验的目的、学时、内容等。其中设计性实验另给出一些基本的分析思路,每个实验都适当的添加一些选作题。学生通过阅读实验指导书能进一步明确每次实验的具体内容和要求。

3.2要求学生做好上机前的准备。大二学生的编码速度普遍较慢,如果把实验课时间主要用于输入代码是非常不值得的,应将主要精力放在程序调试上面。这样不仅有充足的提问时间,也便于教师归纳并集中讲解学生调试过程中所遇到的常见问题。

3.8要求学生实验后完成实验报告。报告中须给出问题分析、数据描述、算法描述、程序描述、测试结果和心得体会等内容。教师对学生提交的实验报告进行分析,总结并指出实验的成功和不足之处。

3.4加强实验教学管理,从正面引导学生。随着网络信息技术的发展,网络中提供的各种信息服务和娱乐方式使部分学生的学习积极性逐渐降低,学习目标也越来越不明确。如果管理松懈,有些学生就会把实践学习当成是简单的Ctrl-C和CtrI-V,不能达到实验教学的预期目标。因此,教师应了解学生的学习动态,加强实践教学管理,并根据实际情况进行相应调整和改进。

4丰富教学手段。搞好实验指导

在实践教学过程,教师不能只停留于解决学生提出的问题,还应不断摸索教学方法,丰富教学手段。

4.1演示基本算法实现时可采用互动的方式进行。先按类型定义一初始化一输入测试数据一输出的实现顺序和学生一起得到结果;再让学生逐个实现其余算法,最后完成头文件的设计。学生通过教师演示和实际操作可以更快的掌握类C算法和C程序的转换思路。

4.2数据结构中的程序规模相比C语言来说更大。由于缺乏经验,很多学生在程序调试中会出现较多的语法和逻辑错误,可利用多媒体网络教学手段在学生机上直接演示并讲解程序调试的方法和技巧。

4.8学生实验过程中尽力营造一种你追我赶的竞争氛围,通过激励机制提高学生学习积极性。如果有同学较早实现了某些算法,可有选择性的适当的“刺激”部分学生以激发其不服输的心理,从而带动其他学生。

4.4鼓励学生多实践,要求学生通过实践来找出理论学习中存在的问题,提高自己的抽象思维和逻辑推理能力。对于编程能力较强的学生,鼓励他们多做题,做难题,为今后参加各种资格水平考试和专业竞赛作好准备。

5总结

11.数据结构 队列实验报告 篇十一

小组成员:xxxxxxxx日期:xxxxxxxx

一、需求分析(xxx)

1.链队列

1)在本演示程序中,首先要链队列添加一个头结点,并判断队列是否为空,它只允许在表的一端进行插入,而在另一端删除元素,允许插入的一段叫队尾,允许删除的一端则为对头,接着访问队列中所有元素,并输出,输出是每个元素之间用空格来完成。最后销毁队列,释放空间。2)演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“欢迎来到链队列”“元素入队”“元素出队”“销毁队列”“清空队列”之后。由用户在键盘上输入演示程序中规定的运算命令,相应的运算数据和显示结果显示在其后。3)程序执行的命令包括: 欢迎来到链队列 1输出队列长度 2元素入队 3元素出队 4销毁队列 5清空队列 6对头元素 7退出链队列 4)测试数据 入队 1 2 3 4 5 分别执行“元素入队”“元素出队”“销毁队列”“清空队列”等操作。2.顺序队列

1)在本演示程序中,首先要顺序队列添加一个头结点,并判断队列是否为空,它只允许在表的一端进行插入,而在另一端删除元素,允许插入的一段叫队尾,允许删除的一端则为对头,接着访问队列中所有元素,并输出,输出是每个元素之间用空格来完成。2)演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“欢迎来到链队列”“元素入队”“元素出队”“取得头结点”“输出显示”之后。由用户在键盘上输入演示程序中规定的运算命令,相应的运算数据和显示结果显示在其后。3)程序执行的命令包括: 欢迎来到顺序队列 1入队 2出队

3判断是否为空 4取得头结点 5输出显示 6退出顺序队列 4)测试数据 入队 1 2 3 4 5 分别执行“元素入队”“元素出队”等操作。3循环队列

1)在本演示程序中,首先要顺序队列添加一个头结点,并判断队列是否为空,初始化建空队列时,令front=rear=0,每当插入新的队列尾元素时,“尾指针增1”;每当删除队列头元素时,“头指针增1”。接着访问队列中所有元素,并输出,输出是每个元素之间用空格来完成。2)演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“欢迎来到链队列”“元素入队”“元素出队”“取得头结点”“输出显示”之后。由用户在键盘上输入演示程序中规定的运算命令,相应的运算数据和显示结果显示在其后。3)程序执行的命令包括: 欢迎来到循环队列 1入队 2出队

3判断是否为空 4取得头结点 5输出显示 6退出顺序队列 4)测试数据 入队 1 2 3 4 5 分别执行“元素入队”“元素出队”等操作。

二.概要设计(xxxx)

⒈ 为实现上述算法,需要顺序表的抽象数据类型,抽象数据类型定义如下:

ADT Queue { 数据对象:D={ ai|ai∈ElemSet, i=1,2,3...,n, n>=0 } 数据关系: R={ |ai-1,ai∈D,i=2,...,n } 基本操作: InitQueue(&Q)操作结果:构造一个空队列。DestroyQueue(&Q)初始条件:队列Q已存在。

操作结果:队列Q已被销毁。ClearQueue(&Q)初始条件:队列Q已存在。

操作结果:将Q清为空队列。QueueEmpty(Q)初始条件:队列Q已存在。

操作结果:若Q为空队列,则返回TRUE,否则FALSE。QueueLength(Q)初始条件:队列Q已存在。

操作结果:返回Q元素的个数,即队列的长度。GetHead(Q,&e)初始条件:Q为非空队列。

操作结果:用e返回Q的队头元素。EnQueue(&Q,e)初始条件:队列Q已存在。

操作结果:插入e返回Q的新的队尾元素。DeQueue(&Q,&e)初始条件:Q为非空队列。

操作结果:删除Q的队头元素,并用e返回其值。}ADT Queue

2.单链队列

typedefstructQNode { QElemType;structQNode *next;//指针域 }QNode,*QueuePtr;Typedefstruct{ QueuePtr front;QueuePtr rear;}LinkQueue;Status InitQueue(LinkQueue&Q)//构造一个空队列。

Status DestroyQueue(LinkQueue&Q)//销毁队列Q,Q不存在。

Status ClearQueue(LinkQueue&Q)//将Q清为空队列。

Status QueueEmpty(LinkQueueQ)//若Q为空队列,则返回TRUE,否则FALSE。intQueueLength(LinkQueueQ)//返回Q元素的个数,即队列的长度。

Status GetHead(LinkQueueQ,QElemType&e)//若队列不为空,则用e返回Q的队头元素,并返回OK;否则返回ERROR。

Status EnQueue(LinkQueue&Q,QElemType e)//插入e返回Q的新的队尾元素。

Status DeQueue(LinkQueue&Q,QElemType&e)//若队列不空,则删除Q的队头元素,并用e返回其值,并返回OK;否则返回ERROR。

三.详细设计(xxx)

1.顺序队列的实现和运算

1)元素的类型 typedefstruct { Datatypedata[MAXSIZE];intfront,rear;}Squeue;2)空的队列的构造

void InitSqueue(Squeue *p)/*初始化队列*/ { p->front=0;p->rear=0;} 3)元素的入队

int Ensqueue1(Squeue1 *q, Datatype e)/*入队*/ { if((q->rear+1)% MAXSIZE == q->front){ printf(“n队列已满n”);return 0;} 4)元素的出队

int DeSqueue1(Squeue1 *q,Datatype *e)/*出队*/ { if(q->front==q->rear){ printf(“队列已空,无法出队!”);return 0;} *e=q->data[q->front];q->front=(q->front+1)%MAXSIZE;return 1;} 5)判断队列是否为空

int QueueEmpty1(Squeue1 q)// 判断是否为空 { if(q.front==q.rear)return 1;else return 0;} 6)队头元素的取值的算法

int Gethead1(Squeue1 *q,Datatype *e)// 取对头元素 { if(q->front==q->rear){ printf(“队列已空,无法出队!”);return 0;} else *e=q->data[q->front];return 1;} 7)遍历顺序队列的算法

void display1(Squeue1 q)//遍历顺序对列 { printf(“此队列数据为:n”);if(q.front==q.rear)printf(“此队列为空!”);else { while(q.front

void InitQueue2(LinkQueue *q){ // 构造一个空队列Q q->front=q->rear=malloc(sizeof(QNode));if(!q->front)exit(1);q->front->next=NULL;} 2)元素的入队算法

void EnQueue2(LinkQueue *q, QElemType e)//将元素e进队 { QueuePtr p;p=(QueuePtr)malloc(sizeof(QNode));//创建新节点

if(!p)//如果内存分配成功

exit(1);

p->data=e;//初始化新节点数据为e p->next=NULL;

q->rear->next=p;

q->rear=p;} 3)元素的出队的算法

int DeQueue2(LinkQueue *q,QElemType e)//队头结点出队,将出队的元素存入e { QueuePtr p;if(q->front==q->rear)//队列为空

return 0;p=q->front->next;//初始化temp为要出队的结点指针

if(q->front->next==q->rear)//要出队的结点为最后一个结点

q->rear=q->front;e=p->data;//要出队的数据元素为e q->front->next=p->next;//使下一个结点变为对头

free(p);//删除要出队的结点

return e;} 4)队列的长度算法

void QueueLength2(LinkQueue *q)//返回队列长度 { QueuePtr p;int i=0;p=q->front->next;while(p){

++i;

p=p->next;} printf(“链队列长度为:%dn”,i);} 5)队列的销毁

void DestroyQueue2(LinkQueue *q){ while(q->front){

q->rear=q->front->next;

free(q->front);

q->front=q->rear;

if(!q->rear)

free(q->rear);} free(q->front);} 6)队列的输出算法

void output2(LinkQueue *q)//输出队列 { QueuePtr p;p=q->front->next;printf(“链队列元素依次为:”);while(p){

printf(“%d->”,p->data);

p=p->next;} printf(“n”);} 7)队列的清空的算法 void Clear2(LinkQueue *q)//清空队列 { QueuePtr temp=q->front->next;while(temp){

QueuePtrtp=temp;

temp=temp->next;

free(tp);} temp=q->front;

q->front=q->rear=NULL;free(temp);} 8)返回对头元素的算法

int GetHead2(LinkQueue *q, int *e)//返回对头结点元素,存入e { if(q->front==q->rear)

return 0;*e=q->front->next->data;return 1;} 3.循环队列的实现和运算 1)队列的初始化算法

void InitSqueue3(Squeue3 *p)/*初始化队列*/ { p->base=(Datatype *)malloc(sizeof(Datatype)* MAXSIZE);p->front=0;p->rear=0;} 2)入队的算法

int Ensqueue3(Squeue3 *q, Datatype e)/*入队*/ { if((q->rear+1)% MAXSIZE == q->front){ printf(“n队列已满n”);return 0;} else q->base[q->rear]=e;/*将接收到得值付给队尾所指的节点*/ q->rear=(q->rear+1)% MAXSIZE;/*队尾向后移一位完成入队*/ return 1;} 3)出队的算法

int DeSqueue3(Squeue3 *q,Datatype *e)/*出队*/ { if(q->front==q->rear){ printf(“队列已空,无法出队!”);return 0;} *e=q->base[q->front];q->front=(q->front+1)%MAXSIZE;return 1;} 4判断队列是否为空的算法

int QueueEmpty3(Squeue3 q)// 判断是否为空 { if(q.front==q.rear)return 1;else return 0;} 5)对头元素的返还的算法

int Gethead3(Squeue3 *q,Datatype *e)// 取对头元素 { if(q->front==q->rear){ printf(“队列已空,无法出队!”);return 0;} else *e=q->base[q->front];return 1;} 6)遍历循环队列的算法

void display3(Squeue3 *q)//遍历循环对列 { int tail;tail=q->front;printf(“此队列数据为:n”);if(q->front==q->rear)printf(“此队列为空!”);else { while(tail!=q->rear){ printf(“%dt”, q->base[tail]);tail=(tail+1)%MAXSIZE;} printf(“n”);} } 4.主函数的算法 void main(){

int choice;Datatype e1;int i1,a1,x1,s1,j1;//顺序队列定义的量 int e2,i2,n2,s2,a2;//链队列定义的量

int i3,a3,x3,s3,j3;//循环队列定义的量 Datatype e3;

Squeue1 Q1;

//******************************* LinkQueue q;

//******************************** Squeue3 Q;

//**************************** choice=-1;Begin();while(choice!=0){ scanf(“%d”,&choice);switch(choice){ case 1://顺序队列

{

system(“cls”);InitSqueue1(&Q1);printf(“创建队列完成!n”);printf(“请输入数据个数j1=”);scanf(“%d”,&j1);for(i1=1;i1<=j1;i1++)//输入的数据个数不要超过MAXSIZE,多了的部分没有插入队列

{ printf(“请输入第%d个数据:”,i1);scanf(“%d”,&a1);Ensqueue1(&Q1,a1);

} printf(“对头为:%dn”,Q1.data[Q1.front]);printf(“队尾为:%dn”,Q1.data[Q1.front+j1-1]);display1(Q1);s1=-1;start1();while(s1!=0)

{

scanf(“%d”,&s1);switch(s1)

{ case 0:

system(“cls”);

choice=-1;

Begin();

break;case 1:

{

system(“cls”);printf(“请输入入队元素:n ”);scanf(“%d”,&x1);Ensqueue1(&Q1,x1);display1(Q1);

s1=-1;

start1();break;

} case 2:

{ system(“cls”);DeSqueue1(&Q1,&e1);display1(Q1);s1=-1;

start1();break;

} case 3:

{

system(“cls”);if(QueueEmpty1(Q1))printf(“此队列为空!n”);else printf(“此队列不为空!n”);

}

s1=-1;

start1();break;case 4:

{ system(“cls”);

Gethead1(&Q1,&e1);printf(“对头元素为:%dn”,e1);

s1=-1;

start1();break;

} case 5:

{ system(“cls”);display1(Q1);s1=-1;

start1();break;

}

}//switch

} //while

}//case1

break;//************************************************* case 2:

{

system(“cls”);

InitQueue2(&q);printf(“创建队列完成!n”);printf(“输入将建立链队列元素的个数:n2=”);scanf(“%d”,&n2);printf(“请输入队列的元素:n”);for(i2=1;i2<=n2;i2++)

{

printf(“请输入第%d个元素:”,i2);

scanf(“%d”,&e2);

EnQueue2(&q,e2);

} a2=-1;start2();while(a2!=0)

{

scanf(“%d”,&a2);

switch(a2)

{

case 1:system(“cls”);

QueueLength2(&q);

a2=-1;start2();

break;

case 2:{

system(“cls”);

printf(“请输入入队元素:”);

scanf(“%d”,&e2);EnQueue2(&q,e2);

output2(&q);a2=-1;start2();

}break;

case 3:

system(“cls”);

e2=DeQueue2(&q,e2);

output2(&q);

printf(“出队元素为:%dn”,e2);a2=-1;start2();

break;

case 4:DestroyQueue2(&q);printf(“队列已销毁!n”);

a2=0;system(“cls”);

choice=-1;

Begin();

break;

case 5:

Clear2(&q);printf(“队列已清空n”);

a2=0;system(“cls”);

choice=-1;

Begin();

break;

case 6:

system(“cls”);GetHead2(&q,&e2);

printf(“队头元素为:%dn”,e2);s2=-1;

start2();

break;

case 0: system(“cls”);

choice=-1;

Begin();

break;

}//switch }//while

}//case2

break;//**************************************************

case 3:

{

system(“cls”);

InitSqueue3(&Q);printf(“创建队列完成!n”);printf(“请输入数据个数j3=”);scanf(“%d”,&j3);for(i3=1;i3<=j3;i3++)//输入的数据个数不要超过MAXSIZE,多了的部分没有插入队列

{ printf(“请输入第%d个数据:”,i3);scanf(“%d”,&a3);Ensqueue3(&Q,a3);

} printf(“对头为:%dn”,Q.base[Q.front]);printf(“队尾为:%dn”,Q.base[Q.front+j3-1]);display3(&Q);s3=-1;start3();while(s3!=0)

{

scanf(“%d”,&s3);switch(s3)

{ case 0:

system(“cls”);

choice=-1;

Begin();

break;case 1:

{

system(“cls”);printf(“请输入入队元素:n ”);scanf(“%d”,&x3);Ensqueue3(&Q,x3);display3(&Q);

s3=-1;

start3();break;

} case 2:

{ system(“cls”);DeSqueue3(&Q,&e3);display3(&Q);s3=-1;

start3();break;

} case 3:

{ system(“cls”);if(QueueEmpty3(Q))printf(“此队列为空!n”);else printf(“此队列不为空!n”);

}

s3=-1;

start3();break;case 4:

{ system(“cls”);

Gethead3(&Q,&e3);printf(“对头元素为:%dn”,e3);

s3=-1;

start3();break;

} case 5:

{ system(“cls”);display3(&Q);s3=-1;

start3();break;

}

}//switch

} //while

}//case 3

break;

case 0:

printf(“ 谢谢使用!!n”);

break;

//***************************

}//switch }//while }//main

四.调试分析(xxx)

顺序队列

1.编译并调试,运行程序。

2.设计测试用例,分析测试结果,以验证所完成的系统是否达到预期效果。3.判断队列是否为空。队列是否为空的标志就是队头指针和队尾指针是否同时指向队列中的同一个位置,即队头指针和队尾指针是否相等。

4.队列满时候不能入队列,否则会出现溢出现象。即先要判断队列是否已经已满,因为队尾指针的最大值是MAXQSIZE,所以通过检查队尾指针rear是否等于MAXQSIZE来判断队列是否已满。在删除队首元素时,应首先通过队头指针和队尾指针是否相等判断队列是否已空。

5.在元素出队操作,先通过队头指针和队尾指针是否相等判断队列是否已空,空时不能操作,这是要注意的。

6.程序满足了本次试验的目的和任务要求,可以进行人机交互,在后来的程序中将会做些改进,以增强人机交互性。

7.本程序存在较多不足,如有问题,参考用户手册。

8.在程序语句中,原本使用了大量的生僻的函数名,经过改进,目前使用都是通俗易懂的函数名称,方便用户理解。

链队列

1.编译并调试,运行程序。2.设计测试用例,分析测试结果,以验证所完成的系统是否达到预期效果。

3.要注意设定一个在链队列添加一个头结点并令指针指向头结点。同时,删除不可以在最后面进行删除,但是插入可以最后一个进行插入,这点需要注意 4.需要分别指向队头和队尾的指针。

5.程序满足了本次试验的目的和任务要求,可以进行人机交互,在后来的程序中将会做些改进,以增强人机交互性。

6.本程序存在较多不足,如有问题,参考用户手册。

7.在程序语句中,原本使用了大量的生僻的函数名,经过改进,目前使用都是通俗易懂的函数名称,方便用户理解。

循环队列

1.编译并调试,运行程序。

2.设计测试用例,分析测试结果,以验证所完成的系统是否达到预期效果。

3.为了避免顺序队列造成的“假溢出”现象,我们通常采用顺序循环队列实现队列的顺序存储。4.队头指针和对尾指针与队列元素之间关系和顺序队列一样,不变。5.先判断队列是否为空。就是看队头指针和队尾指针是否同时指向队列中的同一个位置,即队头指针和队尾指针是否相等,空时不能操作,这是要注意的。

6.在将元素插入到队列之前首先要判断队列是否已经已满,根据顺序循环队列队满条件front==(rear+1)%MAXQSIZE来判断队列是否已满。在删除队首元素时,应首先通过队头指针和队尾指针是否相等判断队列是否已空。

6.程序满足了本次试验的目的和任务要求,可以进行人机交互,在后来的程序中将会做些改进,以增强人机交互性。

7.本程序存在较多不足,如有问题,参考用户手册。

8.在程序语句中,原本使用了大量的生僻的函数名,经过改进,目前使用都是通俗易懂的函数名称,方便用户理解。

五、用户手册(xx)1.链队列

(1)本程序的运行环境为DOS操作系统,执行文件名为:j.exe.(2)进入演示程序后即显示文本方式的用户界面,输入元素1,2,3,4,5创建队列。

(3)根据提示,选择操作2执行元素入队操作。回车,输入入队元素0,回车,将0插入到队列中。

(4)选择操作3执行元素出队操作,回车,队首元素1出队。

(5)选择操作1执行输出队列长度操作,回车,输出队列长度为5.(6)选择操作5执行清空队列操作,回车,清空。

(7)选择操作6执行输出队头元素操作,回车,输出元素2。

2.顺序队列

(1)创建队列,输入数据

1,2,3,4,5.(2)选择操作1,执行入队操作.输入入队元素0

(3)选择操作2,执行出队操作。

队首元素1出队.(4)选择操作3,判断对是否为空

(5)选择操作4,输出对头元素2.(6)选择操作5,显示队列元素

3、循环队列

(1)创建队列,输入数据 1,2,3,4,5.(2)选择操作1,执行入队操作.输入入队元素0

(3)选择操作2,执行出队操作。队首元素1出队.(3)选择操作3,判断对是否为空

(5)选择操作4,输出对头元素2.(6)选择操作5,显示队列元素为,2,3,4,5,0

六.测试结果(xxx)1.顺序队列的实现和运算

1)输入1即可进行进入到顺序队列

2)顺序队列的建立,输入元素的个数为5,输入的数据分别为1,2,3,4,5,对头为1,队尾为5,此时队列的数据为1 2 3

3)输入2即可进行入队运算,输入的入队元素为0,此时的队列的数据为1 2 3 4 5 0

4)输入3即可进行判断队列的是否为空,如下图:

5)输入4即可进行去的对头元素的算法,如下图所示:

6)此时的队列的数

0,如

7)输入0即可退出顺序队列,如下图:

8)输入3即可进行顺序队列的算法,如下图所示:

9)输入1即可进

应的入

算,如

10)输入2即可进行队列的出队运算,如下图所示:

:11)输入3

即可判断顺序队列是否为空的算法,如下图所示:

12)输入4即可进行去的头结点的运算,如下图所示:

13)输入5即可进行队列的输出显示的运算,如

14)输入0即可进行退出顺序队列的算法,如下图所示:

下图所示:2.链式队列的实现和运算

1)队列的建立以及队列的个数输入为5,输入的数据分别为1,2,3,4,5.如下图:

2)输入2即可进入到元素的入队运算,输入入队的元素的为0,输入3即可进行相应的元素的出队运算,出队元素为1.如下图:

3)则此时的队列的长度为5,输入4即可进行队列的销毁以及输入5即可进行队列的清空运算,如下图:

4)输入6即可进行输出队列的对头元素,输入0即可进行退出链队列的运算

3.循环队列的实现和运算

1)输入3即可进行循环队列的操作,输入5个数据,它们分别为1 2 3 4 5,输入1,即可进行入队操作,输入入队的元素为0,则此时的数据为1 2 3 4 5 0,如下图所示:

2)输入2即可进行出队运算,如下图所示:

3)输入3即可进行判断队列的是否为空,如下图所示:

4)输入4即可进行取得对头元素,如

5)输入5即可进行输出所有的数据显示,如下图所示:

所示图:

七.心得体会(xx)

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。

上一篇:基于51单片机的智能小车设计下一篇:哈尔滨银行大堂经理实习总结 报告 心得 总结