`
Liang_Hong
  • 浏览: 6779 次
社区版块
存档分类
最新评论

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+" ");
		}
		
	    }
}

 

分享到:
评论

相关推荐

    《Java数据结构和算法》学习笔记(4)——链表

    进一步学习,可以研究双向链表,它允许在节点的前后进行插入和删除,提高了操作的灵活性。循环链表则形成一个闭合的环,可以简化某些循环操作。 总之,链表是数据结构的基础,理解和熟练运用链表对于提升编程技能...

    java 单链表和双向链表的实现

    本话题主要探讨两种常用的数据结构——单链表和双向链表在Java中的实现,以及相关的操作,如在头部添加节点、在尾部添加节点、遍历、逆置和删除。 首先,我们来理解单链表和双向链表的基本概念。单链表是一种线性...

    剑指offer计划2(链表)---java(csdn)————程序.pdf

    在本文中,我们将深入探讨与链表相关的三个Java编程题目,这些都是出自《剑指Offer》这本书的挑战。我们将依次分析每个题目,理解其要求,并详细解释解决方案。 **第一题:从尾到头打印链表** 这道题目的目标是从...

    《Java开发实战经典》——学习攻略

    《Java开发实战经典》是一本以JAVA EE开发为目标的书籍,它强调了学习Java的核心在于理解和运用面向对象的思想。在开始阅读此书之前,读者需要理解JAVA SE与JAVA EE之间的关系,即JAVA SE是JAVA EE的基础,掌握了...

    双端链表和双向链表Java代码

    本主题主要关注两种特殊类型的链表——双端链表(Double-ended LinkedList)和双向链表(Bidirectional LinkedList),并以Java语言实现为例进行讲解。 双端链表,也称为双链表,是一种允许在链表的两端进行插入和...

    Java算法实例-双向链表操作

    本实例聚焦于Java中的一个重要数据结构——双向链表,它在很多场景下都有着广泛的应用。双向链表与单链表相比,其独特之处在于每个节点不仅包含指向下一个节点的指针,还包含指向前一个节点的指针,这使得在链表中的...

    7.java学习第七章——方法+内存结构讲解+方法重载.pdf

    Java语言已经提供了多种内置的数据结构,如数组、链表、栈、队列等,供开发者直接使用。 #### 2. JVM内存结构 Java虚拟机(JVM)的内存结构主要包括三个部分: - **栈内存**:用于存储局部变量和方法调用信息。当...

    java经典小游戏——贪吃蛇源码(线程、链表、GUI)

    java经典小游戏——贪吃蛇源码 在我们学习java的时候,为了提高我们的兴趣,我们经常会使用所学到的知识去做一些小游戏,我在这里分享了贪吃蛇的源码,有兴趣的可以去...

    JAVA 链表实验源代码

    这里我们关注的是两个源代码文件——`ListNode.java`和`StringLinkedList.java`,它们是关于链表实现的Java源代码实验。 首先,`ListNode.java`通常会包含链表节点的定义。链表节点是链表的基本组成单元,它存储...

    Java-数据结构课设-链表实现通讯录管理系统

    第一个模块——主函数main()的功能是:根据选单的选项调用各函数,并完成相应的功能。 
 第二个模块——Menu()的功能是:显示提示选单。 
 第三个模块——Quit()的功能是:退出选单。 
 第四个模块——Create...

    java代码-使用java面向对象的方法实现链表的源代码

    java代码-使用java面向对象的方法实现链表的源代码 ——学习参考资料:仅用于个人学习使用!

    JAVA-SE入门学习——第八讲集合

    LinkedList基于双向链表,插入和删除速度快,但随机访问慢。 1.8 Map接口【理解】 Map接口不同于Collection接口,它存储的是键值对(key-value)的数据结构。HashMap、TreeMap、LinkedHashMap和Hashtable是Map接口...

    基于java数据结构链表写的猴子选大王

    本文将深入探讨一个基于Java数据结构链表实现的经典问题——“猴子选大王”,也称作约瑟夫环问题。该问题源于一个古老的传说,一群猴子围成一个圈,从某一只开始按顺时针方向依次报数,数到特定数值的猴子会被淘汰,...

    Java经典算法50题——答案下载!

    Java经典算法50题,是Java开发者提升编程能力的重要练习资源。这50题涵盖了数据结构、排序算法、搜索算法等多个领域,旨在帮助程序员深化对基础理论的理解,并提高实际问题解决能力。通过解决这些题目,你可以熟悉并...

    高级JAVA面试——最全的总结

    在准备高级JAVA面试时,全面了解和掌握...通过阅读"Java.doc"、"面试_JAVA_宝典—最全的总结.doc"、"Java框架面试题总结_201104.doc"和"java面试.doc"等文档,可以进一步强化这些知识,并找到面试中的常见问题和答案。

    基于Java实现的单链表基本操作之链表分割.zip

    首先,我们需要一个LinkedList类来封装链表的操作,例如添加节点、打印链表、以及本文的重点——链表分割。 添加节点到链表的典型操作是插入到链表的末尾: ```java public void append(int data) { Node newNode...

    java常用工具类——个人总结

    以下是我个人对Java中常用工具类的总结,主要涉及了加密、文件上传和日期处理等核心领域。 1. **加密工具类**: - `java.security` 包下的 `MessageDigest` 类用于实现消息摘要算法,如MD5和SHA,常用于数据完整性...

    剑指offer计划15( 搜索与回溯算法中等)---java(csdn)————程序.pdf

    在Java代码中,定义两个全局变量`pre`和`head`分别表示前一个节点和链表头,使用DFS进行中序遍历,每次访问一个非空节点,更新其左右指针,并将`pre`更新为当前节点,最终形成环形链表。 3. **二叉树中和为某一值的...

    单链表双向链表java实现

    在这个话题中,我们将深入探讨两种基本的线性数据结构——单链表和双向链表,并通过Java语言来实现它们。 单链表是一种线性数据结构,其中每个元素(称为节点)包含两个部分:数据域和指针域。数据域存储实际的数据...

    Java面试题必备——Java基础知识部分汇

    Java面试题必备——Java基础知识部分汇总 本文总结了Java基础知识部分的重要知识点,涵盖了Java面试中常见的问题,包括作用域、String类、int和Integer的区别、String和StringBuffer的区别、运行时异常与一般异常的...

Global site tag (gtag.js) - Google Analytics