课程:《Java软件结构与数据结构》

班级: 1723

姓名: 侯泽洋

学号:20172302

实验教师:王志强老师

实验日期:2018年9月26日

必修/选修: 必修

实验内容

(1)链表练习,要求实现下列功能:经过键盘输入一些整数,创建一个链表,这些数是你学号中依次取出的两位数, 再加上今天的时间。打印全部链表元素, 并输出元素的总数。php

(2)链表练习,要求实现下列功能:实现节点插入、删除、输出操做,继续你上一个程序, 扩展它的功能,每作完一个新功能,或者写了超过10行新代码,就签入代码,提交到源代码服务器。java

(3)链表练习,要求实现下列功能:使用插入排序法或者选择排序法根据数值大小对链表进行排序。在排序的每个轮次中, 打印元素的总数,和目前链表的全部元素。web

(4)数组练习,要求实现下列功能:(1)经过键盘输入一些整数,创建一个数组;(2)实现节点插入、删除、输出操做。签入全部代码。windows

(5)数组练习,要求实现下列功能:使用插入排序法或者选择排序法根据数值大小对数组进行排序,在排序的每个轮次中, 打印元素的总数,和目前数组的全部元素。数组

实验过程及结果

(1)实验一

这里是要求咱们创建一个整数的链表,并将它们打印出来,同时要记录元素的总数。

咱们首先创建一个节点类,这是创建链表的一个前提基础,在这个类里要设置好两个变量,一个是指向下一数字的节点next;另外一个就是咱们在链表存储的整数。采用方法重载给出两种构造函数。服务器

public class LinearNode {

public int number;

public LinearNode next;

public LinearNode()

{

next = null;

}

public LinearNode(int number) {

this.number = number;

next = null;

}

}

接下来即是开始创建链表。数据结构

实验结果截图:

函数

(2)实验二

首先咱们要进行从文件中读取数字这一操做,这里首先要建立File对象,采用输出流进行读取,这里是以字符为单位读取文件内容,一次读一个字节,而后将读取出的字符转换为对应数字,并将它们储存在一个int型数组中。this

File file = new File("D:\\JAVA程序设计\\Java-pro\\text.txt");

Reader reader = null;

try {

System.out.println("以字符为单位读取文件内容,一次读一个字节:");

reader = new InputStreamReader(new FileInputStream(file));

int tempchar;

int[] array = new int[2];

int x = 0;

while ((tempchar = reader.read()) != -1)

{

if (((char) tempchar) != '\r'&&((char) tempchar) != '\n')

{

{

array[x]=tempchar-(int)('0');

System.out.print((array[x])+" ");

x++;

}

}

}

reader.close();

} catch (Exception e) {

e.printStackTrace();

}

而后咱们进行如下操做:

1.从文件中读入数字1, 插入到链表第 5 位,并打印全部数字,和元素的总数。 保留这个链表,继续下面的操做。.net

//将数字1插入到链表第5位,并打印全部数字,和元素的总数

int index = 4;

System.out.println();

LinearNode current = linearNode;

LinearNode linearNode1 = new LinearNode(array[0]);

