Java数据结构系类之——链表(3):双向链表及相关常用操作

package LinkList.doublelinklist;

public class Node {
	public int data;//数据域
	public Node next;//结点域,下一个结点
	public Node prve;//结点域,前一个结点

	//头结点初始化
	public Node(Node next){
		this.data=data;
		this.next=next;
		this.prve=null;
	}

	//非头结点初始化
	public Node(int data,Node next,Node prve){
		this.data=data;
		this.next=next;
		this.prve=prve;
	}
}

************************************************************************************************************************************

package LinkList.doublelinklist;

public class DoubleLinkList {
	Node head;// 头结点
	int size;// 链表大小
	Node current;// 当前结点

	// 初始化空链表
	public DoubleLinkList() {
		this.head = new Node(null);
		this.size = 0;
		this.current = head;
	}

	// 判断线性表是否为空
	public boolean isEmpty() {
		return size == 0;
	}

	// 获取指定位置的元素,这里我们定义头结点head的index为-1
	public Node getElement(int index) {
		if (index < -1 || index >= size) {
			throw new RuntimeException("参数错误");
		}

		if (index == -1) {
			current = head;
		} else {
			current = head.next;
		}

		for (int i = 0; i < index && current.next != null; i++) {
			current = current.next;
		}

		return current;
	}

	// 在指定位置插入元素,这里我们定义头结点head的index为-1
	public void insert(int index, int data) {
		Node node = new Node(data, null,null);

		Node prev = getElement(index - 1);// 当前结点的前一个结点
		current=prev.next;//当前结点
		if(current!=null){
			 node.prve=prev;
		     node.next=current;
		     current.prve=node;
		     prev.next=node;
		}else{
			node.prve=prev;
		    node.next=current;
		    prev.next=node;
		}
		size++;
	}

	// 删除指定位置的元素
	public void delete(int index) {
		if (index > size - 1) {
			throw new RuntimeException("参数错误");
		}
		Node prev = getElement(index - 1);// 当前结点的前一个结点

		current = prev.next;
		prev.next = current.next;
		current.prve = prev;
		size--;
	}

	// 打印链表
	public void traverse() {
		if (isEmpty()) {
			System.out.println("null");
		} else {
			current = head.next;
			while (current != null) {
				System.out.print(current.data + " ");
				current = current.next;
			}
			System.out.println();
		}
	}
}
时间: 2024-10-27 10:05:41

Java数据结构系类之——链表(3):双向链表及相关常用操作的相关文章

Java数据结构系类之——链表(1):单链表及相关常用操作

package LinkList; public class Node<T> { public T data;//数据域 public Node next;//结点域 //默认构造方法 public Node(){ } //带参构造方法,非头结点初始化 public Node(T data,Node next){ this.data=data; this.next=next; } //头结点初始化 public Node(Node next){ this.next=next; } //显示结点

Java数据结构系类之——链表(2):单向循环链表及相关常用操作

package LinkList.onewaycircular; public class Node { public int data; public Node next; //头结点初始化 public Node(Node next){ this.next=next; } //一般结点初始化 public Node(int data,Node next){ this.data=data; this.next=next; } } ********************************

Java数据结构和算法之链表

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

Java数据结构和类有哪些?

Java数据结构和类有哪些?很多java初学者可能记不住或者记不全那么多,今天西安java培训小编为大家整理了Java数据结构和类的知识,希望对大家有所帮助. 一.Vector类 Vector类似于一个数组,但与数组相比在使用上有以下两个优点. 1.使用的时候无需声明上限,随着元素的增加,Vector的长度会自动 增加. 2.Vector提供额外的方法来增加.删除元素,比数组操作高效. Vector类有三个构造函数,分别如下: public Vector(); 该方法创建一个空的Vector.

自己动手实现java数据结构(二) 链表

1.链表介绍 前面我们已经介绍了向量,向量是基于数组进行数据存储的线性表.今天,要介绍的是线性表的另一种实现方式---链表. 链表和向量都是线性表,从使用者的角度上依然被视为一个线性的列表结构.但是,链表内部存储数据的方式却和向量大不相同:链表的核心是节点.节点存储"数据"的同时还维护着"关联节点的引用".要理解链表,首先必须理解链表的内部节点结构. 最简单的链表结构是单向链表,单向链表中的内部节点存储着数据(data)和其关联的下一个节点的引用(next). da

java多线程系类:JUC集合:01之框架

概要 之前,在"Java 集合系列目录(Category)"中,讲解了Java集合包中的各个类.接下来,将展开对JUC包中的集合进行学习.在学习之前,先温习一下"Java集合包".本章内容包括:Java集合包JUC中的集合类 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3498454.html Java集合包 在"Java 集合系列01之 总体框架"中,介绍java集合的架构.主体内容包括Colle

java多线程系类:JUC线程池:03之线程池原理(二)(转)

概要 在前面一章"Java多线程系列--"JUC线程池"02之 线程池原理(一)"中介绍了线程池的数据结构,本章会通过分析线程池的源码,对线程池进行说明.内容包括:线程池示例参考代码(基于JDK1.7.0_40)线程池源码分析(一) 创建"线程池"(二) 添加任务到"线程池"(三) 关闭"线程池" 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3509954.h

java多线程系类:基础篇:04synchronized关键字

概要 本章,会对synchronized关键字进行介绍.涉及到的内容包括:1. synchronized原理2. synchronized基本规则3. synchronized方法 和 synchronized代码块4. 实例锁 和 全局锁 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3479202.html 1. synchronized原理 在java中,每一个对象有且仅有一个同步锁.这也意味着,同步锁是依赖于对象而存在.当我们调用某对象的sy

Java数据结构——用双端链表实现队列

//================================================= // File Name : LinkQueue_demo //------------------------------------------------------------------------------ // Author : Common //类名:FirstLastList //属性: //方法: class FirstLastList_long{ private Lin