一: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,结果