• lab3


    1.SList,SListNode,Test放在同一个package,SList才可以调用

    2.double linked----->head=tail;

    3.在insertFront处要注意tail=null的情况

    package lab3;
    
    /* SList.java */
    
    /**
     *  The SList class is a singly-linked implementation of the linked list
     *  abstraction.  SLists are mutable data structures, which can grow at either
     *  end.
     *
     *  @author Kathy Yelick and Jonathan Shewchuk
     **/
    
    public class SList {
    
      private SListNode head;
      private int size;
      private SListNode tail;
    
      /**
       *  SList() constructs an empty list.
       **/
    
      public SList() {
        size = 0;
        head = null;
        tail=null;
      }
    
      /**
       *  isEmpty() indicates whether the list is empty.
       *  @return true if the list is empty, false otherwise.
       **/
    
      public boolean isEmpty() {
        return size == 0;
      }
    
      /**
       *  length() returns the length of this list.
       *  @return the length of this list.
       **/
    
      public int length() {
        return size;
      }
    
      /**
       *  insertFront() inserts item "obj" at the beginning of this list.
       *  @param obj the item to be inserted.
       **/
    
      public void insertFront(Object obj) {
        head = new SListNode(obj, head);
        if(tail==null)
        	tail=head;
        size++;
      }
    
      /**
       *  insertEnd() inserts item "obj" at the end of this list.
       *  @param obj the item to be inserted.
       **/
    
      public void insertEnd(Object obj) {
    	if(tail==null) {
    		tail=new SListNode(obj);
    		head=tail;
    	}else {
    		tail.next=new SListNode(obj);
    		tail=tail.next;
    	}size++;
    	}
    
    /*    if (head == null) {
          head = new SListNode(obj);
        } else {
          SListNode node = head;
          while (node.next != null) {
            node = node.next;
          }
          node.next = new SListNode(obj);
        }
        size++;
    */
    
      /**
       *  nth() returns the item at the specified position.  If position < 1 or
       *  position > this.length(), null is returned.  Otherwise, the item at
       *  position "position" is returned.  The list does not change.
       *  @param position the desired position, from 1 to length(), in the list.
       *  @return the item at the given position in the list.
       **/
    
      public Object nth(int position) {
        SListNode currentNode;
    
        if ((position < 1) || (head == null)) {
          return null;
        } else {
          currentNode = head;
          while (position > 1) {
            currentNode = currentNode.next;
            if (currentNode == null) {
              return null;
            }
            position--;
          }
          return currentNode.item;
        }
      } 
    
      /**
       *  toString() converts the list to a String.
       *  @return a String representation of the list.
       **/
    
      public String toString() {
        int i;
        Object obj;
        String result = "[  ";
    
        SListNode cur = head;
    
        while (cur != null) {
          obj = cur.item;
          result = result + obj.toString() + "  ";
          cur = cur.next;
        }
        result = result + "]";
        return result;
      }
    
    
      /**
       *  main() runs test cases on the SList class.  Prints summary
       *  information on basic operations and halts with an error (and a stack
       *  trace) if any of the tests fail.
       **/
    
      public static void main (String[] args) {
    	  SList a=new SList();
    	  a.insertEnd(6);
    	  a.insertEnd(9);
    	  a.insertEnd(12);
    	  System.out.println(a.toString());
    	  a.insertEnd(15);
    	  a.insertFront(3);
    	  System.out.println(a.toString());
        // Fill in your solution for Part I here.
    
        testEmpty();
        testAfterInsertFront();
        testAfterInsertEnd();
      }
    
        
      /**
       *  testEmpty() tests toString(), isEmpty(), length(), insertFront(), and
       *  insertEnd() on an empty list.  Prints summary information of the tests
       *  and halts the program if errors are detected.
       **/
    
      private static void testEmpty() {
        SList lst1 = new SList();
        SList lst2 = new SList();
        System.out.println();
        System.out.println("Here is a list after construction: "
    		       + lst1.toString());
        TestHelper.verify(lst1.toString().equals("[  ]"),
    		      "toString on newly constructed list failed");
    
        System.out.println("isEmpty() should be true. It is: " +
    		       lst1.isEmpty());
        TestHelper.verify(lst1.isEmpty() == true,
    		      "isEmpty() on newly constructed list failed");    
    
        System.out.println("length() should be 0. It is: " +
    		       lst1.length());
        TestHelper.verify(lst1.length() == 0, 
    		      "length on newly constructed list failed");    
        lst1.insertFront(new Integer(3));
        System.out.println("Here is a list after insertFront(3) to an empty list: "
    		       + lst1.toString());
        TestHelper.verify(lst1.toString().equals("[  3  ]"),
    		      "InsertFront on empty list failed");
        lst2.insertEnd(new Integer(5));
        System.out.println("Here is a list after insertEnd(5) on an empty list: "
    		       + lst2.toString());
        TestHelper.verify(lst2.toString().equals("[  5  ]"),
    		      "insertEnd on empty list failed");
      }
    
      /**
       *  testAfterInsertFront() tests toString(), isEmpty(), length(),
       *  insertFront(), and insertEnd() after insertFront().  Prints summary
       *  information of the tests and halts the program if errors are detected.
       **/
    
      private static void testAfterInsertFront() {
        SList lst1 = new SList();
        lst1.insertFront(new Integer(3));
        lst1.insertFront(new Integer(2));
        lst1.insertFront(new Integer(1));
        System.out.println();
        System.out.println("Here is a list after insertFront 3, 2, 1: "
    		       + lst1.toString());
        TestHelper.verify(lst1.toString().equals("[  1  2  3  ]"),
    		      "InsertFronts on non-empty list failed");
        System.out.println("isEmpty() should be false. It is: " +
    		       lst1.isEmpty());
        TestHelper.verify(lst1.isEmpty() == false,
    		      "isEmpty() after insertFront failed");    
        System.out.println("length() should be 3. It is: " +
    		       lst1.length());
        TestHelper.verify(lst1.length() == 3, 
    		      "length() after insertFront failed");
        lst1.insertEnd(new Integer(4));
        System.out.println("Here is the same list after insertEnd(4): "
    		       + lst1.toString());
        TestHelper.verify(lst1.toString().equals("[  1  2  3  4  ]"),
    		      "insertEnd on non-empty list failed");
      }
        
      /**
       *  testAfterInsertEnd() tests toString(), isEmpty(), length(),
       *  insertFront(), and insertEnd() after insertEnd().  Prints summary
       *  information of the tests and halts the program if errors are detected.
       **/
    
      private static void testAfterInsertEnd() {
        SList lst1 = new SList();
        lst1.insertEnd(new Integer(6));
        lst1.insertEnd(new Integer(7));
        System.out.println();
        System.out.println("Here is a list after insertEnd 6, 7: "
    		       + lst1.toString());
        System.out.println("isEmpty() should be false. It is: " +
    		       lst1.isEmpty());
        TestHelper.verify(lst1.isEmpty() == false,
    		      "isEmpty() after insertEnd failed");    
        System.out.println("length() should be 2. It is: " +
    		       lst1.length());
        TestHelper.verify(lst1.length() == 2, 
    		      "length() after insertEndfailed");
        lst1.insertFront(new Integer(5));
        System.out.println("Here is the same list after insertFront(5): "
    		       + lst1.toString());
        TestHelper.verify(lst1.toString().equals("[  5  6  7  ]"),
    		      "insertFront after insertEnd failed");
      }
    }
    
  • 相关阅读:
    背景图像固定(背景附着)
    css背景图片位置
    2.使用第三种方式做一个多线程操作 3. 使用线程池做一个1到100的偶数之和 4.写一遍生产者与消费者模式 5 写一个字符串的单例设置模式(未完成) 6. 写一个简单工厂着模式
    简单写写
    说说JSON和JSONP区别
    web前端常见的面试题,基础知识点
    优秀网页设计_优秀Web设计的69条设计原则
    PostCSS_自动处理css3属性前缀
    用lnmp架构部署wordpress网站详细步骤
    使用html+css+js实现简易计算器
  • 原文地址:https://www.cnblogs.com/Miaostarer/p/7247868.html
Copyright © 2020-2023  润新知