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

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

课程:《程序设计与数据结构》
班级:1923
姓名:李锦程
学号:20192321
实验教师:王志强
实验日期: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)

2.实验过程及结果

代码

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++;
        }

    }




    }

测试代码

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("------------");









}}

运行结果截图


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

  • 问题1:只会用数组实现选择排序,不会用链表实现,怎么试都有错误;
  • 问题1解决方案:找各种资料,一点一点的在数组的基础上改代码。

其他(感悟、思考等)

在这次实验过程中,我遇到了许多问题,其中既有知识上的漏洞,也有不细心导致的马虎,这一切都补充,完善,丰富,扩展了我的计算机知识体系。在这个过程中,我还进一步熟悉了IDEA这个平台的使用与运行方式,提高了自己自主学习的能力,为我接下来学习数据结构以及JAVA语言程序设计打下了坚实的基础,并在不断探索的过程中逐步提升了自己。

参考资料

posted @ 2020-11-11 22:56  20192321李锦程  阅读(99)  评论(0编辑  收藏  举报