Java学习之,总结乎——链表

链表的含义是指线性表的链式存储。

链表有单链表,双链表,循环链表,这里只给出带头结点的单链表代码。

 

/**
 * 带头结点的单链表类
 * @author Administrator
 *
 */
public class LinkedNode {
    
	
	public Node root;//头结点
	public Node tail;// 尾节点
	public  int size;//单链表长度
	
	/**
	 * 在单链表末尾添加节点的方法
	 * @param node要添加的节点
	 */
	public boolean add(Node node){
		if(root==null){
			root=node;
			tail=node;
			return true;
		}
		tail.setNext(node);
		tail=node; 
		size++;
		return true;
	}
	
	/**
	 * 在指定位置插入元素
	 * @param index
	 * @param node
	 * @return 
	 */
	public boolean add(int index,Node node){
		if(index>=this.size)
			return this.add(node);
		else{
			Node n=this.root;
			for(int i=0;n.getNext()!=null&&i<index-1;i++){
				n=n.getNext();
			}
			node.setNext(n.getNext());
			n.setNext(node);
			this.size++;
		}
		
		return true;
	}
	
	/**
	 * 查找指定位置的元素
	 * @param args
	 */
	
	public Object get(int index){
		if(index<0||index>size)
			return null;
		Node node=root;
		for(int i=0;i<index;i++){
			node=node.getNext();
		}
		
		return node.getData();
	}
	
	
	
	/**
	 * 删除某一指定位置的元素
	 * @param index
	 */
	public Node delete(int index){
		Node node=root;
		if(index>=0){
			for(int i=0;i<index-1&&node.getNext()!=null;i++){
				node=node.getNext();
			}
			if(node.getNext()!=null){
				if(node.getNext()==this.tail)
					this.tail=node;
				node.setNext(node.getNext().getNext());
				this.size--;
			}
		}
		return node;
	}
}

/**
 * 节点类
 * @author Administrator
 *
 */
public class Node {
    private Object data;//数据域
    private Node next;//引用域 
    
    
	public Object getData() {
		return data;
	}
	public void setData(Student data) {
		this.data = data;
	}
	public Node getNext() {
		return next;
	}
	public void setNext(Node node) {
		this.next = node;
	}
}

/**
 * 测试类
 * 将学生对象加入链表,按照分数非递减排序后并输出
 */
import java.util.Random;

   public class Student {
	   
    private int score;
     
	public int getScore() {
		return score;
	}
	public void setScore(int score) {
		this.score = score;
	}
     
   public static void main(String[] args) {
		
	   
		LinkedNode link=new LinkedNode();
		
		Random ran=new Random();

		//添加节点
		for(int i=0;i<10;i++){
			 Student stu=new Student();
			int score=ran.nextInt(10)+1;
			stu.setScore(score);
			Node node =new Node();
			node.setData(stu);
			link.add(node);
		}
		
		//输出排序前
		System.out.println("排序前"+link.size+"个学生分数:");
		for(int i=0;i<link.size;i++){
			Student st=(Student)link.get(i);
			System.out.print(st.score+" ");
		}
       
		//排序
		for(int i=0;i<link.size;i++){
			for(int j=i;j<link.size;j++){
			int max=0;
			Student st=(Student)link.get(i);
			Student st2=(Student)link.get(j);
			if(st.score>st2.score){
				max=st.score;
				st.score=st2.score;
				st2.score=max;
			}
			
		}
		}
		
		//输出排序后
		System.out.println("\n");
		System.out.println("排序后"+link.size+"的学生分数:");
		for(int i=0;i<link.size;i++){
			Student st=(Student)link.get(i);
			System.out.print(st.score+" ");
		}
		
	    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值