• 线性结构 实验报告 20162305


    线性结构 实验报告 20162305

    实验一 ArrayList和LinkedList测试

    • 要求:查看ArrayList和LinkedList的Java API帮助文档,参考http://www.cnblogs.com/rocedu/p/4837092.html 用Junit对ArrayList和LinkedList的方法进行测试,要尽量覆盖正常情况,异常情况,边界情况

    • 关于ArrayList:List 接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。(此类大致上等同于 Vector 类,除了此类是不同步的。)size、isEmpty、get、set、iterator 和 listIterator 操作都以固定时间运行。add 操作以分摊的固定时间 运行,也就是说,添加 n 个元素需要 O(n) 时间。其他所有操作都以线性时间运行(大体上讲)。与用于 LinkedList 实现的常数因子相比,此实现的常数因子较低。
      每个 ArrayList 实例都有一个容量。该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向 ArrayList 中不断添加元素,其容量也自动增长。并未指定增长策略的细节,因为这不只是添加元素会带来分摊固定时间开销那样简单。

    • ArrayList中的一些方法

    • 关于LinkedList:List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。此类实现 Deque 接口,为 add、poll 提供先进先出队列操作,以及其他堆栈和双端队列操作。所有操作都是按照双重链接列表的需要执行的。在列表中编索引的操作将从开头或结尾遍历列表(从靠近指定索引的一端)。

    • LinkedList中的一些方法

    • 实验测试截图:

    实验二:分别用Java的ArrayList和LinkedList实现有序线性表的合并

    • 要求:aList,bList都是非递减线性表,合并后也是非递减
      public static List<? extends Comparable> mergeSortedList(List<? extends Comparable> aList,
      List<? extends Comparable> bList)

    测试mergeSortedList的正确性,要尽量覆盖正常情况,异常情况,边界情况,提交测试代码运行截图,包含学号信息

    • 实验设计思路
      本次实验设计是要用ArrayList实现有序线表的合并,我的想法是先定义三个线表,给前两个线表添加元素,然后再把两个表中的元素排好赋值给第三个线表。首先利用ArrayList中的add方法给两个线表添加元素,再利用while判断判断两个表中的元素大小,先将小的元素赋值进第三个线表,再继续比较下一个元素和上次比较较大的元素,再将较小的赋值给线表,循环遍历两个线表,直到结束停止,将第三个线表打印出来。
    • 实验测试代码
    
    import junit.framework.TestCase;
    import java.util.ArrayList;
    import java.util.List;
    
    public class mergeSortedList extends TestCase{
        public void testNormal() {
    
            List <Integer> cList = new ArrayList <>();
            List <Integer> aList = new ArrayList <>();
            List <Integer> bList = new ArrayList <>();
    
            aList.add(1);
            aList.add(3);
            aList.add(5);
    
            bList.add(2);
            bList.add(4);
            bList.add(6);
    
    
    
            int k = 0;
            int i = 0, j = 0;
            Integer bigger = 0, smaller = 0;
            while (i < aList.size() && j < bList.size()) {
    
                if (aList.get(i).compareTo(bList.get(j)) < 0) {
                    smaller = aList.get(i);
                    cList.add(smaller);
                    i++;
                else
                    bigger = bList.get(j);
                    cList.add(bigger);
                    j++;
                }
    
    
            }
            System.out.println(cList);
        }
    
    }
    
    • 实验测试截图

    实验三:参考Java Foundation 3rd 第15.6节,用数组实现线性表List

    • 要求:用JUnit或自己编写驱动类对自己实现的ArrayList进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
    • 实验设计思路
      设计一个ArrayList类,利用泛型,先定义一个空的数组list,再定义add、isEmpty、get方法。首先是add方法,这个方法的目的是给list中添加进元素,如果list为空的话,那么先定义list,包括它的容量(我的代码中设置的容量为10),再把t赋值给第一个元素。如果list不为空的话,则判断它有多少个元素,通过循环确定添加元素的位置,再添加元素,实现add方法。isEmpty方法是判断list是否为空,list为空返回true,不为空返回false。get方法是获取list中的一个元素。如果系数index小于0,则返回空,如果大于等于0,则返回该系数指向的元素。
    • MyArrayList实验代码
    
    public class MyArrayList<T> {
        private T[] list = null;
    
        public boolean add(T t ){
            if(list == null) {
                list = (T[]) new Object[9];
                list[0] = t;
            }
            else
                for (int i = 0;i < this.list.length; i++){
                    if (list[i] == null){
                        list[i] = t;
                        return true;
                    }
            }
            return true;
        }
        public boolean isEmpty(){
            if (this.list == null)
                return true;
            else
                return false;
        }
    
        public T get(int index){
            if (index < 0)
                return null;
            else
                return this.list[index];
        }
    }
    
    • 实验测试截图

    实验四:参考Java Foundation 3rd 第15.7节,用链表实现线性表List

    • 要求:用JUnit或自己编写驱动类对自己实现的LinkedList进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息

    • MyLinkedList实验代码

    • 实验设计思路
      LinkedList类中的一些方法的实现,在想法上同arraylist类似,不过在链表中需要考虑指针的问题。我们先定义一个空指针first,以下的方法实现都与first有关。removeFirst方法是删除第一个元素,我们先定义一个node等于first,再将node的下一个值赋给first,这样指针就指向了下一个,而第一个元素就被自动处理掉了。addFirst方法是将元素加在链表的开头,确定要添加的元素,再将first指向node的下一个元素,再把node赋值个first,使得first指向node。addNode方法是添加元素到链表中,先实例化一个Node对象,再定义两个Node变量,如果链表为空,则执行第一个addFirst方法,不为空,则利用两个变量遍历整个链表,利用next方法将元素添加到链表中。getNode方法是获取链表中的元素,根据系数确定返回出哪个元素,index为0则直接返回出第一个元素,不为零的话,利用循环到需要返回元素的位置,返回出所需要的元素。remove是删除一个元素,实现方法同addNode类似。

    
    public class MyLinkedList<T>{
        private Node<T> first = null;
    
        public void removeFirst(){
            Node<T> node = first;
            first = node.next;
        }
    
        public void addFirst(T t){
            Node<T> node = new Node(t);
            node.next = first;
            first = node;
        }
    
        public void addNode(int index,T t){
            Node newN = new Node(t);
            Node curr = first;
            Node prev = first;
            if(index==0)addFirst(t);
            for(int i = 1;i<=index;i++){
                prev = curr;
                curr = curr.next;
            }
            prev.next = newN;
            newN.next = curr;
        }
        public T getNode(int index){
            Node currentNode = first;
            if(index==0)return first.data;
            for(int i = 1;i<=index;i++){
                currentNode = currentNode.next;
            }
            return (T) currentNode.data;
        }
        public void remove(int index){
            Node prev = first;
            Node curr = first;
            if(index==0)removeFirst();
            for(int i = 1;i<=index;i++){
                prev = curr;
                curr = curr.next;
            }
            prev.next = curr.next;
    
        }
    }
    
    • 实验测试截图

    实验五:l对Java的ArrayList,LinkedList按要求进行源码分析,并在实验报告中体现分析结果

  • 相关阅读:
    Apollo,Python,Delphi与Oracle之间的神话关系
    Delphi语言获得生命的原因和过程
    cocos2d(x) HTML label ;CCHTML CCHTMLLabel
    不重启使XP环境变量生效
    对当下纷繁乱世的思考框架(核心与边缘,时间与成本)
    晚明一出,明朝不必再穿越了
    常用的Linux终端
    如何发布使用LGPL版Qt的商业软件
    如何制作一个类似Tiny Wings的游戏 Cocos2d-x 2.1.4
    文明之火熊熊燃烧,灼热乃至引燃了周边霉湿的柴草
  • 原文地址:https://www.cnblogs.com/lyxwatm/p/7618050.html
Copyright © 2020-2023  润新知