博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hw4 打卡
阅读量:6153 次
发布时间:2019-06-21

本文共 7534 字,大约阅读时间需要 25 分钟。

荒废已久啦~~回归打卡

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

测试结果:

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

 

转载于:https://www.cnblogs.com/jxtang/p/7301959.html

你可能感兴趣的文章
while()
查看>>
常用限制input的方法
查看>>
IIS7下使用urlrewriter.dll配置
查看>>
并行程序设计学习心得1——并行计算机存储
查看>>
bulk
查看>>
C++ 迭代器运算
查看>>
【支持iOS11】UITableView左滑删除自定义 - 实现多选项并使用自定义图片
查看>>
【算法笔记】多线程斐波那契数列
查看>>
java8函数式编程实例
查看>>
jqgrid滚动条宽度/列显示不全问题
查看>>
在mac OS10.10下安装 cocoapods遇到的一些问题
查看>>
css技巧
查看>>
Tyvj 1728 普通平衡树
查看>>
javascript性能优化
查看>>
多路归并排序之败者树
查看>>
java连接MySql数据库
查看>>
转:Vue keep-alive实践总结
查看>>
深入python的set和dict
查看>>
C++ 11 lambda
查看>>
Android JSON数据解析
查看>>