zoukankan      html  css  js  c++  java
  • 20182330 2019-2020-1 《数据结构与面向对象程序设计》实验六报告

    20182330 2019-2020-1 《数据结构与面向对象程序设计》实验六报告

    课程:《程序设计与数据结构》
    班级: 1823
    姓名: 魏冰妍
    学号:20182330
    实验教师:王志强
    实验日期:2019年10月23日
    必修/选修: 必修

    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. 实验过程及结果

    实验一

    输入整数建立链表并打印

    实验二、三

    实验四、五

    以下是MainActivity,定义文本框,初始化,并设置监听器

    以下是Link方法,实现链表的插入、删除等

    以下是布局文件和运行结果


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

    • 问题1:如何将输入的字符串存入字符串数组
    • 问题1解决方案:通过查询,我找到了split方法
    • 总结一下split方法的使用:Java中的 split 函数是用于按指定字符(串)或正则去分割某个字符串,结果以字符串数组形式返回。下图是我用空格分割字符串的代码。

    • 也可以用两个分割符,如图

    • 结果如下:

    • 我们还可以设置分割的份数,就像这样

    • 结果如下:

    • 对于分割的字符(串),通常是常见,普通的,没什么问题。需要注意的是 | , + , * , ^ , $ , / , | , [ , ] , ( , ) , - , . , 等字符, 因它们是正则表达式中的一部分, 所以需要进行转义才能表示它本身,比如这样

    • 问题2:链表只打印出表头,单步调试无果

    • 问题2解决方案:刚开始以为是打印的问题,检查了好久都没有检查出来,后来恍然大悟,这是一个在学c语言的时候也出现过的问题:该用while的地方错用了if而且浑然不知。

    • 在用if时只判断了一遍node.next是否等于null,当然只能打印第一个数字,只有while可以循环。

    • 问题3:头插法方法正确但无法正确打印?

    • 检查了好多遍都没有发现方法有错,代码如下:

     public static void HeadInsert(Link Head,Link node){
            System.out.println("The list headinserted is: ");
            node.next=Head;
            Head=node;
            Head.toString();
     }
    

    在逻辑上查找错误无果,请教胡泊同学,一语点醒梦中人。头插法时换了“头”Head,而你的void型无法返回新的“Head”,就等于做了无用功。修改如下:

    public static Link HeadInsert(Link Head,Link node){
            System.out.println("The list headinserted is: ");
            node.next=Head;
            Head=node;
            Head.toString();
            return Head;
        }
    
    • 问题4:按照如下代码无输入输出

    • 解决4:在AndroidStudio中setText必须输出String变量接收的字符串。修改成如下代码:
    MidInsert(Head,i,5);
                String str3="The numbers of number in the list is ";
                p.setText(str3+ nWeiBingYan );
                q.setText(Head.toString());
    
    

    其他(感悟、思考等)

    学习数据结构需要实践与理论相结合,关键要理解,其次要练。这次实验问题很多,主要还是安卓的操作没有掌握。

    参考资料

  • 相关阅读:
    swift 第十四课 可视化view: @IBDesignable 、@IBInspectable
    swift 第十三课 GCD 的介绍和使用
    swift 第十二课 as 的使用方法
    swift 第十一课 结构体定义model类
    swift 第十课 cocopod 网络请求 Alamofire
    swift 第九课 用tableview 做一个下拉菜单Menu
    swift 第八课 CollectView的 添加 footerView 、headerView
    swift 第七课 xib 约束的优先级
    swift 第六课 scrollview xib 的使用
    swift 第五课 定义model类 和 导航栏隐藏返回标题
  • 原文地址:https://www.cnblogs.com/weiii/p/11766279.html
Copyright © 2011-2022 走看看