20192320杨坤java实验报告6

《数据结构与面向对象程序设计》实验五报告

课程:《程序设计与数据结构》

班级: 1923

姓名: 杨坤

学号:20192320

实验教师:王自强

实验日期:2020年11月5日

必修/选修: 必修

1.实验内容

1.链表练习,要求实现下列功能:

通过键盘输入一些整数,建立一个链表;

这些数是你学号中依次取出的两位数。 再加上今天的时间。

例如你的学号是 20172301

今天时间是 2018/10/1, 16:23:49秒

数字就是

20, 17,23,1, 20, 18,10,1,16,23,49

打印所有链表元素, 并输出元素的总数。

在你的程序中,请用一个特殊变量名来纪录元素的总数,变量名就是你的名字。

例如你叫 张三, 那么这个变量名就是

int nZhangSan = 0; //初始化为 0.

做完这一步,把你的程序签入源代码控制(git push)。

2.链表练习,要求实现下列功能:

实现节点插入、删除、输出操作;

继续你上一个程序, 扩展它的功能,每做完一个新功能,或者写了超过10行新代码,就签入代码,提交到源代码服务器;

从磁盘读取一个文件, 这个文件有两个数字。

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

从文件中读入数字2, 插入到链表第 0 位,并打印所有数字,和元素的总数。

保留这个链表,并继续下面的操作。

从链表中删除刚才的数字1. 并打印所有数字和元素的总数。

3.链表练习,要求实现下列功能:

使用冒泡排序法或者选择排序法根据数值大小对链表进行排序;

如果你学号是单数, 选择冒泡排序, 否则选择选择排序。

在排序的每一个轮次中, 打印元素的总数,和目前链表的所有元素。

在(2)得到的程序中继续扩展,

用同一个程序文件,写不同的函数来实现这个功能。 仍然用 nZhangSan (你的名字)来表示元素的总数。

4.在android上实现实验(1)和(2)

5.在android平台上实现实验(3)

代码:

package Chapter14;

public class nodeList {
    int num;
    private nodeList head=null;
    private nodeList current;
    protected nodeList next;
    int size;

    public nodeList(int num) {
        this.num = num;
    }

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }
    //增加链表
    public void addList(int d )
    {
        nodeList node=new nodeList(d);
        if(this.head==null)
        {this.head=node;
            return;}
        else{
            current=head;
        while (current.next!=null)
            current=current.next;
        }
        current.next=node;

    }
    //删除数据
    public boolean deleteNode(int index)
    {
       if(index<1||index>length())
       {
           return false;
       }
       if(index==1)
           head=head.next;
       int i=1;
       nodeList preNode=head;
       nodeList curNode=head.next;
       while (curNode!=null)
       {
           if(i==index-1)
           {
               preNode.next=curNode.next;
               return true;
           }
           preNode=curNode;
           curNode=curNode.next;
           i++;
       }
       return false;

    }
    //链表的长度
    public int length()
    {
        int length=0;
        nodeList tmp=head;
        while (tmp!=null)
        {
            tmp=tmp.next;
            length++;
        }
        return length;
    }
    //输出链表
    public void printlnList()
    {
        nodeList tmp=head;
        while (tmp!=null)
        {
            System.out.println(tmp.num);
            tmp=tmp.next;
        }
    }
    //插入数据
    public void addIndexNode(int num,int index)
    {
        nodeList preNode=head;
        nodeList curNode=head.next;
        nodeList node=new nodeList(num);
        int i=1;

        if (index==0)
        {
            head=node;
            node.next=preNode;

        }
        while (curNode!=null)
        {
            if(i==index-1)
            {
                preNode.next=node;
                node.next=curNode;
            }
            preNode=curNode;
            curNode=curNode.next;
            i++;
        }
    }
    //删除数据
    public void deleNumNode(int num)
    {
        nodeList preNode=head;
        nodeList curNode=head;
        while (curNode!=null)
        {
            if(curNode.num==num)
            {
                preNode.next=curNode.next;
            }
            preNode=curNode;
            curNode=curNode.next;
        }
    }
    //按位置输出链表中的元素
    public  int nodePrintNum(int index)
    {
        nodeList curNode=head;
        int i=1;
        int num=0;
        while (curNode.next!=null)
        {
            if(i==index)
            num=curNode.num;
            curNode=curNode.next;
            i++;
        }
        return num;
    }



    //选择排序
    public void selectSortNode()
    {


       nodeList nextNode=null;
       nodeList curNode=head;
       nextNode=curNode.next;
       int tmp;
       int i=1;
        while (curNode.next != null) {
            nextNode = curNode.next;
            while (nextNode != null) {
                if (curNode.num > nextNode.num) {
                    tmp = curNode.num;
                    curNode.num = nextNode.num;
                    nextNode.num = tmp;
                }


                nextNode = nextNode.next;
            }
            System.out.println("第"+i+"次排序");
            this.printlnList();
            System.out.println("===");
            System.out.println("元素总数"+this.length());
            curNode = curNode.next;
            i++;
        }

    }




    }

测试代码:

package Chapter14;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Scanner;

public class nodeListTest {
    public static void main(String[] args) throws Exception {
        nodeList list=new nodeList(0);
        int num=0;
        Scanner scanner=new Scanner(System.in);
        num=scanner.nextInt();
       while (num!=-1)
       {

           list.addList(num);
           num=scanner.nextInt();
       }
        System.out.println("操作后");
        list.printlnList();
        System.out.println("==================");
        System.out.println(list.length());
        System.out.println("==================");
/*        File file=new File("D:\\java的截图\\test6.txt");
        InputStream in=new FileInputStream(file);
        byte[] b=new byte[1024];
        int count =0;
        int temp=0;
        while((temp=in.read())!=(-1)){
            b[count++]=(byte)temp;
        }
        in.close();
        list.addIndexNode(b[0]-48,5);
        System.out.println("数字1操作后");
        list.printlnList();
        System.out.println();
        list.addIndexNode(b[2]-48,0);
        System.out.println("数字2操作后");
        list.printlnList();
        System.out.println();
        list.deleNumNode(b[0]-48);
        System.out.println("链表:");
        list.printlnList();*/
        System.out.println("======================");
        System.out.println(list.length());
        list.selectSortNode();
        System.out.println("操作后的链表");
        list.printlnList();
        System.out.println("------------");









}}



2.实验心得体会

自身的自学能力还要提升,大多数的实验代码都在同学的帮助下完成,在运到困难时,容易感到沮丧,还要多锻炼自己。平时也要多加练习。
这是一个新的软件,一切都是陌生的,在遇到这种问题的时候,多上网搜集资料是非常必要的,同时多家运用学习的app在上面观看相关的视频能够更好的掌握

posted @ 2020-11-11 21:12  providence2320  阅读(124)  评论(0编辑  收藏  举报