标签:hang 排序 结果 些许 blog size 测试 应该 href
课程:《程序设计与数据结构》
班级: 1723
姓名: 严域俊
学号:20172333
实验教师:王志强
实验日期:2018年9月30日
必修/选修: 必修
过程: 第一个任务就是简单的建立一个链表,使用Scanner类来从键盘获得整数以用于建立链表,然后 由于想要不调换输入整数的数据,我需要编写一个后插的方法:
public void add(int num)
{
node n=new node(num);
node p =head;
if (head ==null)
{
n.next=head;
head =n;
}else
{
while(p.next!=null)
{
p=p.next;
}
p.next=n;
}
nYanyujun++;
}
最后要求输出链表和链表个数
public String toString()
{
String result ="";
node tem = head;
while(tem!=null)
{
result+= tem.data +" ";
tem =tem.next;
}
return result;
}
public int size()
{
return nYanyujun;
}
图1结果
过程: 该任务主要是编写三个方法(插入后输出、前插后输出、删除后输出)刚开始写插入方法的时候我看见要求的时候,以为只有两个目标,把头插和普通插入混为一谈了,导致后面用普通插入来实现头插时,插不进去。头插法:
public void addHeadNode(int data)
{
node x=new node(data);
if(head==null){
head =x;nYanyujun++;
return;
}
x.next=head;
head=x;
nYanyujun++;
插入法:
public void insert(int index,int data)
{
node n=new node(data);
node cur =head;
node pre=head;
int pos =0;
while (pos!=index-1)
{
pre=cur;
cur=cur.next;
pos++;
}
n.next=cur;
pre.next=n;
nYanyujun++;
}
删除法:
public Boolean deleteNode(int index)
{
if(index<1||index>nYanyujun)
return false;
int i=1;
node p=head;
while(i!=(index-1))
{
p=p.next;
i++;
}
(p.next)=(p.next.next);
nYanyujun--;
return true;
}
当然 还有从文件中读取数据的过程,这个代码说实话我没搞懂,直接在上个学期的代码中拿修改些许后,并测试了一下就拿来用了。
读取数据
try {
if (!file.exists()) {
file.createNewFile();
}
} catch (IOException Exception) {
System.out.println("错误,指定路径不存在");
}
InputStream inputStream1 = new FileInputStream(file);
while (inputStream1.available() > 0) {
System.out.println((char) inputStream1.read() + " ");
}
inputStream1.close();
byte[] buffer = new byte[1024];
String content = "";
int flag = 0;
InputStream inputStream2 = new FileInputStream(file);
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream2);
while ((flag = bufferedInputStream.read(buffer)) != -1) {
content += new String(buffer, 0, flag);
}
bufferedInputStream.close();
String[] a = new String[10];
a = content.split(" ");
String B = a[0];
String C = a[1];
// int i = Integer.valueOf(B).intValue();
// int ii = Integer.valueOf(C).intValue();
结果图2
过程 第三个任务需要使用冒泡或者选择排序,冒泡排序貌似没学过,但是由于要求学号是单数的要用冒泡,就只能在网上借鉴学习自己编写了一个功能貌似一样的冒泡排序,然后就出问题了,题目要求要将每一次的结果输出,我编写的冒泡排序是排序是没问题,但是在输出元素个数的时候永远是0,后来在国庆第一天我改了两个小时候无果,心态又爆炸了,然后想了想反正从头到尾个数都没变化就直接在元素个数手动写好了。冒泡排序
public static node bubbleSort(node head){
shiyan shiiyan =new shiyan();
if(head == null || head.next == null)
return head;
node cur = null, tail = null;
cur = head;
while(cur.next != tail){
while(cur.next != tail){
if(cur.data > cur.next.data){
int tmp = cur.data;
cur.data = cur.next.data;
cur.next.data = tmp;
}
cur = cur.next;
}
System.out.println("排序后结果:"+shiiyan.toString());
System.out.println("元素数量:12" );
tail = cur;
cur = head;
}
return head;
}
结果图3
前三个实验提交图
过程 该任务和前三个任务需要在另外一个java程序中进行,其实大致内容差不多,大致就是用数组来完成之前的任务(建立数组、表示数组的内容、数组的元素个数、插入、删除)
显示内容方法
public void tostring(String[]a)
{
System.out.print("整个数组是:");
for (int k = 0; k<=a.length-1; k++)
{
System.out.printf(a[k] +" ");
nYanYuJun =k+1;
}
}
数组元素个数
public int size()
{
return nYanYuJun;
}
数组插入方法
public void insert(int index, String num) {
String[] result = new String[nYanYuJun + 1];
if (index == 0) {
result[0] = num;
for (int a = 0; a < nYanYuJun; a++) {
result[a + 1] = K[a];
}
} else {
if (index == nYanYuJun) {
for (int a = 0; a < nYanYuJun; a++) {
result[a] = K[a];
}
result[nYanYuJun + 1] = num;
} else {
result[index] = num;
for (int a = 0; a < nYanYuJun; a++) {
if (a < index)
result[a] = K[a];
else
result[a + 1] = K[a];
}
}
}
K = result;
}
数组删除方法
protected void Delete(int index) {
String[] L = new String[nYanYuJun - 1];
if (index == 0)
{
for (int a = 0; a < nYanYuJun - 1; a++) {
L[a] = K[a + 1];
}
} else {
if (index == nYanYuJun - 1) {
for (int a = 0; a < nYanYuJun - 1; a++) {
L[a] = K[a];
}
} else {
for (int a = 0; a < nYanYuJun - 1; a++) {
if (a < index)
L[a] = K[a];
else
L[a] = K[a + 1];
}
}
}
K = L;
nYanYuJun--;
}
实验结果4
过程 该任务就是数组的排序方法的实现,由于之前我在排的时候,排序方法要用某个int型数组,最后我却只有个string数组,需要进行转化,后来我问同学,共同弄了个转换的方法所以我的排序方法会有两个。Sort的方法名才是最后要使用的那个。
public static void sort(int[] arr)
{
int index;
for(int i=1;i<arr.length;i++){
index=0;
for(int j=1;j<=arr.length-i;j++){
if(arr[j]>arr[index]){
//查找最大值
index=j;
}
}
//交换在arr.length-i和index(最大值)位置的两个数
int temp=arr[arr.length-i];
arr[arr.length-i]=arr[index];
arr[index]=temp;
}
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
public void Sort()
{
int[] A = new int[nYanYuJun];
for (int i = 0; i < nYanYuJun; i++) {
A[i] = Integer.valueOf(K[i]).intValue();
}
shiyan3_4.sort(A);
}
实验结果图5
实验4—5的上传记录
问题1:在进行实验排序的时候,最后输出的排序结果是没有问题的,但是中间过程每一步输出简直爆炸,刚开始是前面所有的排序内容全为0,元素个数没有变化图。
解决:尝试在循环语句中进行修改,具体代码有参考网上别人的循环语句,改成了第二次的样子,然后排序内容每一次都可以进行了,但是它的展现过程有点奇怪,按道理应该是每一步过程换后之后的,但我改好之后展现出来的是每一步将那些元素要动的删掉,在下一步中又将上一步删除的排好放在后面,把下一步应该拿出比较的数字删除,导致每一步的个数不太一样。
问题2:依旧延续第一个问题,在解决了排序内容为0的问题又出现展现的过程不对的情况。
解决:由于对于冒泡排序极度不熟悉,一度删除了全部方法,后来看到网上一个冒泡排序的方法,感觉比其他的冒泡排序的要简单一些,就尝试用它改成每一步显示的那种方法,结果比较如愿,得到了我想要的效果,问题又出来了那就是每一次出来的元素个数永远是0个。
其他(感悟、思考等)
这是我第一次在国庆第一天就开始做作业,感觉还行,从下午一点开始做,到晚上八点回去。对于链表的概念是清楚的多了,但是有时还是感觉反应有点慢,做方法不能得心应手。
还有最最最重要的事情就是码云用手动拖入上传文件是真真滴好用,垃圾git push / pull
参考资料
20172333 2017-2018-2 《程序设计与数据结构下》实验1报告
标签:hang 排序 结果 些许 blog size 测试 应该 href
原文地址:https://www.cnblogs.com/yanyujun527/p/9745000.html