2018-2019-20172309 《程序设计与数据结构》实验一报告

2018-2019-20172309 《程序设计与数据结构》实验一报告

课程:《程序设计与数据结构(下)》
班级: 1723
姓名: 王志伟
学号:20172309
实验教师:王志强老师
实验日期:2018年9月27日
必修/选修: 必修html

1.实验内容

实验1.1:线性结构之链表:

  • 实验要求:
  1. 经过键盘输入一些整数,创建一个链表(1分);
  2. 这些数是你学号中依次取出的两位数。 再加上今天的时间。
  3. 打印全部链表元素, 并输出元素的总数。
  4. 在你的程序中,请用一个特殊变量名来纪录元素的总数,变量名就是你的名字。
  5. 把程序签入源代码控制(git push)。

实验1.2:线性结构之链表(拓展):

  • 实验要求:
  1. 实现节点的插入,删除,输出操做(2分);
    2.从磁盘读取一个文件, 这个文件有两个数字。
  2. 从文件中读入数字1, 插入到链表第 5 位,并打印全部数字,和元素的总数。 保留这个链表,继续下面的操做。
  3. 从文件中读入数字2, 插入到链表第 0 位,并打印全部数字,和元素的总数。 保留这个链表,并继续下面的操做。
  4. 从链表中删除刚才的数字1. 并打印全部数字和元素的总数。

实验1.3:线性结构之链表之排序:

  • 实验要求:1. 使用冒泡排序法或者选择排序法根据数值大小对链表进行排序(2分);
  1. 使用冒泡排序法或者选择排序法根据数值大小对链表进行排序(2分);
  2. 在排序的每个轮次中, 打印元素的总数,和目前链表的全部元素。

实验1.4:线性结构之数组:

实验1.5:线性结构之数组之拓展:

2.遇到的问题及解决方案:

2.1实验01中遇到的问题:

  • 问题一:在设置节点与结点之间的链接时出现了问题,结果输出链表时,只出现首尾结点。以后发现出现的问题是:直接使用了head =head.next正确的作法是:LinearNode temp = headtemp = temp.next
  • 问题二:在写方法的时候,记得之前能够在main函数中直接调用方法。可是不太记得怎么写这个方法,因此直接在main函数中直接调用了一下方法,以后说是否是静态方法。因此知道了相关知识是静态方法与实例方法,因此我去百度了一下相关知识:
    我的以为这篇讲的很好
    总的来讲是:
方法 对象.方法 直接调用方法 调用静态成员变量 调用实例成员变量
静态方法 ×
实例方法 ×

作法: 因此我把静态方法里面用到的变量都加上了static,以后就成功了。O(∩_∩)O哈哈~java

2.2实验02中遇到的问题:

  • 嗯,在进行插入是,插入的后一部分丢了!!!:
    出现这个问题的缘由是:当输入node.next =temp;,node已经等于temp,temp.next = node.next.next;此时temp.next为null,因此后面就没了,解决方法就是使用两个指针。node

  • 首先看到这个实验以为很简单,可是我到了交做业的前两天才知道,实验要求的是在指定位置插入、删除元素。而我写的方法就像是栈里面的push、与pop。o(╥﹏╥)o,以后我只好重写,以后在写的过程当中出现了这个问题:
    这个问题是,在插入的不显示是什么,而是地址!!!!出现这个问题后我表示很茫然,以后使用双指针这个问题就没有了(之前用了一个指针)····git

  • 修改后的代码:
public void insert(int place,int element){
        LinearNode node1,node2;
        LinearNode temp = new LinearNode(element);

        if (place==0){
            temp.next = Head;
            Head =temp;
        }
        else {
            node1=Head;
            node2=Head.next;

            for (int i =0; i<place-1;i++){
                node1=node1.next;
                node2=node2.next;
            }
            if (node2!=null){
                temp.next=node2;
                node1.next=temp;
            }
            else {
                node1.next=temp;
            }
            nWangZhiwei++;
        }
    }

2.3实验03中出现的问题及解决方案:

  • 刚刚看到这个实验的时候感受没什么思路,由于根本不知道冒泡排序是什么,以后学习了冒泡排序是什么以后仍是很懵逼~~~~·由于不知道怎么对链表进行排序,一开始的时候觉得要交换链表的位置,本身感受很麻烦。以后不知道何时忽然想到了能够直接把一个String型值传进去,再换成数组,再进行排序,这样就会很简单(由于之前作过,如今也是这么作的!)
  • 其次就是很不理解这个条件在排序的每个轮次中, 打印元素的总数,和目前链表的全部元素。了,明明链表里的元素个数都没什么变化,为何还要每次都打印出来?
  • 说了这么多直接写方法吧:
for(int i =0;i < score.length - 1;i++){//使用冒泡排序
            for(int j = 0;j <  score.length - 1-i;j++){ // j开始等于0,
                if(score[j] < score[j+1]) {
                    int temp = score[j];
                    score[j] = score[j+1];
                    score[j+1] = temp;
                    for (int p =0 ;p<score.length;p++){
                        result+= score[p]+ " ";
                }
                    result+="链表中的数量:"+nWangZhiwei;//每一部完成后都打印出来,并加上链表中元素个数。
                result+="\n";
            }

2.4实验04中出现的问题及解决方案:

  • 在作这个实验的时候出现了一个问题:如图

    就是在第四个位置插入元素,插入后原来的第四个元素丢了······
    这是代码
    以后把第二个框的i改为i-1 以后出现这个问题:
    ,缘由是越界!!
    以后仔细想一想才知道了缘由,本身的逻辑并无什么问题只是应该这样改:
    (出现越界的缘由是当插入第一个元素时,它会进入到 else temp[i]=array[i-1]; 此时i=0,i-1=-1。因此越界!!1)

2.5 实验05能够直接使用实验03的方法,毫无违和感!因此没错误~

3. 收获感悟


作这个实验的感觉就是首先得把基础知识搞懂,上课的时候必定要认真听老师讲,否则课下得付出两三倍的时间去消磨它!其次,就是实验的题目得看请,这五个小实验我居然有两次把方法看错了,害得我后面都重写了,浪费了很多时间。嗯,就这么多,就这样吧。加油!
数组

4. 参考文献

相关文章
相关标签/搜索