`
lj_gzy2014
  • 浏览: 18239 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

java编程基础之链表

    博客分类:
  • java
 
阅读更多

          数组查询速度虽然快,但插入删除不方便,链表不是线性存储,便于插入删除。可以将链表比作一辆火车,链表的节点就是一节节车厢,节点中的数据就是车厢中的东西,节点间的联系就是车厢之间的联系。

          如何实现一个链表呢?“万丈高楼平地起”,做“火车”先得准备“车厢”-------节点类

节点中有两个属性:1.数据,2.对下一个节点的指向

package list;

public class LinkNode {
	Object data;
	public LinkNode next;
	public Object getData() {
		return data;
	}
	public void setData(Object data) {
		this.data = data;
	}
	public LinkNode getNext() {
		return next;
	}
	public void setNext(LinkNode next) {
		this.next = next;
	}
	
	
}

            “车厢”准备好了,可以组装火车了。首先考虑一个链表有哪些属性,毫不疑问,有以下几个:

1.根节点(root),2.链表长度(length);

链表的方法:增,删,改,查;

代码如下:

 

 

package list;
//T是泛型
public class LinkList<T> {
	private LinkNode root=null,tail=null;
	int length=0;
	//得到长度
	public int  size(){
		return length;
	}
	//添加
	public void add(T data){
		LinkNode node=new LinkNode();
		node.setData(data);
		node.setNext(null);
		length++;
		if(root==null){
			root=node;
			tail=root;
		}else{
		     tail.next=node;
		     tail=node;     
		}	
	}
	//查询
	public LinkNode getNode(int index){
		LinkNode node=new LinkNode();
		node=root;
		for(int i=0;i<index-1;i++){
			node=node.next;
		}
		return node;
	}
	//按数据删除
	public void delData(T data){
		int count=0;
		for(int i=0;i<this.length;i++){
			LinkNode node=this.getNode(i);
			if(node.data==data){
				if(node==root){
					root=root.next;	
				}else
				{
					LinkNode newnode=this.getNode(i-1);
					newnode.setNext(node.next);
				}
				length--;
				count++;
			}
		}
		if(count==0){
			System.out.println("not found !");
		}
	}
	//按索引删除
	public void delIndex(int index){
		if(index==1){
			root=root.next;
			length--;
		}
		else if(index>1&&index<=length){
			LinkNode node1=this.getNode(index);
			LinkNode node2=this.getNode(index-1);
			node2.setNext(node1.next);
			length--;
		}
		else{
			System.out.println("error");
		}
		
	}
	//插入
	public void insert(T data,int index){
		if(index>length||index<1){
			System.out.println("error");
		}
		else{
			LinkNode node=new LinkNode();
			node.setData(data);
			length++;
			if(index==1){
			    node.setNext(root);
				root=node;
			}
			else
			{
				LinkNode node1=this.getNode(index);
				LinkNode node2=this.getNode(index-1);
				node.setNext(node1);
				node2.setNext(node);
			}
		}
	}
	//遍历
	public void travel(LinkList list){
		for(int i=0;i<list.length;i++){
			LinkNode node=list.getNode(i+1);
			System.out.println(node.data);
		}
	}
	//更新
	public void update(int index ,T data){
		if(index>length||index<1){
			System.out.println("error");
		}
		else
		{
			LinkNode node=this.getNode(index);
			node.setData(data);
		}
	}
	public static void main(String []args){
		LinkList list=new LinkList();
		for(int i=0;i<10;i++){
			list.add(i+1);
		}
		list.travel(list);
		
		list.delData(6);
		list.travel(list);
		
		list.delIndex(10);
		list.travel(list);
		
		list.update(4, 100);
		list.travel(list);
	}
}

 

 

分享到:
评论

相关推荐

    java链表 个人总结

    Java链表是编程中一种基础且重要的数据结构,它在许多场景下有着广泛的应用。本文将结合个人学习心得,深入探讨Java链表的核心概念、实现方式以及与其他编程语言的互通性。 首先,链表是一种线性数据结构,与数组...

    java 数据结构 遍历链表程序

    在Java编程语言中,数据结构是程序设计的基础,它涉及到如何高效地存储和访问数据。链表作为一种重要的数据结构,广泛应用于各种算法和系统设计中。本篇文章将深入讲解Java中链表数据结构的遍历程序,以及如何通过`...

    java实现的动态链表

    动态链表是一种常见的数据结构,尤其在编程语言如Java中被广泛使用。动态链表与静态数组不同,它允许在运行时动态地添加或删除元素,而无需预先确定其大小。下面我们将深入探讨Java中如何实现动态链表及其相关知识点...

    java 数据结构 链表

    了解并熟练掌握链表的原理和操作,对于提升Java编程能力和解决复杂问题的能力至关重要。 总结来说,Java中的链表是一种灵活的数据结构,适用于动态数据集的管理,提供了插入、删除和遍历等基本操作。理解链表的工作...

    基于java的循环双链表

    在Java编程中,我们可以使用面向对象的设计思想来实现循环双链表。通常,这样的数据结构会包含三个主要部分:一个接口定义链表的基本操作,一个类实现这个接口来构建具体的链表结构,还有一个测试类用于验证链表功能...

    Java算法(链表操作实例)

    在编程领域,算法是解决问题的关键,而链表作为一种基础数据结构,在实现各种复杂算法时扮演着重要角色。本文将深入探讨Java中链表的操作实例,旨在帮助开发者更好地理解和运用链表来解决实际问题。 首先,我们需要...

    Java版链表模板类

    在编程领域,链表是一种非常基础且重要的数据结构,它不同于数组,不需要预先分配连续的内存空间,而是通过节点间的引用关系存储数据。本话题主要关注的是Java中的链表实现,特别是循环链表的模板类设计。循环链表与...

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

    在编程领域,数据结构是构建高效算法的基础,而链表作为一种重要的线性数据结构,有着广泛的应用。本主题主要关注两种特殊类型的链表——双端链表(Double-ended LinkedList)和双向链表(Bidirectional LinkedList...

    java编程基础(培训机构内用)

    Java编程基础是编程学习的重要一环,尤其对于初学者来说,掌握Java语言的基本概念、语法和编程思维至关重要。这份“北京某培训机构内部教材”显然旨在为学员提供一套系统的Java入门教程。作为经典的教学资料,它可能...

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

    在实际编程中,理解和熟练运用各种数据结构是解决问题的关键,而链表作为其中一种基础数据结构,其灵活的特性使其在很多场景下都具有广泛的应用。通过解决此类问题,我们可以深化对数据结构的理解,并提高编程能力。

    JAVA 链表实验源代码

    在Java编程语言中,链表是一种非常基础且重要的数据结构,它被广泛应用于各种算法和程序设计中。这里我们关注的是两个源代码文件——`ListNode.java`和`StringLinkedList.java`,它们是关于链表实现的Java源代码实验...

    java链表的程序

    Java链表是一种基础且重要的数据结构,主要用于存储和管理动态数据集合。在Java中,有多种类型的链表,包括单链表、双链表和循环链表等。本程序可能是针对这些链表类型的一种实现,用于Java考试复习。在Java中,`...

    我自己java数据结构之链表

    在Java编程语言中,数据结构是程序设计的基础,它们提供了高效存储和操作数据的方法。链表是一种常用的数据结构,尤其在处理动态数据集合时。在这个主题中,我们将深入探讨链表,特别是`LinkedList`和`ArrayList`两...

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

    在编程领域,数据结构与算法是基础且至关重要的部分,它们直接影响到程序的效率和设计。本实例聚焦于Java中的一个重要数据结构——双向链表,它在很多场景下都有着广泛的应用。双向链表与单链表相比,其独特之处在于...

    多项式相加 java链表实现

    在Java编程中,实现多项式的加法和乘法通常涉及到数据结构的设计,这里采用链表作为数据结构的基础。本文将详细讲解如何使用链表来实现两个多项式的相加和相乘,并以链表形式输出结果。 首先,我们需要定义一个表示...

    整数链表

    在`IntegerLinkedList`类的内部,我们可以定义一个结构体(在C++中)或类(在Java中),代表链表节点。例如,可以命名为`ListNode`,包含一个整数变量`val`用于存储整数值,以及一个指针`next`指向下一个节点。 ```...

    用链表实现线性表java

    在Java编程语言中,线性表是一种常见的数据结构,它包含了一组有序的元素集合。线性表可以采用多种方式实现,其中链表是一种常见且灵活的方法。本篇将深入探讨如何用链表来实现线性表,并通过提供的`ChainList.java`...

    java编程基础学习.doc

    Java编程基础学习是初学者踏入编程世界的基石。Java是一门广泛应用的高级编程语言,具有跨平台、面向对象、性能高效等特点。学习Java编程基础,首先需要理解编程的基本概念,包括变量、常量、数据类型、控制结构...

    java模拟实现数组链表树图等数据结构

    Java作为一种广泛使用的编程语言,提供了多种内置的数据结构,如数组、链表、树和图。本项目“java模拟实现数组链表树图等数据结构”旨在帮助初学者通过实际操作来理解这些基本数据结构及其工作原理。 首先,数组是...

    java 队列 链表 栈

    本篇文章将详细讲解Java中的队列、链表和栈,这些概念是许多初学者和专业人士都需要掌握的基础知识。 首先,我们来谈谈队列。队列是一种先进先出(First In First Out,简称FIFO)的数据结构,类似于现实生活中的...

Global site tag (gtag.js) - Google Analytics