Predecessor interface

/*** Created by root on 16-3-4.*/
public interface Predecessor<E> {public ListNode getNext();public void setNext(ListNode node);
}

ListNode

public class ListNode<E> implements Predecessor {//链表节点E item;//链表节点字段 用于存放二叉树的节点ListNode next;public ListNode(){this.item=null;next=null;}public ListNode(E item){  //有参构造this.item=item;     //设置字段next=null;}public ListNode(E item,ListNode node){this.item=item;this.next=node;}public E getItem(){return this.item;}  //获取字段public void setItem(E item){this.item=item;} //重设字段public void setNext(ListNode next){this.next=next;}  //设置下一个节点public ListNode getNext(){//获得下一个节点return next;}
}

OrderedList

import java.util.Comparator;/*** Created by root on 16-3-4.*/
public class OrderedList<E extends Comparable> implements Predecessor {//E 继承了class Comparable 附带了方法 compareToprivate ListNode front;  //头指针public ListNode getNext(){  //prev的get next方法 得到frontreturn front;}public void setNext(ListNode node){this.front=node;}//prev的 setNext方法 设置front的 nextpublic void add(E target){ //向有序表加入valuePredecessor prev =this; //虚拟一个front的前节点 prevListNode node =front;  //指向头节点的node指针while (node!=null){int comparison =target.compareTo(node.getItem());//如果target> node.item comparison >0if(comparison<0){ //向有序表insert一个节点prev.setNext(new ListNode(target,node));return;//中断循环 在prev和node之间加入一个节点}else if(comparison==0)return;//重复则不操作 并终端循环else{prev=prev.getNext();node=node.getNext();//两指算法 向后移动}}prev.setNext(new ListNode(target));//如果有序表为空   或者加入的target是最大的值  加入新节点}public boolean contains(E target){ListNode node =front;while(node!=front){int comparison =target.compareTo(node.getItem());if(comparison<0) return false;  //如果target小于有序表的最小值 则中断查询else if(comparison==0)return true;//找到目标 返回tureelse {node=node.getNext();}}return false;}public boolean remove(E target){//和查找类似Predecessor prev =this;ListNode node =front;while(node!=null){int comparison=target.compareTo(node.getItem());if(comparison<0)return false;//如果查找到比目标更大的值 中断操作else if(comparison==0)prev.setNext(node.getNext());//链接else{prev=prev.getNext();node=node.getNext();}}return false;}
}

测试类

/*** Created by root on 16-3-4.*/
public class Test {public static void main(String[] args){OrderedList orderedList =new OrderedList();orderedList.add(1);orderedList.add(7);orderedList.add(4);orderedList.add(5);ListNode node =orderedList.getNext();while(node!=null){System.out.println(node.getItem());node=node.getNext();}System.out.println(orderedList.contains(7));orderedList.remove(7);System.out.println(orderedList.contains(7));}
}

结果

1
4
5
7
false

转载于:https://www.cnblogs.com/Salaku/p/5242552.html

Java数据结构--有序表相关推荐

  1. 深度剖析Java数据结构之表(三)——ArrayList泛型类的实现

    为了避免与类库中的ArrayList类重复,在这里,使用的类名为ArrayListDemo.在Java中,ArrayList泛型类是继承AbstractList泛型类的,并且实现了List<E& ...

  2. JAVA数据结构 线性表的链式存储及其实现

    2019独角兽企业重金招聘Python工程师标准>>> 2线性表的链式存储及其实现 虽然顺序表具有随机存取的特点是一种有用的存储结构但是也有缺陷: (1)      若需要给顺序表增 ...

  3. Java数据结构03-------------链表

    文章目录 使用带head头的单向链表的实现 leetCode203:移除链表元素 leetCode206:反转单链表 leetCode141:判断链表是否有环 双向链表实现增删改 约瑟夫问题 链表: ...

  4. Java数据结构——顺序表

    一个线性表是由n(n≥0)个数据元素所构成的有限序列. 线性表逻辑地表示为:(a0,a1,-,an-1).其中,n为线性表的长度,n=0时为空表.i为ai在线性表中的位序号. 存储结构: 1.顺序存储 ...

  5. 深度剖析Java数据结构之表(四)——LinkedList泛型类的实现

    在Java中,LinkedList泛型类继承了AbstractSequentialListf泛型类,实现了List.Deque.Colneable和Serializable接口,定义如下: 该类的实现 ...

  6. 深度剖析Java数据结构之表(二)——List接口

    一.List接口 在Java中,List接口的定义如下: public interface List<E> extends Collection<E> { int size() ...

  7. Java数据结构——有序链表

    //================================================= // File Name : SortedList_demo //--------------- ...

  8. 深度剖析Java数据结构之迭代器(Iterator)

    一.什么是迭代器 我们知道,JVM是用C/C++编写的.在百度百科中,迭代器是解释是迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定 ...

  9. 头歌JAVA数据结构答案

    头歌JAVA数据结构答案 一.Java数据结构-循环链表的设计与实现 第1关 单循环链表的实现-链表的添加.遍历 package step1; /*** Created by sykus on 201 ...

最新文章

  1. Ctrl+C提示是否终止shell脚本
  2. CentOS7.5常用命令整理
  3. linux shell 删除文本 较长行
  4. vb.net2019-播放声音(wav、mp3等)
  5. spark 历史版本下载地址
  6. Oracle 11gR2 RAC Service-Side TAF 配置示例
  7. 无法连接iphone软件更新服务器_NX许可证错误:无法连接至许可证服务器系统。SPLM_LICENSE_SERVER错误[15]...
  8. python与机器学习(四)——线性回归和逻辑斯蒂回归
  9. Redis数据结构详解之Zset(五)
  10. Java编程练习题Demo71-Demo80
  11. edius裁剪快捷键_edius5.0常用快捷键 edius快捷键使用大全
  12. Linux环境下搭建Java Web测试环境的具体步骤
  13. 华为浏览器如何进入阅读模式_华为浏览器有阅读模式吗
  14. Image Signal Processor
  15. 智慧树知到等各大网课搜题接口及搜题公众号搭建教程
  16. 微软服务器2016各版本区别,Win10各版本区别 最强的你绝对没猜到
  17. 不是广告!!迎来1w粉丝,本号送书啦!|原创
  18. 字符常量及字符变量(实例:大小写字母转换)
  19. CToolBar的使用总结(1)
  20. Android Developers:支持不同的屏幕大小

热门文章

  1. JTAG与STC,DEBUGWIRE区别
  2. 编译pqxx源码configure时遇到codecs.py LookupError的解决方法
  3. 深拷贝(deep clone)与浅拷贝(shallow clone)
  4. ZwQueryVirtualMemory暴力枚举进程模块
  5. 字符串的全排列和组合算法
  6. asd.equals(s)与s.equals(asd)为什么前者可避免NullPointerException
  7. O(n)线性构造后缀树详解(一)
  8. orcal 忘记用户名和密码
  9. 算法------二叉树的层序遍历
  10. jQuery方法大全