2017—2018 实验报告:实验一

实验一:实验报告

课程:程序设计与数据结构
班级: 1623
姓名: 张旭升
学号:20162329
指导教师:娄嘉鹏 王志强
实验日期:9月25日

实验密级: 非密级
预习程度: 已预习

必修/选修: 必修
实验序号: cs_29

实验名称: Java线性表的应用,实现和分析

实验内容

1. Java中的线性表的测试:过程,问题

2. Java中的线性表的应用:过程,问题

3. 顺序表的实现(伪代码,产品代码,测试代码):过程(分析,设计,实现,测试),问题

4. 链表的实现(伪代码,产品代码,测试代码):过程(分析,设计,实现,测试),问题

5. Java ArrayList,LinkedList源码分析:过程,学到的技巧

实验要求


1.没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程

  1. 完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是 运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决 办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可 以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的指导

  2. 严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。


实验过程

一.Java中线性表的测试

1.MyList类:

Java中提供了两种线性表,分别是ArrayListLinkedList,我分别对它们每种类的其中三个主要方法进行了Junit单元测试:
ArrayListLinkedList
boolean : isEmpty()boolean : contains(Object o)
boolean : add(Object o)boolean : add(Object o)
Object : remove(int index)boolean : remove(Object o)

注意:

在测试中我发现,两种线性表在Java源代码中是受保护无法直接进行单元测试的,我只能自己写一个MyList来继承上面两个类,然后通过将需要测试的方法复写一下只需要调用父类的该方法就可以直接进行单元测试了。

2.测试结果及代码

测试代码

ArrayList测试代码
LinkedList测试代码

测试截图

1065476-20170929210015965-2079493286.png

二.用Java线性表实现有序线性表的合并

实现代码

  • 实现代码
  • 测试代码

    测试截图

    1065476-20170929212710622-1030956481.png

三.用数组实现线性表

1.实现代码分析:


创建数组线性表的思路和课上的Bag类是很类似的,具体做法也是在Bag类的基础上进行了一些功能的改进,比如实现了存储空间的自增长等

思路:

在每次往数组中线性的添加元素时都会进行一个判断,如果数组已经没有空位时,就会进行一个变换的操作,新建一个多10位的数组(数组初始大小为10)然后将原数组中的元素遍历出来放入新建数组,然后将新建数组赋给原数组的引用,即使数组长度增加了10

2.实现代码及测试

  • 实现代码
  • 测试代码

3.测试截图

1065476-20171008155453918-1571786969.png

四.用链表实现线性表

1.实现代码分析:

定义一个链表的类,然后在类中创建两个变量,一个为泛型变量,一个是该类的对象,这个类的对象将会作为一个指针,在链表中每创建一个新的元素时,就会> > 实将指针实例化。

2.实现代码及测试代码

  • 实现代码
  • 测试代码

3.测试截图1065476-20171008161025637-515268610.png

五.ArrayList与LinkedList源码分析

1.源码调取

我所分析的源码是从IDEA中直接调取的,具体操作是在IDEA中连按两次Shift键就会弹出一个搜索框,然后在搜索框中分别搜索ArrayList和LinkedList就可以调出 这两个类的源代码

2.源码分析

1065476-20171008163718106-518910473.png

1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

参考资料:
java集合框架05——ArrayList和LinkedList的区别
Java中ArrayList和LinkedList区别

转载于:https://www.cnblogs.com/Zhangxusheng/p/7612731.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/257348.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS开发 - Swift实现清除缓存功能

前言: 开发移动应用时,请求网络资源是再常见不过的功能。如果每次都去请求,不但浪费时间,用户体验也会变差,所以移动应用都会做离线缓存处理,其中已图片缓存最为常见。 但是时间长了,离线缓存会占用大量的…

如何开启IIS7以上的“IIS6管理兼容性”

护卫神PHP套件的安装,需要开启“IIS6管理兼容性”, 那么,如何开启IIS7、IIS7.5、IIS8.0的IIS6兼容模式呢? 设置的时候,请参照如下截图: 本文转自黄聪博客园博客,原文链接:http://www…

ssh服务端口转发详解

端口转发的概念和应用什么是端口转发呢,我们知道,SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。但是,SSH 还同时提供了一个非常有用的功能,这就是端口转发。它能够将其他 TCP 端口的网络数据通过 SSH 链接来转发&…

布局管理器android,Android课程---布局管理器之相对布局(一)

下面示例的是在父容器里如何设置按钮的位置,难度:***,重点是找到一个主按钮,设置它的id,然后根据它来设置其他按钮在父容器的位置。代码示例:android:layout_width"match_parent"android:layout_…

【Cocos2d-Js基础教学 入门目录】

本教程视地址频在:九秒课堂 完全免费从接触Cocos2dx-Js以来,它的绽放的绚丽让我无法不对它喜欢。我觉得Js在不断带给我们惊喜;在开发过程中,会大大提升我们对原型开发的利用率,使用Js语言做游戏开发,使游戏…

