学习java数据结构基础知识之链表

public class Link {
	public int iData;
	public double dData;
	public Link next;

	public Link(int iData, double dData) {
		super();
		this.iData = iData;
		this.dData = dData;
	}

	public void displayLink(){
		System.out.print("{"+iData+","+dData +"}");
	}

}

public class LinkList {
	private Link first;

	public void LinkList() {
		first =null;
	}
	//链表是否为空
	public boolean isEmpty(){
		return (first ==null);
	}
	//插入first头元素
	public void  insertFirst(int id,double dd) {
		Link newLink =new Link(id, dd);
		newLink.next =first;
		first =newLink;
	}
	//删除链表头元素
	public Link deleteFirst(){
		Link tempLink =first;
		first =first.next;
		return tempLink;
	}
	//找到特定节点
	public Link find(int key){
		Link current =first;
		while (current.iData !=key) {
			if(current.next ==null){
				return null;
			}else {
				current =current.next;
			}
		}
		return current;
	}

	//删除节点
	public Link delete(int key){
		Link currentLink =first;
		Link previous=first;
		while (currentLink.iData !=key) {
			if (currentLink.next ==null) {
				return null;
			}else {
				previous =currentLink;
				currentLink =currentLink.next;
			}
		}
		if (currentLink ==first) {
			first =first.next;
		}else{
			previous.next =currentLink.next;
		}

		return currentLink;
	}
	//插入特定节点
	public Boolean insertLink(int key ,int iData, double dData){
		int i=0;
		Link currentLink =first;
		Link previous =first;
		Link nextLink;
		Link newLink =new Link(iData, dData);
		//插入头元素
		if ((i==key)&&(currentLink!=null)) {
			newLink.next =currentLink;
			first=newLink;
			return true;
		}else if (currentLink!=null){
		//	i++;
			while (i!= (key-1)) {
				if (currentLink.next ==null) {
					currentLink.next=newLink;
					return true;
				}else {
					previous =currentLink;
					currentLink =currentLink.next;
					i++;
				}
			}
			if (currentLink.next !=null) {
				nextLink =currentLink.next;
				currentLink.next=newLink;
				newLink.next=nextLink;
				return true;
			}else {
				currentLink.next =newLink;
				newLink.next =null;
				return true;
			}
		}else if (currentLink ==null) {

			currentLink =newLink;
			first=newLink;
			first.next=null;
			return true;
		}

		return false;

	}

	//显示链表所有数据
	public void displayList(){
		System.out.println("LinkList.displayList() List(first-->last):");
		Link currentLink =first;
		while (currentLink!=null) {
			currentLink.displayLink();
			currentLink =currentLink.next;
		}
		System.out.println("");
		System.out.print("LinkList.displayList() finish");
	}

}
public class LinkListApp {
	public static void main(String[] args){

		LinkList theLinkList =new LinkList();

		theLinkList.insertLink(9, 999, 999.999);
		theLinkList.displayList();

		theLinkList.insertFirst(22, 22.22);
		theLinkList.insertFirst(33, 33.33);
		theLinkList.insertFirst(44, 44.44);
		theLinkList.insertFirst(55, 55.55);
		theLinkList.displayList();

		theLinkList.insertLink(2, 333, 333.333);
		theLinkList.displayList();

		theLinkList.insertLink(7, 777, 777.777);
		theLinkList.displayList();

		System.out.println("");

		while (!theLinkList.isEmpty()) {
			Link aLink =theLinkList.deleteFirst();
			System.out.print("Deleted ");
			aLink.displayLink();
			System.out.println("");
		}
	    theLinkList.displayList();
	}

}
时间: 2024-09-30 19:08:21

学习java数据结构基础知识之链表的相关文章

学习java数据结构基础知识之队列

