(1)链表练习,要求实现下列功能:经过键盘输入一些整数,创建一个链表,这些数是你学号中依次取出的两位数, 再加上今天的时间。打印全部链表元素, 并输出元素的总数。php
(2)链表练习,要求实现下列功能:实现节点插入、删除、输出操做,继续你上一个程序, 扩展它的功能,每作完一个新功能,或者写了超过10行新代码,就签入代码,提交到源代码服务器。java
(3)链表练习,要求实现下列功能:使用插入排序法或者选择排序法根据数值大小对链表进行排序。在排序的每个轮次中, 打印元素的总数,和目前链表的全部元素。web
(4)数组练习,要求实现下列功能:(1)经过键盘输入一些整数,创建一个数组;(2)实现节点插入、删除、输出操做。签入全部代码。windows
(5)数组练习,要求实现下列功能:使用插入排序法或者选择排序法根据数值大小对数组进行排序,在排序的每个轮次中, 打印元素的总数,和目前数组的全部元素。数组
这里是要求咱们创建一个整数的链表,并将它们打印出来,同时要记录元素的总数。
咱们首先创建一个节点类,这是创建链表的一个前提基础,在这个类里要设置好两个变量,一个是指向下一数字的节点next;另外一个就是咱们在链表存储的整数。采用方法重载给出两种构造函数。服务器
public class LinearNode<T> { public int number; public LinearNode next; public LinearNode() { next = null; } public LinearNode(int number) { this.number = number; next = null; } }
接下来即是开始创建链表。数据结构
实验结果截图:
函数
首先咱们要进行从文件中读取数字这一操做,这里首先要建立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<Integer> current = linearNode; LinearNode linearNode1 = new LinearNode(array[0]); for (int y= 0;y<index-1;y++) { current = current.next; } linearNode1.next = current.next; current.next = linearNode1; nHouZeYang++; result = ""; i = 0; integerLinearNode = linearNode; while (i<nHouZeYang) { 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<nHouZeYang) { 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<nHouZeYang) { result += integerLinearNode.number+" "; integerLinearNode = integerLinearNode.next; i++; } System.out.println("删除数字1后全部链表元素为:"+result); System.out.println("删除数字1后元素个数为:"+nHouZeYang);
实验结果截图:
使用选择排序法对链表中元素进行排序,咱们首先看如下选择排序法如何实现.
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<Integer> 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<nHouZeYang) { result += integerLinearNode.number+" "; integerLinearNode = integerLinearNode.next; i++; } System.out.println("排序中全部链表元素为:"+result+" 元素个数为:"+nHouZeYang); System.out.println();
实验结果截图:
上面进行的是链表练习,这里将进行一些数组的练习:
(1)经过键盘输入一些整数,创建一个数组;(2)实现节点插入、删除、输出操做;
实验结果截图:
数组练习,要求实现下列功能:使用插入排序法对数组中元素进行排序,在排序的每个轮次中, 打印元素的总数,和目前数组的全部元素。
for (int index = 1; index <nHouZeYang; index++) { int key = array[index]; int position = index; // Shift larger values to the right while (position > 0 && key<array[position-1]) { 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:首先是创建链表时,产生一些问题,遇到空指针错误。
if(linearNode==null) linearNode=tLinearNode; else { LinearNode<Integer> current = linearNode; while (current.next != null) current = current.next; current.next = tLinearNode; }
问题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:在数组练习中要在原数组中间插入一个数字,这里一开始觉得很简单,可作的过程遇到了问题,见下图:
int index = 4; for (int y = nHouZeYang;y>=4;y--) { array[y+1] = array[y]; } array[index] = nums[0];