使用java实现顺序链表,使其放入的元素可以通过指定值来进行排序

5人阅读 评论(0) 收藏 举报
分类:

  一:java的链表是一个非常有用的数据结构,在频繁的对数据结构进行删除,插入等操作时,可以比数组等数据结构更加节省资源。最近在一个小项目中需要通过对具有多属性的数据进行边读取边排序,通常情况下,我们会使用链表来储存从数据库或文件中读取到的数据对象。在这里,笔者构建了一个可以自动排序的链表。


二:构建一个可以自动排序的链表就是在上述链表中的合适位置插入一个节点,这个位置有两种情况,

1:链表为空时,直接将节点放在first的位置。


2:链表不为空,插在链表中的某个位置

 


三:第一种情况直接将要插入的节点赋给首节点就ok了。第二种情况构建时链表时需要两个节点(在C语言中使用指针)指向插入位置的前后的节点。然后使前一个节点的地址位指向插入节点,插入节点的地址位指向后一个节点,这样就完成了节点的插入操作。具体代码为:

1,定义一个可排序的接口,当节点放入数据对象,让链表知道根据那个值进行排序。

/**
 * @author zhouyongxing hfut 1477517404@qq.com
 * 构建一个借口,使得每个有个获取根据某个值进行排序
 */
public interface Sortable {
    public double getSortValue();
}

2,数据对象,实现上述接口

/**
 * @author zhouyongxing hfut 1477517404@qq.com
 * 数据对象
 */
public class Competition implements Sortable {
   
    private String source;
    
    private String target;
   
    private double value;


    public String getSource() {
        return source;
    }

    public void setSource(String source) {
        this.source = source;
    }

    public String getTarget() {
        return target;
    }

    public void setTarget(String target) {
        this.target = target;
    }

    public double getValue() {
        return value;
    }

    public void setValue(double value) {
        this.value = value;
    }
    
    @Override
    public double getSortValue() {
        return value ;
    }
}

3,排序链表

package datastructure.List;

/**
 * @author zhouyongxing hfut 1477517404@qq.com
 */
public class SortedList {
    private Link first;

    /**
     * 构造方法,初始化节点为空
     */
    public SortedList(){
        first=null;
    }

    /**
     * 判断链表是否为空
     * @return flag
     */
    public boolean isEmpty(){
        boolean flag=first==null;
        return flag;
    }

    /**
     * 插入操作
     * @param link
     */
    public void insert(Link link){
        Link pre=null;
        Link cur=first;
        while(cur!=null && link.getValue()<cur.getValue()){
            pre=cur;
            cur=cur.next;
        }
        if(pre==null){
            first=link;

        }else {
            pre.next=link;

        }
        link.next=cur;

    }

    /**
     * 取出操作
     *
     */
    public Link remove(){
           Link tmp=first;
           first=first.next;
           return tmp;
    }

    public void print(){
        Link link=first;
        while (link!=null){
            System.out.println(link.getValue());
            link=link.next;
        }
    }

    public Link getFirst() {
        return first;
    }
}

五:实验结果

1,程序

public class Test {
    public static void main(String [] args){
        SortedList list=new SortedList();
        for(int i=0;i<10;i++){
            Competition competition=new Competition();
            competition.setValue(i);
            Link link=new Link(competition);
            list.insert(link);
        }
        list.print();
    }
}

2,结果


查看评论

java的Comparator接口如何对指定类型进行排序。

java的Comparator接口如何对指定类型进行排序。 实例代码如下: import java.util.Arrays; import java.util.Comparator; ...
  • suyu_yuan
  • suyu_yuan
  • 2016-06-17 14:34:56
  • 329

<数据结构>单链表元素按插入方法排序实现

typedef struct node { int data; struct node *next; }linklist,*link; void Insertsort(link L)...
  • Starbucks_star
  • Starbucks_star
  • 2014-11-03 22:40:07
  • 2223

LinkedList中将对象按照某一属性排序,利用 collection.sort(); 来进行调用!

转发请认准:小红旗:http://blog.csdn.net/happylaoxu 例如,链表 treelist 声明如下: LinkedList treelist = new Linke...
  • happylaoxu
  • happylaoxu
  • 2015-05-11 00:42:57
  • 1324

把HashMap按照key的自然顺序排序

/** * Map按key进行排序 * * @param map * @return */ public static Map sortMap...
  • zfc_luck
  • zfc_luck
  • 2017-04-28 15:22:36
  • 152

单链表进行排序-通过节点交换,不通过值交换

原来我一直都不会对链表进行排序,呵呵,比较菜。今天下了很大的功夫学习对链表的排序,和大家分享一下!         对链表的排序主要有两种方法:         一:只交换节点中的元素,不...
  • ouchengguo
  • ouchengguo
  • 2014-04-20 20:36:24
  • 7998

15.给链表中的数据排序

给定程序中,函数fun的功能是将带头节点的单向链表节点数据中的数据从小到大排序,即若原链表节点数据从头至尾的数据为:10、4、8、6,排序后链表节点数据从头至尾的数据为:2,、4、6、8、10. ...
  • u012814404
  • u012814404
  • 2015-06-23 19:51:39
  • 1940

对元素为map的list按map中的值进行排序

Collections.sort(list, new Comparator() { @Override public int compare(Map o1, Map o...
  • wyz5201314
  • wyz5201314
  • 2015-04-27 17:57:05
  • 366

java对集合元素的特定排序

public class CollectionSort { public static void main(String[] args) { List li = new ArrayList();...
  • qq_32998153
  • qq_32998153
  • 2017-04-25 21:48:08
  • 145

Java中ArrayList 元素的排序

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...
  • sunshine__me
  • sunshine__me
  • 2015-12-13 15:53:55
  • 5742
    个人资料
    等级:
    访问量: 3017
    积分: 116
    排名: 123万+
    文章存档
    最新评论