`
lj_gzy2014
  • 浏览: 16686 次
  • 性别: 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数据结构与算法课程第05课双端链表和双向链表.mp4JAVA数据结构与算法课程第06课递归的应用.mp4JAVA数据结构与算法课程第07课递归的高级应用.mp4JAVA数据结构与算法课程第08课希尔排序.mp4JAVA数据结构与算法课程...

    java程序设计基础编程题

    北京黑马高质量基础编程题!附加答案代码! 全部做完基础稳稳地。66666666666666666666666666666666666666666666666666666

    Java简明教程

    主要内容包括:Java编程基础、面向对象编程原理、接口、包、泛型的基本概念、链表、栈、散列、字符串处理、异常处理、输入输出、多线程、小程序、Swing图形界面设计、事件处理、数据库常用操作方法以及基于Access...

    Java语言基础下载

    JAVA编程语言和JDBC 323 JDBC编程的步骤 323 实例分析 325 内容总结 335 独立实践 336 第二十章:高级JDBC 337 学习目标 337 使用DDL,DML语言对数据库进行基本操作 338 查询数据库里的数据 339 预编译语句...

    编程基础实现

    java 实现链表,hashmap,0-1算法

    Java开发技术大全(500个源代码).

    示例描述:本章介绍开发Java的基础语法知识。 accumulationByDoWhile.java 用do~while语句写的累加程序 accumulationByFor.java 用for语句写的累加程序 accumulationByWhile.java 用while语句写的累加程序 ...

    java面试题库2021.pdf

    1、 web 编程基础 ①Tomcat 服务器NOWCODER.COM 牛客网——互联网学习求职必备神器 名企校招历年笔试面试真题, 尽在牛客网 牛客网, 互联网人都在用的学习求职神器 ②JSP 语法, EL, 内置对象 ③Listener 和 ...

    Java知识集.docx

    Java知识集是Java编程语言的核心概念和技术,涵盖了Java编程语言的基础知识、面向对象编程、数据结构与算法、图形用户界面(GUI)和网络编程等各个方面。 Java编程语言的基础知识:包括Java语言的基本语法、数据类型、...

    剑指offer第二到八章代码java实现

    《剑指offer 名企面试官精讲典型编程题》书中第二章到第八章java代码实现,分章节package;实现代码包括原题目,以及其中的一些“本题扩展”;更具有详细的代码注释,很多代码从基础的暴力解法到书中的技巧解法均有...

    Java开发详解.zip

    031703_【第17章:Java数据库编程】_SQL语法基础笔记.pdf 031704_【第17章:Java数据库编程】_JDBC操作步骤及数据库连接操作笔记.pdf 031705_【第17章:Java数据库编程】_执行数据库更新操作笔记.pdf 031706_【第17...

    Java2实用教程.rar

    第12章JavaApplet基础 12 1JavaApplet的运行原理 12 2网页向JavaApplet传值 12 3JavaApplet扣使用URL 12 4JavaApplet中建立新线程 12 5JavaApplet中使用套接字 习题 第13章常见数据结构的Java实现 13 1链表 13 2栈 ...

    Java并发编程实战

    Java并发编程实战 本书深入浅出地介绍了Java线程和并发,是一本完美的Java并发参考手册。书中从并发性和线程安全性的基本概念出发,介绍了如何使用类库提供的基本并发构建块,用于避免并发危险、构造线程安全的类及...

    java-coding-ninjas:具有数据结构的JAVA基础。 数据结构,算法及其在最流行的编程语言之一Java中的功能。 解决问题的实用技术的介入将使学习者对课程的概念有更好的理解

    最初的部分将专注于逻辑构建和使您熟悉基本的编程基础。 流程图入门条件和循环运营商函数,变量及其范围本节将成为本课程其余部分的骨干,并将帮助您在面试中脱颖而出。 模式-1 模式-2 数组搜索和排序字符串和2D数组...

    Java数据结构和算法中文第二版

    Java数据结构和算法介绍了计算机编程中使用的数据结构和算法,对于在计算机应用中如何操作和管理数据以取得最优性能提供了深入浅出的讲解。全书共分为15章,分别讲述了基本概念、数组、简单排序、堆和队列、链表、...

    数据结构java版

    《Java数据结构和算法》(第2版)介绍了计算机编程中使用的数据结构和算法,对于在计算机应用中如何操作和...本书所涵盖的内容通常作为大学或学院中计算机系二年级的课程,在学生掌握了编程的基础后才开始本书的学习。

    ArrayList,LinkList链表接口实现(源码+部署说明+系统文档+源码解释).zip

    该ArrayList、LinkList链表接口实现...总之,该ArrayList、LinkList链表接口实现是一份非常有价值的学习资源,不仅提供了必要的指导和支持,还可以帮助用户快速入门Java应用程序开发,为未来的职业发展打下坚实的基础。

    java初学者必看

    第3章 Java语言基础 3.1 标识符 3.1.1 标识符的概念 3.1.2 变量命名规则 3.1.3 变量命名技巧 3.2 关键字 3.3 注释 3.4 数据类型 3.4.1 整型 3.4.2 浮点型 3.4.3 字符型 3.4.4 布尔型 3.5 变量与常量 ...

    Big_Java(英文版)

    这四个部分分别介绍了Java的基本数据类型、类、继承、多态、数组、数组列表等概念,图形编程、基于对象编程和面向对象编程等内容,递归、排序和查找、链表和散列表等数据结构与算法,以及很多高级Java编程技术,包括...

Global site tag (gtag.js) - Google Analytics