Hammer.js移动端触屏框架的使用

hammer.js是一个多点触摸手势库,能够为网页加入Tap、Double Tap、Swipe、Hold、Pinch、Drag等多点触摸事件,免去自己监听底层touchstart、touchmove、touchend事件并且写一大堆判断逻辑的痛苦。hammer.js不但支持触摸屏设备的浏览器,在桌面浏…

Android实现笔记本修改功能,安卓12第二个开发者预览版推出:UI、功能有所改进...

最近谷歌正式推出了Android 12的第二个开发者预览版,带来了很多UI和功能上的改进。首先最明显的变化应该是锁屏界面和下拉通知栏的音乐播放器。此前这部分UI的配色一直采用的是音乐专辑的主色调,但在Android 12上,这个配色变成了系统的强调色…

C语言中Union类型的使用方法

转自:http://blog.csdn.net/feimor/article/details/6858103 使用C语言时,常常使用struct,对于union类型却几乎没有用过,只知道它是联合类型,各字段共享一块内存,实际应用中却不知道它的具体用途。 今天读《…

阿里启动NASA计划创造新经济核心科技

本文讲的是阿里启动"NASA"计划创造新经济核心科技【IT168 资讯】2017年3月9日,阿里巴巴集团在杭州召开首届技术大会,动员全球两万多名科学家和工程师投身“新技术战略”。会议透露,阿里巴巴正在启动一项代号“NASA”的计划&#xf…

android one x3怎么样,618旗舰手机怎么选,看完这篇文章,你就会知道

转眼间,2021年即将过半,一年一度的年中购物狂欢节618就要到来了。我已经迫不及待了。毕竟在618年中大促的时候,各家厂商都有力度非常大的活动。而且也有很多小伙伴一直在观望,想要在618的时候给自己换一款手机。说实话&#xff0c…

华为鸿蒙与magic,如果荣耀Magic3搭载了屏下镜头和鸿蒙系统,你会做第一批吗?...

华为荣耀在目前的手机市场中,荣耀手机的人气还是蛮高的,从高端旗舰市场到中低端市场,我们都能够看到荣耀手机的踪影,这已经可以代表荣耀手机的优势了。要知道华为荣耀这两年的发展速度非常快,产品的布局速度也是如此&a…

[BZOJ1026] [SCOI2009] windy数 (数位dp)

Description windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道,在A和B之间,包括A和B,总共有多少个windy数? Input 包含两个整数,A B。 Output 一个整数 Sample Input…

SQL——快速定位相关的外键表

转载于:https://www.cnblogs.com/mingle/p/4506422.html

Linux安装glibc(升级版本)

2019独角兽企业重金招聘Python工程师标准>>> glibc下载地址:http://ftp.gnu.org/gnu/glibc/ 这里下载 glibc-2.15: http://ftp.gnu.org/gnu/glibc/glibc-2.15.tar.gz glibc-ports-2.15: http://ftp.gnu.org/gnu/glibc/glibc-ports…

定义列表的特点html,HTML的列表表格表单知识点

无序列表格式 有序列表格式第一项 …

【Fanvas技术解密】HTML5 canvas实现脏区重绘

先说明一下,fanvas是笔者在企鹅公司开发的,即将开源的flash转canvas工具。 脏区重绘(dirty rectangle)并不是一门新鲜的技术了,这在最早2D游戏诞生的时候就已经存在。 复杂的术语或概念就不多说,简单说,脏区重绘就是每…

html调用js里面的函数,html如何调用js函数

html调用js函数的方法:1、用控件本身进行调用;2、通过javascript中的时间控件定时执行;3、通过getElementById调用;4、通过document.getElementsByName调用。本文操作环境:Windows7系统、html5&&javascript1.8…

大部分人都会做错的经典JS闭包面试题

2019独角兽企业重金招聘Python工程师标准>>> 由工作中演变而来的面试题 JS中有几种函数 创建函数的几种方式 三个fun函数的关系是什么? 函数作用域链的问题 到底在调用哪个函数? 后话 转载于:https://my.oschina.net/u/3687565/blog/1549046

STM32片上Flash内存映射、页面大小、寄存器映射

转自:http://blog.chinaunix.net/uid-20617446-id-3847242.html 一、怎么看Flash大小 1.1 通过型号 型号会印在MCU表面,可以通过观察获得,我的是STM32F103RBT6(以下分析基于这个型号),对照下图的STM32产品命名,可知STM…

如何设计实现一个地址反解析服务?

http://www.cnblogs.com/LBSer/p/4507829.html 一、什么是地址反解析 我们都知道手机定位服务,其本质是汇总各种信号得出一个经纬度坐标(x,y)(具体定位原理可以参考:LBS定位技术、基于朴素贝叶斯的定位算法&#xff09…