`
沉沦的夏天
  • 浏览: 10651 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

链表小结

 
阅读更多
链表 1.链表一种物理存储单元上非连续,非顺序的存储结构,但它里面的数据元素的逻辑顺序靠每个节点的指针连接起来,其基本单元就是一个个节点,跟链条靠链销连接差不多。
2.链表分为单向链表和双向链表及循环链表,它们结构如下:



由图可:单向链表便于形式简单,插入新节点,遍历不会进入死循环,双向链表便于找到前驱和后继,但建立起来稍微复杂一点,循环链表则相当于一个圆圈,任何节点都可以做头,这样容易遍历进入死循环。
链表和数组的区别:数组存储结构物理空间上连续,存取速度快,效率高,但不便于插入和删除数据,长度固定(不过动态数组可以弥补这缺点)。而链表空间上不连续,却能便于频繁插入和删除,只是建立起来复杂。

3.下面是双向链表实现自定义队列的程序代码(主要是熟悉链表结构):
首先是链表基本单元结点类:

public class Linknode{
	private Linknode parent;//父节点
	private Linknode child;//子节点
	private Object obj;//节点中的内容
	//构造节点方法,内容为obj
	public Linknode(Object obj){
		this.obj=obj;
	}
	//给节点加子节点
	public void setchild(Linknode child){
		this.child=child;
	}
	//得到子节点
	public Linknode getchild(){
		return child;
	}
	//给节点加父节点
	public void setparent(Linknode parent){
		this.parent=parent;
	}
	//得到父节点
	public Linknode getparent(){
		return parent;
	}
	//给节点设定内容
	public void setObjest(Object obj){
		this.obj=obj;
	}
	//获取节点内容
	public Object getObject(){
		return obj;
	}
}




下面给出的是实现自定义队列的链表形式:

public class Linklist {
	private Linknode first;//首节点
	private Linknode last;//尾节点
	private int length;//链表长度
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//新建链表对象
		Linklist list =new Linklist();
		//循环创建多个节点对象,依次加入链表中
		for(int i=0;i<10;i++){
		Linknode node=new Linknode("节点"+i);
		list.add(node);
		}
		
		list.remove(9);//移除索引位置的节点
		//再给链表加入一个节点,然后打印链表
	Linknode node=new Linknode("add");
		list.add(8,node);
		list.print();
	}
	
	//给链表尾加一个节点
	public void add(Linknode node){
		if (length==0){
			first=node;
			last=node;
		}
		else{
			last.setchild(node);
			node.setparent(last);
			last=node;
		}
		//链表添加节点后,要把长度加一
		length++;
	}
	//链表大小
	public int size(){
		return length;
	}
	//得到索引位置节点
	public Linknode get(int index){
		
		if(index>=length||index<0){
			//超出范围时,抛出错误
			throw new java.lang.Error("超出范围");
		}
		Linknode temp=first;
			
		for(int i=0;i<index;i++){
		temp=temp.getchild();	
		}
		//System.out.println("得到第"+index+"个节点"+temp.getObject());
		return temp;
	}
	
	//移除某个节点
	public void remove(int index){
		if(index>=length||index<0){
			throw new java.lang.Error("超出范围");
		}
		//得到索引位置节点
		Linknode temp= this.get(index);
		if(temp.getparent()==null){
			first=temp.getchild();
			last=last.getparent();
		}
		else{ 
			if(temp.getchild()==null){
				last=last.getparent();
			}
			else{
				temp.getparent().setchild(temp.getchild());
				temp.getchild().setparent(temp.getparent());
				last=last.getparent();
			}
		}
			
		length--;
	}
	
	//在某个位置插入一节点
	public void add(int index,Linknode node){
		if(index>=length||index<0){
			throw new java.lang.Error("超出范围");
		}
		//得到索引位置节点
		Linknode temp= this.get(index);
		if(temp.getparent()==null){//如果插入位置在首位置
			//Linknode temp_first=first;
			first=node;
			node.setchild(temp);
			temp.setparent(node);
		}
		else{ //如果插入位置不在第一个
			temp.getparent().setchild(node);
			node.setparent(temp.getparent());
			temp.setparent(node);
			node.setchild(temp);
			
		}
		
		length++;
	}
	//打印内容
		public void print(){
			for(int i=0;i<length;i++){
				System.out.println(this.get(i).getObject());
			}
		}

}

  • 大小: 14.8 KB
分享到:
评论

相关推荐

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

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

    第9章 虚拟内存IV:动态内存分配-高级概念(1).pdf

    最后,虚拟内存IV:动态内存分配-高级概念还讨论了LIFO策略的回收策略和显式链表小结。LIFO策略的回收策略是将新释放的块放置在链表的开始处。显式链表小结则是与隐式链表相比较,显式链表需要存储前/后指针,而隐式...

    java链表 个人总结

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

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

    "C语言链表数组" 在学习编程语言时,大家常常遇到数组和链表这两种数据结构。今天,我们将深入探讨C语言中链表数组的实现和数组与链表结构的对比,并结合个人理解和实践经验来分析它们的优缺。 一、链表数组的实现...

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

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

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

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

    Linux 内核通用链表学习小结

    Linux内核通用链表是操作系统内核中一种高效的数据结构,用于存储和管理动态数据集。本文将深入探讨Linux内核通用链表的原理、结构、宏定义以及使用方法。 首先,内核提供的通用链表库是双向链表,这意味着每个链表...

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

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

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

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

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

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

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

    数据结构课程设计之二叉树采用二叉链表作为存储结构 本课程设计的主要任务是设计并实现一个二叉树的存储结构,使用二叉链表作为存储结构,并实现按层次顺序遍历二叉树的算法。下面是本设计的详细解释和实现过程: ...

    数据结构链表实验源代码

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

    c语言数据结构的小结

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

    数据结构实验实验报告-基于链表的树、图实现(实验源码+设计报告).zip

    1.9 实验小结 6 2 增加站点,删除 7 2.1 需求分析 7 2.2 总体设计 7 2.3 数据结构 8 2.4 算法设计 9 2.5 系统实现 12 2.6 系统测试 12 2.7 复杂度分析 13 2.8 结果分析 13 2.9实验小结 13 3 从指定站点出发,计算出...

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

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

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

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

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

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

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

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

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

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

Global site tag (gtag.js) - Google Analytics