zoukankan      html  css  js  c++  java
  • hw4 打卡

    荒废已久啦~~回归打卡

    DListNode.java:

    package hw4;
    
    /* DList.java */
    /**
     *  A DList is a mutable doubly-linked list ADT.  Its implementation is
     *  circularly-linked and employs a sentinel (dummy) node at the head
     *  of the list.
     *
     *  DO NOT CHANGE ANY METHOD PROTOTYPES IN THIS FILE.
     */
    
    public class DList {
    
      /**
       *  head references the sentinel node.
       *  size is the number of items in the list.  (The sentinel node does not
       *       store an item.)
       *
       *  DO NOT CHANGE THE FOLLOWING FIELD DECLARATIONS.
       */
    
      protected DListNode head;
      protected int size;
    
      /* DList invariants:
       *  1)  head != null.
       *  2)  For any DListNode x in a DList, x.next != null.
       *  3)  For any DListNode x in a DList, x.prev != null.
       *  4)  For any DListNode x in a DList, if x.next == y, then y.prev == x.
       *  5)  For any DListNode x in a DList, if x.prev == y, then y.next == x.
       *  6)  size is the number of DListNodes, NOT COUNTING the sentinel,
       *      that can be accessed from the sentinel (head) by a sequence of
       *      "next" references.
       */
    
      /**
       *  newNode() calls the DListNode constructor.  Use this class to allocate
       *  new DListNodes rather than calling the DListNode constructor directly.
       *  That way, only this method needs to be overridden if a subclass of DList
       *  wants to use a different kind of node.
       *  @param item the item to store in the node.
       *  @param prev the node previous to this node.
       *  @param next the node following this node.
       */
      protected DListNode newNode(Object item, DListNode prev, DListNode next) {
        return new DListNode(item, prev, next);
      }
    
      /**2
        *  DList() constructor for an empty DList.
       */
      public DList() {      
        //  Your solution here.
          head=new newNode(null,null,null);
          head.next=head;
          head.prev=head;
          size=0;
      }
    
      /**
       *  isEmpty() returns true if this DList is empty, false otherwise.
       *  @return true if this DList is empty, false otherwise. 
       *  Performance:  runs in O(1) time.
       */
      public boolean isEmpty() {
        return size == 0;
      }
    
      /** 
       *  length() returns the length of this DList. 
       *  @return the length of this DList.
       *  Performance:  runs in O(1) time.
       */
      public int length() {
        return size;
      }
    
      /**
       *  insertFront() inserts an item at the front of this DList.
       *  @param item is the item to be inserted.
       *  Performance:  runs in O(1) time.
       */
      public void insertFront(Object item) {
        // Your solution here.
          head.next=newNode(item,head,head.next);
          head.next.next.prev=head.next;
          size++;
      }
    
      /**
       *  insertBack() inserts an item at the back of this DList.
       *  @param item is the item to be inserted.
       *  Performance:  runs in O(1) time.
       */
      public void insertBack(Object item) {
          head.prev=newNode(item,head.prev,head);
          head.prev.prev.next=head.prev;
          size++;
          // Your solution here.
      }
    
      /**
       *  front() returns the node at the front of this DList.  If the DList is
       *  empty, return null.
       *
       *  Do NOT return the sentinel under any circumstances!
       *
       *  @return the node at the front of this DList.
       *  Performance:  runs in O(1) time.
       */
      public DListNode front() {
        // Your solution here.
          if(size==0) {
              return null;
          }else {
              return head.next;
          }
      }
    
      /**
       *  back() returns the node at the back of this DList.  If the DList is
       *  empty, return null.
       *
       *  Do NOT return the sentinel under any circumstances!
       *
       *  @return the node at the back of this DList.
       *  Performance:  runs in O(1) time.
       */
      public DListNode back() {
        // Your solution here.
          if(size == 0){
              return null;
            }else{
              return head.prev;
            }
      }
    
      /**
       *  next() returns the node following "node" in this DList.  If "node" is
       *  null, or "node" is the last node in this DList, return null.
       *
       *  Do NOT return the sentinel under any circumstances!
       *
       *  @param node the node whose successor is sought.
       *  @return the node following "node".
       *  Performance:  runs in O(1) time.
       */
      public DListNode next(DListNode node) {
        // Your solution here.
          if(size==0||node==head.prev) {
              return null;
          }else {
              return node.next;
          }
      }
    
      /**
       *  prev() returns the node prior to "node" in this DList.  If "node" is
       *  null, or "node" is the first node in this DList, return null.
       *
       *  Do NOT return the sentinel under any circumstances!
       *
       *  @param node the node whose predecessor is sought.
       *  @return the node prior to "node".
       *  Performance:  runs in O(1) time.
       */
      public DListNode prev(DListNode node) {
        // Your solution here.
          if(size == 0||node==head.next){
              return null;
            }else{
              return node.prev;
            }
      }
       /**
       *  insertAfter() inserts an item in this DList immediately following "node".
       *  If "node" is null, do nothing.
       *  @param item the item to be inserted.
       *  @param node the node to insert the item after.
       *  Performance:  runs in O(1) time.
       */
      public void insertAfter(Object item, DListNode node) {
        // Your solution here.
          if(node!=null) {
              node.next=newNode(item,node,node.next);
              node.next.next.prev=node.next;
              size++;
          }
      }
      /**
       *  insertBefore() inserts an item in this DList immediately before "node".
       *  If "node" is null, do nothing.
       *  @param item the item to be inserted.
       *  @param node the node to insert the item before.
       *  Performance:  runs in O(1) time.
       */
      public void insertBefore(Object item, DListNode node) {
        // Your solution here.
          if(node!=null){
              node.prev=newNode(item,node.prev,node);
              node.prev.prev.next=node.prev;
              size++;
            }
      }
      /**
       *  remove() removes "node" from this DList.  If "node" is null, do nothing.
       *  Performance:  runs in O(1) time.
       */
      public void remove(DListNode node) {
        // Your solution here.
          if(node!=null) {
              node.prev.next=node.next;
              node.next.prev=node.prev;
              size--;
          }
      }
    
      /**
       *  toString() returns a String representation of this DList.
       *
       *  DO NOT CHANGE THIS METHOD.
       *
       *  @return a String representation of this DList.
       *  Performance:  runs in O(n) time, where n is the length of the list.
       */
      public String toString() {
        String result = "[  ";
        DListNode current = head.next;
        while (current != head) {
          result = result + current.item + "  ";
          current = current.next;
        }
        return result + "]";
      }
    }
    View Code

    LockDListNode.java:

    package hw4;
    
    public class LockDListNode extends DListNode{
        protected boolean lock;
        LockDListNode(Object i,DListNode p,DListNode n){
            super(i,p,n);
            lock=false;
        }
    }
    View Code

    LockDList.java:

    package hw4;
    
    public class LockDList extends DList{ 
         public void LockNode(DListNode node){
             ((LockDListNode)node).lock=true;
         }
         protected LockDListNode newNode(Object item, DListNode prev, DListNode next){
             return new LockDListNode(item, prev, next);
         }
         public LockDListNode front(){
             return (LockDListNode)(super.front());
         }
         public LockDListNode back(){
             return (LockDListNode)(super.back());
         }
         public LockDListNode next(DListNode node){
             return (LockDListNode)(super.next(node));
         }
         public LockDListNode prev(DListNode node){
             return (LockDListNode)(super.prev(node));
         }
         public void remove(DListNode node){
             if(!((LockDListNode)node).lock){
             super.remove(node);
            }
         }
    }
    View Code

    测试结果:

    测试代码网上找的,感觉大家的都差不多哈哈哈

  • 相关阅读:
    每天两题02
    每天两题01
    简单看看原码、补码和反码
    简单看看java之枚举
    随意看看AtomicInteger类和CAS
    js原型链
    简单看看jdk7源码之Object和String
    简单学习js
    element的表单校验自动定位到该位置
    for循环使用element的折叠面板遇到的问题-3
  • 原文地址:https://www.cnblogs.com/jxtang/p/7301959.html
Copyright © 2011-2022 走看看