20145205 java语言实现数据结构实验一
数据结构实验要求
综合类实验设计3
已知有一组数据a1a2a3a4……anb1b2b3b4……bm,其中ai均大于bj,但是a1到an和b1到bm不是有序的,试设计两到三个算法完成数据排序,且把bj数据全倒置到ai之前,并比较几个算法之间的时空复杂度。
编写实验代码过程中的问题和解决过程
因为之前提到使用java语言实现数据结构和密码学的实验可以加分,并且自己的C语言确实也是随着自己没有巩固练习而淡忘的差不多了,而且张岩老师也允许使用java语言进行实验实现,所以第一次的数据结构实验我选择了java语言实现。之前我所编写的代码中,错误的把题目看成了一个数组,所以在我自信满满的给老师验收代码的时候一下子就被指出理解题目有误,之后我在课上修改了代码,但是这次又将全导致这一概念理解错误了。
我理解的是,将整个数组排序后,将每个bj提到对应的ai前,但是啊,真确的全导致是全部的bj提到全部的ai前面,所以我又发了第二次理解错误。
package cc.openhome;
public class shiyan1
{
public static void main(String[] args)
{
int[] scores1 = {88,81,74,68,78,76,77,85,95,93,87,80,73,67,77,75,76,84,94,92};
int temp;
int size = scores1.length;
for (int i = 0; i < size - 1; i++)
{
for (int j = i + 1; j < size; j++)
{
if (scores1[i] < scores1[j])
{
temp = scores1[i];
scores1[i] = scores1[j];
scores1[j] = temp;
}
}
}
int temp1;
int size1 = scores1.length;
for (int a = 0 , b = 1; a <=size - 1 && b <= size; a=a+2,b=b+2)
{
if (scores1[a] > scores1[b])
{
temp1 = scores1[a];
scores1[a] = scores1[b];
scores1[b] = temp1;
}
}
for(int score : scores1)
{
System.out.printf("%3d",score);
}
System.out.println();
}
}
所以我不得不开始了第三次代码修改,这次我的思路是,先定义一个要求的数组,然后用两个数组分别copy原数组的ai部分和bj部分,之后进行排序,然后再将排序后数组合并打印出来。
为了实现这个思路我需要调用System.arraycopy
函数进行数组的copy,但是我自己的只会copy前半个数组int[] scores1 = Arrays.copyOf(shuju,shuju.length/2);
这个样子,后半个数组就不可以这个样子int[] scores2 = Arrays.copyOf(shuju.length/2,shuju.length);
所以我在博客园中找到了调用API的方法如下
这里再介绍一下System.arraycopy这个函数,从JAVA API中找了一段。大家看一下。连接在文末。
public static voidarraycopy(Object src, int srcPos, Object dest, int destPos, int length)从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。从src引用的源数组到dest引用的目标数组,数组组件的一个子序列被复制下来。被复制的组件的编号等于length参数。源数组中位置在srcPos到srcPos+length-1之间的组件被分别复制到目标数组中的destPos到destPos+length-1位置。
如果参数src和dest引用相同的数组对象,则复制的执行过程就好像首先将srcPos到srcPos+length-1位置
的组件复制到一个带有length组件的临时数组,然后再将此临时数组的内容复制到目标数组的destPos到
destPos+length-1位置一样。
If 如果dest为null,则抛出NullPointerException异常。
如果src为null, 则抛出NullPointerException异常,并且不会修改目标数组。
否则,只要下列任何情况为真,则抛出ArrayStoreException异常并且不会修改目标数组:
src参数指的是非数组对象。
dest参数指的是非数组对象。
src参数和dest参数指的是那些其组件类型为不同基本类型的数组。
src参数指的是具有基本组件类型的数组且dest参数指的是具有引用组件类型的数组。
src参数指的是具有引用组件类型的数组且dest参数指的是具有基本组件类型的数组。
否则,只要下列任何情况为真,则抛出IndexOutOfBoundsException异常,并且不会修改目标数组:
srcPos参数为负。
destPos参数为负。
length参数为负。
srcPos+length大于src.length,即源数组的长度。
destPos+length大于dest.length,即目标数组的长度。
否则,如果源数组中srcPos到srcPos+length-1位置上的实际组件通过分配转换并不能转换成目标数组的组
件类型,则抛出ArrayStoreException异常。在这种情况下,将k设置为比长度小的最小非负整数,这样就
无法将src[srcPos+k]转换为目标数组的组件类型;当抛出异常时,从srcPos到srcPos+k-1位置上的源数组
组件已经被复制到目标数组中的destPos到destPos+k-1位置,而目标数组中的其他位置不会被修改。(因
为已经详细说明过的那些限制,只能将此段落有效地应用于两个数组都有引用类型的组件类型的情况。)
参数:src- 源数组。
srcPos- 源数组中的起始位置。
dest- 目标数组。
destPos-
目标数据中的起始位置。
length-
要复制的数组元素的数量。
抛出:IndexOutOfBoundsException-
如果复制会导致对数组范围以外的数据的访问。
ArrayStoreException- 如果因为类型不匹配而使得无法将src数组中的元素存储到dest数组中。
NullPointerException- 如果src或dest为null。
之后修改后得得到了可以运行的代码,但是因为我的eclipse版本过低所以无法运行在JDK1.6之后的函数,大家有兴趣可以copy下来代码去运行一下。
package cc.openhome;
import java.util.Arrays;//调用这个Arrays类进行数组的复制
import java.lang.System;//调用这个类进行输出
public class shiyan2
{
public static int[] contact(int scores1[], int scores2[]){
int[] f = new int[scores1.length+scores2.length];
for(int i = 0 ; i < f.length; i++)
if(i < scores1.length)
f[i] = scores1[i];
else
f[i]= scores2[i-scores1.length];
return f;//以上是对于排序好的两个数组合并成一个新的数组时的函数的建立,复制时只按照两个数组的元素先后顺序,所以需要排序好后再进行复制。
}
public static void main(String[] args)
{
int[] shuju ={88,81,74,68,78,76,77,85,95,93,87,80,73,67,77,75,76,84,94,92};//原数组的赋值
int[] scores1 = Arrays.copyOf(shuju,shuju.length/2);//将ai从原数组拆分出来
int scores2[] = new int[10];//定义新数组用来复制bj
System.arraycopy(shuju[10],scores2[0],shuju.length);//从原数组的第十位开始复制,复制到新数组的开始,之后依次复制。
int temp; //定义中间变量
int size = scores1.length; //定义ai数组的长度变量
for (int i = 0; i < size - 1; i++) //冒泡排序,开始遍历ai数组
{
for (int j = i + 1; j < size; j++)
{
if (scores1[i] < scores1[j])
{ // 交换两数的位置
temp = scores1[i]; //不断两两交换,将小数不断交换到数组前
scores1[i] = scores1[j];
scores1[j] = temp;
}
}
}
int size2 = scores2.length; //同对于ai数组的进行的冒泡排序进行对bj数组进行排序
for (int i = 0; i < size2 - 1; i++) {
for (int j = i + 1; j < size2; j++) {
if (scores2[i] < scores2[j]) {
temp = scores2[i];
scores2[i] = scores2[j];
scores2[j] = temp;
}
}
}
int scores3[] =ContactIntegerArray.contact(scores2, scores1);//合并数组时将bj数组放到ai数组前
for(int score : scores3)
{
System.out.printf("%3d",score);//打印合并数组
}
System.out.println();//输出换行
}
}
其他(感悟、思考等,可选)
在本周的学习中书上代码比较多,由其是第一次见识到了五十行以上的长代码,在敲的时候因为开始的不是很理解,导致自己有次看串了行,编译的时候总是有错误,后来发现了这点,我删除了之前的建的class,然后先去看书,在基本理解代码之后重新敲代码,这次因为有着之前的经验和自己的对于代码的理解,中间也丢了几行代码但是自己在敲的时候,发现了程序缺了东西,立马就补了回来。
而且现在我们最近在做数据结构的实验,在之前写大致的实验预习代码的时候,我就是使用的JAVA语言,实验要求是几个排序算法解决问题,之前我用的思想其实基本上和C语言中的思想差不多,就是用java语言表达了出来,像是冒泡排序,但是第九章Sort系列给了我新的思路,打算之后改进代码的时候,结合书上的内容,进行一定改进,希望在之后的学习中,可以将JAVA语言和其他科目的编程实验进行融会贯通,不要只是学过了就是学过了。
参考资料
20145205 java语言实现数据结构实验一的更多相关文章
- 数据结构(java语言描述)
概念性描述与<数据结构实例教程>大同小异,具体参考:http://www.cnblogs.com/bookwed/p/6763300.html. 概述 基本概念及术语 数据 信息的载体,是 ...
- 数据结构(Java语言描述)-第一章:概述
第一章 概述 1.0 序言 自己为啥要学数据结构嘞,我觉得主要有以下三个原因: 前段时间在看并发编程时,发现aqs,corrunthashmap等底层都用到了数据结构,主要的有队列,还有链表,学习数据 ...
- Java程序设计与数据结构导论--读后感
与我前面所读的<Java7基础教程>相比,此书不适合自学,更适合作为教材使用. 虽然此书完整覆盖了Java的知识点和数据结构的基础问题,并且对每个部分都做了基本说明.但是因为没有深入展开, ...
- java项目——数据结构实验报告
java项目——数据结构总结报告 20135315 宋宸宁 实验要求 1.用java语言实现数据结构中的线性表.哈希表.树.图.队列.堆栈.排序查找算法的类. 2.设计集合框架,使用泛型实现各类. ...
- 20172302 《Java软件结构与数据结构》实验三:查找与排序实验报告
课程:<Java软件结构与数据结构> 班级: 1723 姓名: 侯泽洋 学号:20172302 实验教师:王志强老师 实验日期:2018年11月19日 必修/选修: 必修 实验内容 (1) ...
- 20172302 《Java软件结构与数据结构》实验二:树实验报告
课程:<Java软件结构与数据结构> 班级: 1723 姓名: 侯泽洋 学号:20172302 实验教师:王志强老师 实验日期:2018年11月5日 必修/选修: 必修 实验内容 (1)参 ...
- 20172302 《Java软件结构与数据结构》实验一:线性结构实验报告
课程:<Java软件结构与数据结构> 班级: 1723 姓名: 侯泽洋 学号:20172302 实验教师:王志强老师 实验日期:2018年9月26日 必修/选修: 必修 实验内容 (1)链 ...
- 20172301 《Java软件结构与数据结构》实验三报告
20172301 <Java软件结构与数据结构>实验三报告 课程:<Java软件结构与数据结构> 班级: 1723 姓名: 郭恺 学号:20172301 实验教师:王志强老师 ...
- 20172301 《Java软件结构与数据结构》实验二报告
20172301 <Java软件结构与数据结构>实验二报告 课程:<Java软件结构与数据结构> 班级: 1723 姓名: 郭恺 学号:20172301 实验教师:王志强老师 ...
随机推荐
- LOL 控制技能的解释
压制:硬控的一种,是指A在释放压制型技能的时候B无法进行任何动作,可以被 水银腰带 和 坩埚盖 解除(原来可以完全解掉,现在貌似只是能动,伤害还在继续,比如蚱蜢的R中,用水银解掉之后可以立即跑开,但是 ...
- C#高级编程笔记 2016年10月8日运算符和类型强制转换
1.checked和unchecked 运算符 C#提供了checked 和uncheckde 运算符.如果把一个代码块标记为checked, CLR就会执行溢出检查,如果发生溢出,就抛出overfl ...
- 单词words
论一类脑筋急转弯题和奇技淫巧题的解题技巧 [题意] 给定n个长为m且只包含xyz的字符串,定义两个字符串的相似程度为它们对应位置相同字符个数(比如xyz和yyz的相似程度为2,后两位相同),分别求出相 ...
- Retroactive priority queues
http://erikdemaine.org/papers/Retroactive_TALG/paper.pdf 明天写..大概就是通过一些结论发现这个东西其实就是往最后的集合里加入或删除一些可以被快 ...
- win7 去快捷箭头
去掉快捷方式箭头.reg Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows ...
- 大公司的PHP面试题
1. 禁用COOKIE 后 SEESION 还能用吗? 2. 抓取远程图片到本地,你会用什么函数? 4. 你觉得在pV10W的时候, 同等配置下,LUNIX 比WIN快多少? 5. 简述pOST 和G ...
- PHP面试题4
在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量(1)中:而链接到当前页面的URL记录在预定义变量(2)中. 答:echo $_SERVER['PHP_SELF']; echo $ ...
- 利用Queue队列实现FIFO的算法
#!/usr/bin/env python # -*- coding: utf-8 -*- # learn <<Problem Solving with Algorithms and Da ...
- 【转】Java Web 项目获取运行时路径 classpath
Java Web 项目获取运行时路径 classpath 假设资源文件放在maven工程的 src/main/resources 资源文件夹下,源码文件放在 src/main/java/下, 那么ja ...
- AngularJS动画
1.AngularJS提供了动画效果,可以配合CSS使用: 2.AngularJS使用动画需要引入angular-animate.min.js库 <script src="http:/ ...