队列是先进先出. 利用java语言实现队列代码: /* * 队列 */ public class Queue { private int maxSize; //最大队列 private long[] queArray; //队列数组 private int front; //队头 private int rear; //队尾 private int nItems; //当前队列元素个数 //构造函数 public Queue(int s) { super(); this.maxSize = s;

什么才是java的基础知识?

近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先扎实自己的基础知识,那什么才是java的基础知识?又怎么样才算掌握了java的基础知识呢?这个问题还真值得仔细思考. 我做j2ee开发已经超过十载,作为过来人,心路历程估计和大家差不多.编码的前几年,很长一段时间觉得java简单,开发实现各种功能都很轻松,代码写起来根本不费劲(主要是因为写的代码都是一些功能业务逻辑).但同时自己心里明白,自己其实没有什么水平,自己这3,4年以来学懂的东西就那么多,其他人几个月就可以

退休老码农提醒你!学习Java,这些知识要牢记,能让你少走弯路!

现在的java在编程界基础已经根深蒂固了,随之带来的影响就是有大量的岗位,大量的工作方向,虽然现在很多的新兴语言势头都非常的猛烈,但是这并不影响java依然体量最大的编程语言,而且丝毫也看不出这门语言有任何衰减的趋势,依然有大量的从业人员在java开源领域贡献着大量的代码,在新兴的领域java切入进来也是毫不费力.创一个小群,供大家学习交流聊天如果有对学java方面有什么疑惑问题的,或者有什么想说的想聊的大家可以一起交流学习一起进步呀.也希望大家对学java能够持之以恒java爱好群,如果你想要

黑马程序员——Java集合基础知识之Map

Map概念 要同时存储两个元素Key和Value,他们之间有映射关系,每个键不能重复,每个键只能映射到一个值. 当数据之间存在映射关系的时候,考虑使用Map集合. Map常用方法 如果添加的键原来有值,后添加的值会覆盖前面的值,并返回之前的值.put会返回来先添加的值,后添加的值会覆盖原有的值. Map tm =new TreeMap(); tm.put (key, value);//MAP没有add tm.remove (key) ;//去除一个key和对应的value,若不存在key返回nu

Java数据结构和算法之链表

三.链表 链结点 在链表中,每个数据项都被包含在'点"中,一个点是某个类的对象,这个类可认叫做LINK.因为一个链表中有许多类似的链结点,所以有必要用一个不同于链表的类来表达链结点.每个LINK对象中都包含一个对下一个点引用的字段(通常叫做next)但是本身的对象中有一个字段指向对第一个链结点的引用. 单链表 用一组地址任意的存储单元存放线性表中的数据元素. 以元素(数据元素的映象)  + 指针(指示后继元素存储位置)  = 结点(表示数据元素 或 数据元素的映象) 以"结点的序列&q

C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)

一:值类型和引用类型的含义参考前一篇文章 C#学习笔记(基础知识回顾)之值类型和引用类型 1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型.如果int只不过是栈上的一个4字节的值,该如何在它上面调用方法? 二:值类型转换为引用类型--装箱 2.1CLR对值类型进行装箱时:新分配托管堆内存,将值类型的实例字段拷贝到新分配的内存中,返回托管堆中新分配对象的地址.这个地址就是一个指向对象的引用. int i = 10; Object obj = i; 三:将引用类型转换为值

[Golong]学习笔记(一) 基础知识

Go编程基础 Go的内置关键字(25个) 不多 break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continute for import return var Go的注释方法(和js一样) 单行注释: // 多行注释: /**/ Go程序一般结构 common_structure.go 通过 pack

黑马程序员——Java集合基础知识之Collection

集合基础知识--Collection Java中集合框架由常用的Collection接口和Map接口组成,而Collection接口又有两个子接口,是List接口和Set接口,常用的集合框架由这三个类组成. List接口的功能方法 List的使用最为简单,创建集合,通过add方法添加元素,get方法获取元素,通过迭代器获取元素.List接口存放的数据无序的,添加速度快,但是查询速度慢,因为查询的时候必须遍历,每次都重头开始,效率较低.常用实现类有ArrayList,LinkedList. Lis

如何学习FPGA?FPGA学习必备的基础知识

如何学习FPGA?FPGA学习必备的基础知识 时间:2013-08-12 来源:eepw 作者: 关键字:FPGA   基础知识 FPGA已成为现今的技术热点之一,无论学生还是工程师都希望跨进FPGA的大门.网络上各种开发板.培训班更是多如牛毛,仿佛在告诉你不懂FPGA你就OUT啦.那么我们要玩转FPGA必须具备哪些基础知识呢?下面我们慢慢道来. (一) 要了解什么是FPGA 既然要玩转FPGA,那我们首先最重要的当然是要了解什么FPGA.FPGA(Field-Programmable Gate