`
Java.天道2011
  • 浏览: 9444 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

链表小结2

 
阅读更多
之前已经学习过了链表中的单向链表,这次在学习好双向链表后做一下小结,双向链表相比较单向链表的好处在于。只要知道链表中的任意一个结点即可得到整个链表,因此,在链表结点类中就不能只有一个结点属性,应该有父结点和子结点。
public class Node<E> {
	//父结点跟子结点
	private Node<E> child;
	private Node<E> parent;
	private E date;
	//结点的构造器,存入数据
	public Node(E e){
		this.setDate(e);
	}
	//设置子结点的方法
	public void setChild(Node<E> child) {
		this.child = child;
	}
	//得到子结点的方法
	public Node<E> getChild() {
		return child;
	}
	//设置父结点的方法
	public void setParent(Node<E> parent) {
		this.parent = parent;
	}
	//得到父结点的方法
	public Node<E> getParent() {
		return parent;
	}
	//存入数据的方法
	public void setDate(E date) {
		this.date = date;
	}
	//得到数据的方法
	public E getDate() {
		return date;
	}
}

下面我们来检测一下:
public class Test {
	public static void main(String []args){
		printNode(creatNode());
		isHoop(creatNode());		
	}
	/**
	 * 建立一个双向链表
	 * @return:链表中的任意一个节点
	 */
	public static Node<String> creatNode(){
		Node<String> node = new Node<String>("a");
		Node<String> node1 = new Node<String>("b");
		
		node.setChild(node1);
		node1.setParent(node);
		
		Node<String> node2 = new Node<String>("c");

		node1.setChild(node2);
		node2.setParent(node1);
		
		Node<String> node3 = new Node<String>("d");
		
		node2.setChild(node3);
		node3.setParent(node2);
		return node2;
	}
	/**
	 * 将链表中的数据打印出来
	 * @param node:链表中的任意一个节点
	 */
	public static void printNode(Node<String> node){
		if(node!=null){		
			Node<String> node2 = node.getParent();
			printparentNode(node2);
			String s = node.getDate();
			System.out.println("元素是:"+s);
			Node<String> node1 = node.getChild();
			printchildNode(node1);
		}
	}
	/**
	 * 打印节点向上的数据
	 * @param node:链表中任意一个节点
	 */
	public static void printchildNode(Node<String> node){
		if(node!=null){
			Node<String> node2 = node.getChild();
			String s = node.getDate();			
			System.out.println("元素是:"+s);
			printchildNode(node2);
		}
	}
	/**
	 * 打印节点下面的数据
	 * @param node:链表中任意一个节点
	 */
	public static void printparentNode(Node<String> node){
		if(node!=null){
			Node<String> node1 = node.getParent();
			String s = node.getDate();			
			System.out.println("元素是:"+s);
			printparentNode(node1);
		}
	}
	/**
	 * 判断一个双向链表是否是环
	 * @param node:链表中任意一个节点
	 * @return
	 */
	public static boolean isHoop(Node<String> node){
		if(node!=null){
			Node<String> node1 = node.getChild();
			while(node1!=null&&node!=node1){
				node1 = node1.getChild();			
			}
			if(node1==null){
				System.out.println("不是环");
			}else if(node==node1){
				System.out.println("是环");
			}
		}
		return false;
	}	
}

这样一个简单的双向链表就已经完成了。
分享到:
评论

相关推荐

    java链表 个人总结

    2. 删除:可以删除指定元素或者指定位置的元素。 3. 遍历:通过迭代器或者节点间的引用进行遍历。 4. 查找:根据给定值查找元素,链表的查找通常不如数组快,因为它需要顺序访问直到找到目标元素。 5. 反转:链表的...

    数据结构Java线性表顺序表与链表小结PPT学习教案.pptx

    Java中的线性表是数据结构的一种基本形式,主要包括顺序表和链表两种主要类型。 顺序表是一种物理存储单元上顺序存放的线性表,其特点是元素之间的逻辑顺序与物理顺序一致。在Java中,`java.util.ArrayList`是顺序...

    c语言链表数组-c语言手写单链表实现,数组和链表结构对比小结和个人理解 数组和链表.pdf

    2. 查询速度:数组可以快速查询元素,而链表的查询速度相对较慢。 3. 插入删除:链表可以快速插入和删除元素,而数组需要重新分配内存。 三、链表的实现细节 在实现链表时,我们需要考虑以下几个方面: 1. 节点...

    两个有序链表序列的合并_C语言_

    解决这个问题的关键在于比较两个链表的头节点,并将较小的节点添加到结果链表中。然后,移动指向较小节点的指针,继续比较下一个节点,直到其中一个链表为空。此时,将非空链表的所有剩余节点添加到结果链表中。 ...

    数据结构源代码之双向链表

    #### 小结 本文档介绍了双向链表的实现方法及其基本操作的C语言实现。双向链表相比于单链表具有更高的灵活性和效率,尤其是在需要频繁地从前向后或从后向前遍历链表的情况下。通过这些基本操作,可以实现对双向链表...

    图书管理系统(C语言链表实现)含实验报告

    大学期间用C语言链表实现的一个图书管理系统,主要功能有 a. 设备申请。由专业人员填写“申请表”送交领导批准购买。 b. 设备入库。新设备购入后要立即进行设备登记(包括类别、设备名、型号、规格、单价、数量、...

    Linux 内核通用链表学习小结

    2. `__list_for_each(pos, head)`:遍历链表的循环宏,从头节点的下一个节点开始,直到返回头节点为止。 3. `list_entry(ptr, type, member)`:这个宏用于从链表节点的`list_head`指针反推出实际数据结构的指针。`...

    数据结构:图解链表,用链表实现栈的Pop和Push(c语言版)

    #### 小结 通过以上分析,我们可以看到使用链表实现栈的Pop和Push操作是相对直观和简单的。在实现过程中需要注意的关键点包括: 1. 确保栈顶指针始终指向最新的栈顶节点。 2. 在进行出栈操作时,正确处理空栈的情况...

    数据结构实验报告-利用链表实现简易学生信息管理系统(C语言)

    主要内容包括实验目的、实验环境配置、具体实现的源代码、实验运行截图以及最后的小结。以下是针对该实验报告中的各个知识点进行的详细解析。 #### 实验目的 1. **理解链表的基本概念**:链表是一种常见的线性表...

    数据结构课程设计二叉树采用二叉链表作为存储结构

    数据结构课程设计之二叉树采用二叉...1 2 3 4 5 6 7 8 9 10 ``` 九、结论 通过本设计,我们成功地实现了一个二叉树的存储结构,并按层次顺序遍历了二叉树。我们的设计和实现对数据结构课程设计具有重要的参考价值。

    数据结构链表实验源代码

    ### 小结 本代码示例不仅涵盖了链表的基本定义与创建,还提供了更高级的操作,如集合运算等。这些操作在实际编程中非常有用,可以帮助我们更好地理解和应用链表这一数据结构。通过学习这段代码,读者可以进一步掌握...

    链表的基本操作链表的基本操作

    ### 小结 通过本实验,学生不仅能够深入了解链表这一重要数据结构的特点,还能掌握如何利用 C 语言进行高效的数据处理。此外,通过实际编程操作,学生可以进一步提升自己的编程能力和解决问题的能力。这对于后续...

    c语言数据结构的小结

    "C语言数据结构的小结"是一个针对初学者的指南,旨在帮助他们理解并掌握C语言中的数据结构概念。数据结构是计算机科学的核心组成部分,它涉及到如何有效地组织和管理数据,以便于高效地访问和操作。 首先,我们要...

    探讨:将两个链表非降序合并为一个链表并依然有序的实现方法

    在每次迭代中,比较`list1`和`list2`的当前节点,选择较小的一个插入到`list3`的末尾,然后更新相应的指针。当其中一个链表遍历完成后,将另一个链表的所有剩余节点追加到`list3`。 这个实现确保了合并后的链表仍然...

    Python实现队列的方法示例小结【数组,链表】

    2. **内存消耗**: - 链表实现通常比列表实现占用更多的内存空间,因为链表需要额外的空间存储指针。 3. **异常处理**: - 在实现队列时,需要考虑到队列为空时的操作,避免程序崩溃或产生错误。 #### 五、总结 ...

    数据结构Java双向链表PPT学习教案.pptx

    ### 小结 理解并掌握双向链表的设计和实现,以及如何在实际项目中运用,对于提升编程能力尤其是处理动态数据集合的问题至关重要。双向链表的灵活性使得它在需要频繁进行插入和删除操作的场景中特别有用,而其双指针...

    C语言+链表实现图书信息管理系统+C语言期末结课作业

    运用链表实现图书信息的管理,主要包含图书信息的增删改查,以及将链表中存储的图书信息保存为txt文件,属于C语言入门级练手小项目,可以作为C语言结课大作业的参考。比较适合刚学C语言编程的大学生。该源码在VS2017...

    c语言程序设计报告链表实现学生信息管理.docx

    五、实践小结 通过这次设计,学生不仅巩固了C语言的基础知识,如函数、循环,还初次接触并理解了链表这一重要数据结构。同时,体验了实际编程过程中的问题解决和团队协作,认识到持续练习和调试的重要性。 六、源...

    java集合小结

    ### Java集合小结 #### 一、集合的概念与重要性 集合是Java编程语言中用于存储、管理和操作数据的一种重要工具。它提供了多种数据结构来适应不同的应用场景,从而有效地提高程序开发效率。从数据结构的角度来看,...

Global site tag (gtag.js) - Google Analytics