for (int y= 0;y

{

current = current.next;

}

linearNode1.next = current.next;

current.next = linearNode1;

nHouZeYang++;

result = "";

i = 0;

integerLinearNode = linearNode;

while (i

{

result += integerLinearNode.number+" ";

integerLinearNode = integerLinearNode.next;

i++;

}

System.out.println("插入数字1后全部链表元素为:"+result);

System.out.println("插入数字1后元素个数为:"+nHouZeYang);

2.从文件中读入数字2, 插入到链表第 0 位,并打印全部数字,和元素的总数。 保留这个链表,并继续下面的操做。

// 将将数字2插入到链表第0位,并打印全部数字,和元素的总数

LinearNode linearNode2 = new LinearNode(array[1]);

System.out.println(array[1]);

current = linearNode;

linearNode = linearNode2;

linearNode.next = current;

nHouZeYang++;

result = "";

i = 0;

integerLinearNode = linearNode;

while (i

{

result += integerLinearNode.number+" ";

integerLinearNode = integerLinearNode.next;

i++;

}

System.out.println("插入数字2后全部链表元素为:"+result);

System.out.println("插入数字2后元素个数为:"+nHouZeYang);

3.从链表中删除刚才的数字1. 并打印全部数字和元素的总数

//从链表中删除刚才的数字1. 并打印全部数字和元素的总数

current = linearNode ;

while (current.next!=linearNode1)

{

current = current.next;

}

current.next = current.next.next;

nHouZeYang--;

result = "";

i = 0;

integerLinearNode = linearNode;

while (i

{

result += integerLinearNode.number+" ";

integerLinearNode = integerLinearNode.next;

i++;

}

System.out.println("删除数字1后全部链表元素为:"+result);

System.out.println("删除数字1后元素个数为:"+nHouZeYang);

实验结果截图:

(3)实验三

使用选择排序法对链表中元素进行排序,咱们首先看如下选择排序法如何实现.

int min;

T temp;

for (int index = 0; index < data.length-1; index++)

{

min = index;

for (int scan = index+1; scan < data.length; scan++)

if (data[scan].compareTo(data[min]) < 0)

min = scan;

// Swap the values

temp = data[min];

data[min] = data[index];

data[index] = temp;

}

接下来再来实现链表中元素排序:

LinearNode current = linearNode;

while (current.next!=null)

{

LinearNode temp = current.next;

int minNumber = current.number;

while (temp!=null)

{

if(minNumber>temp.number)

{

minNumber = temp.number;

}

temp = temp.next;

}

LinearNode current0 = current;

while (current0.number!=minNumber)

{

current0 = current0.next;

}

current0.number = current.number;

current.number = minNumber;

result = "";

i = 0;

integerLinearNode = linearNode;

while (i

{

result += integerLinearNode.number+" ";

integerLinearNode = integerLinearNode.next;

i++;

}

System.out.println("排序中全部链表元素为:"+result+" 元素个数为:"+nHouZeYang);

System.out.println();

实验结果截图:

(4)实验四

上面进行的是链表练习,这里将进行一些数组的练习:

(1)经过键盘输入一些整数,创建一个数组;(2)实现节点插入、删除、输出操做;

实验结果截图:

(5)实验五

数组练习,要求实现下列功能:使用插入排序法对数组中元素进行排序,在排序的每个轮次中, 打印元素的总数,和目前数组的全部元素。

for (int index = 1; index

{

int key = array[index];

int position = index;

// Shift larger values to the right

while (position > 0 && key

{

array[position] = array[position-1];

position--;

}

array[position] = key;

result = "";

for (int i = 0; i < nHouZeYang; i++) {

result += array[i] + " ";

}

System.out.println("排序中全部数组元素为:" + result);

System.out.println("排序中元素个数为:" + nHouZeYang);

}

实验结果截图:

实验过程当中遇到的问题和解决过程

问题1:首先是创建链表时,产生一些问题,遇到空指针错误。

问题1解决方案:这里主要是把问题太过简单化了,使用了以前jsjf包中的LinearNode类,想直接把全部的数字直接用setNext方法给处理了,实际则否则。因而从新创建了节点类,并修改其中代码

若链表为空,将链表赋值为要添加节点,若不为空,则循环找到链表中下一节点为空的节点,将其next赋为待添加节点,完成创建链表。

if(linearNode==null)

linearNode=tLinearNode;

else

{

LinearNode current = linearNode;

while (current.next != null)

current = current.next;

current.next = tLinearNode;

}

问题2:从文件读取文本,并将其转化为数字类型,上学期学过,这里没有记住。

问题2解决方案:从网上找了一些资料,将这里从新复习了一下,最后采用单个读取字节的形式实现;

File file = new File(fileName);

Reader reader = null;

try {

System.out.println("以字符为单位读取文件内容,一次读一个字节:");

// 一次读一个字符

reader = new InputStreamReader(new FileInputStream(file));

int tempchar;

while ((tempchar = reader.read()) != -1) {

// 对于windows下,\r\n这两个字符在一块儿时,表示一个换行。

// 但若是这两个字符分开显示时,会换两次行。

// 所以,屏蔽掉\r,或者屏蔽\n。不然,将会多出不少空行。

if (((char) tempchar) != '\r')

{

System.out.print((char) tempchar);

}

}

reader.close();

} catch (Exception e) {

e.printStackTrace();

}

可是按照这样代码仍然会出现错误,读取出来的有13这个数字,对照ASCII码表,发现这个数字是回车符的ASCII码值,因而尝试将if (((char) tempchar) != '\r'){}改成if (((char) tempchar) != '\r'&&((char) tempchar) != '\n),修改以后读取内容是正确的。

- 关于char型转int型

char ch = '9';

int n = int(ch) - int('0');

此处ch也是‘0’至‘9’的数字字符

问题3:在数组练习中要在原数组中间插入一个数字,这里一开始觉得很简单,可作的过程遇到了问题,见下图:

问题3解决方案:看了两遍代码以后,我知道问题出在了哪里,每次我都是存储了当前y值做为temp,又把数组中索引为(y+1)的元素赋为temp,进行下一次循环时,y=y+1,此时temp便成了以前数组中索引为(y+1)的元素,也就至关于temp先后没有变化,致使了插入后每一个元素都变成了同一个。找到了问题,又去尝试了好些改代码的方式,仍然没有解决,大概卡了10多分钟以后,才有了另外一种思路,我一开始的思路是一个个地从前日后将索引为4的元素空出来,可这样不会作了,那我是否是能够从后往前去挪元素,将最后一个元素挪至它的下一位置,依次类推,直至将索引为4元素移至索引为5处,最后将索引为4处元素赋为要插入元素,问题也就得以解决,最后修改后代码为

int index = 4;

for (int y = nHouZeYang;y>=4;y--)

{

array[y+1] = array[y];

}

array[index] = nums[0];

其余(感悟、思考等)

本次实验大部分是在复习上学期所学过的内容,包括链表的创建,插入,删除等操做,以及文件的读取。数组这里以前没有练习过,但难度不算大。关于链表的排序这里,上个学期也作过,但那时我是将链表元素逐个取出放入数组之中,再进行排序的,此次是直接用链表进行排序这一操做,直接对链表元素进行比较,完成排序,这里完成的要比以前好一些。

参考资料

java数组的声明学号姓名线性结构_20172302 《Java软件结构与数据结构》实验一:线性结构实验报告...相关推荐

  1. java数组的声明学号姓名线性结构_定义一个结构体数组,包含学号,姓名,成绩三哥成员项。...

    sorry,没时间另外写一个了.类似题目的回答很多的.个人建议结构体操作用链表方式,如果用数组方式的话,对于有效记录数的掌控不方便,比如插入要考虑数组长度不能越界,删除要考虑有效记录的减少等等.输入字 ...

  2. java数组的声明_Java数组定义常用方法

    Java数组定义常用方法 Java中的数组.是一种简单的线性数据存储结构.他用牺牲自动扩展大小来换取与集合相比的唯一优势--查询效率的提升.Java中的数组有什么类型?我们要怎么定义这些数组呢?下面跟 ...

  3. Java数组的声明和创建

    大家好,今天来跟大家分享一下Java当中的数组 有关数组的定义 数组是相同类型数据的有序集合 数组描述的是相同类型的若干数据,按照一定的先后次序排列组合而成. 其中,数组当中的每一个数据是一个数组元素 ...

  4. java 数组包含_灵魂拷问:如何检查 Java 数组中是否包含某个值?

    作者 | 沉默王二 责编 | Elle 在逛 programcreek 的时候,我发现了一些专注细节但价值连城的主题.比如说:如何检查Java数组中是否包含某个值 ?像这类灵魂拷问的主题,非常值得深入 ...

  5. java数组比较的头文件_C语言和JAVA的区别

    C语言和JAVA的区别 C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言.下面是小编 ...

  6. java 数组 题_(第22讲)java数组的一些编程题

    1. 要求输入一组英文字符串数组,让这个字符串数组中前面一个元素的最后一个 字母和下一个元素的首位上的字母相等,并且每个元素的长度大于等于2且小于等于100 public static void ma ...

  7. java 数组的索引值_按索引访问Java数组位置的值

    我是 Java的新手,我只是在努力使用数组.我有一段代码,我在编写教程时已经编写过,但我很难理解它,如果有人能向我解释,我会很高兴. 我尝试过各种不同的方法(向我的鸭子解释,写下来等等)并且仍然无法理 ...

  8. java数组创建后大小能改变吗,在Java中,数组创建成功以后,其大小(??? )(能/不能)改变...

    在Java中,数组创建成功以后,其大小(??? )(能/不能)改变 答: 不能 新民主主义革命最基本的动力是(). 答:中国无产阶级 病人,男性,36岁.尿蛋白(++++),全身水肿1个月,测血压16 ...

  9. java val变量声明_Kotlin中变量不同于Java: var 对val(KAD 02)

    原文标题:Variables in Kotlin, differences with Java. var vs val (KAD 02) 时间:Nov 28, 2016 原文链接:http://ant ...

最新文章

  1. 问题1:程序员要做一辈子?
  2. python实现全景图片拼接
  3. centos6.4使用man查找命令时,报错No manual entry for xxxx
  4. ML之LiRLasso:基于datasets糖尿病数据集利用LiR和Lasso算法进行(9→1)回归预测(三维图散点图可视化)
  5. Intel Realsense 通过用户配置文件(profile)获取深度传感器(depth_sensor)超蛋疼的一幕 dir()
  6. ubuntn终端缩小_缩小可以通过终端执行的工具
  7. centos 6.9 安装 Mysql 5.7.20 安装
  8. 如何在Spring容器中加载自定义的配置文件
  9. 35岁以上的大龄程序员们,后来都干什么去了?
  10. 人在囧途之火车调研篇
  11. 网站建设制作需要多少钱呢?费用是多少?
  12. Java第十五篇:详解一元二次方程
  13. 超频技术之内存“时序”重要参数设置解说
  14. Linux 文件的属性
  15. Mac下对小米8刷机Android8.1并安装Magisk和edXposed
  16. @property python知乎_使用Mxnet进行图像深度学习训练工具 InsightFace - 使用篇, 如何一键刷分LFW 99.80%, MegaFace 98%....
  17. 根据正则规则爬取一个网站的视频
  18. SAP的Smartform 自建页格式:SPAD
  19. 发送短信验证码时间控制,手机号校验,证件号校验
  20. 有一行电文,已按下面规律译成密码: A →Z B→Y C→X …… a→z b→y c→x …… 即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字

热门文章

  1. 技术解析+代码实战,带你入门华为云政务区块链平台
  2. Tensorflow保存神经网络参数有妙招:Saver和Restore
  3. 云小课|聊一聊DRS的数据过滤特性
  4. 【华为云技术分享】云小课 | SAP容灾一点通
  5. 200 行代码实现一个滑动验证码
  6. 华为云企业主机安全服务之“网页防篡改”:拒绝网页变脸,服务实时在线
  7. 今日拷问:侬是什么垃圾!
  8. 【Python3网络爬虫开发实战】 1.7.1-Charles的安装
  9. html解析器c#,C# HTML解析工具HtmlAgilityPack使用实例(一)
  10. 汽车防撞实时语音播报仪设计