`
firesaijj
  • 浏览: 8984 次
  • 性别: Icon_minigender_1
  • 来自: 四川
最近访客 更多访客>>
社区版块
存档分类
最新评论

数据结构学习---线性表的链式存储实现(单链表)

 
阅读更多
  之前实现了线性表的数组实现方式,了解了其特性,查询很快,不过才进行元素插入和删除时需要移动元素才能完成。为了避免这种缺点,我们需要在每个单元中设置指针来表示元素之间的逻辑关系,增加了额外的存储空间。用链式存储是以空间为代价换取了时间,其实写代码基本没有绝对的事情,我们总是在寻找最合适的方式处理我们遇到的问题,在时间和空间之间找平衡点,有时候时间要求更多一点,有时候空间要求更多一点,具体情况具体分析。
  链表存储数据元素的结构是通过单元的指针串起来形成的,在实际存储中并不像数组一样是连续的存储,链表分为单向链表,双向链表,不论哪种都有数据域和指针,只不过双向链表有前后两个指针,而单向链表只有next指针。链表中的每一个节点都有相同的基本结构。Java中是没有显示的指针类型,然而实际上对象的访问就是使用指针来实现的,使用对象的引用来代替指针。所以在实现节点结构时,节点本身就是对象,指针域next通过节点对象的引用来实现。
  节点接口
package taxus.list;

public interface Node {
	//获取节点数据域
	public Object getData();
	
        //设置节点数据域
	public void setData(Object obj);

}

单链表节点定义
package taxus.list;

public class SLNode implements Node {
	
	private SLNode next;
	
	private Object element;
	
	public SLNode(){
		this(null, null);
	}
	
	public SLNode(Object ele, SLNode next){
		this.element = ele;
		this.next = next;
	}
	
	public SLNode getNext(){
		return next;
	}
	
	public void setNext(SLNode next){
		this.next = next;
	}

	public Object getData() {
		return element;
	}

	public void setData(Object obj) {
		this.element = obj;
	}


}

  末节点的next为null
  链表的第一个节点和最后一个节点,分别称为链表的首节点和尾节点。尾节点也就是末节点的特征是next引用为null,每个节点中的next指向下一个节点,通过next我们可以从首节点移动到尾节点,在单链表中我们通常使用head来指向首节点,由head即可完成对整个链表中所有节点的访问。如果需要也可以用tail引用来进行操作。
  与数组类似,单链表中的节点也是一个线性次序,如果P的next引用指向节点s,那么p称为s的直接前驱, s称为p的直接后续。单链表的特性是只能通过前驱找后续,不能通过后续 找前驱。
   单链表中进行查找时只能从首节点开始,并通过节点的next引用来访问每个节点进行查找。判断节点的数据域是否与元素e相同。与数组的元素查找一样,需要n/2的时间。
   在链表中数据元素的插入,通过在链表中插入数据元素所属的节点来完成,对于链表的不同位置,插入的过程也有些差别,单链表首节点没有直接前驱节点,所以可以直接在首节点之前插入一个新的节点,在其它位置插入时,只能在已知某个特定节点引用的基础上,在其后面插入新节点,如果已知节点,那么插入时需要的时间是常数。所以插入操作比在数组中要快得多。
   类似的,删除链表不同位置的节点也不一样,除首节点外必须都要知道节点的直接前驱,在已知某个节点引用的情况下,删除节点需要的时间也是常数,所以删除也比数组快。
    通过以上分析,单链表中进行顺序查找与数组中完成操作时间相同,而在单链表中已知特定节点引用的前提下完成数据插入与删除比在数组中要快很多。
0
0
分享到:
评论

相关推荐

    数据结构实验报告--单链表.docx

    数据结构实验报告--单链表 数据结构实验报告--单链表全文共12页,当前为第1页。数据结构实验报告--单链表全文共12页,当前为第1页。2016级数据结构实验报告 数据结构实验报告--单链表全文共12页,当前为第1页。 数据...

    数据结构_线性表的链式存储

    数据结构_线性表的链式存储 实验目的 1. 掌握线性表的链式存储结构。 2. 能熟练地利用链式存储结构实现线性表的基本操作。 3. 能熟练地掌握链式存储结构中算法的实现。 实验内容 1. 分别用头插法和尾插法建立带头...

    数据结构学习--线性表及其应用--链表

    本程序的主要目的在于帮助同学熟练掌握线性表的基本操作在链式存储结构上的实现, 链表的优点是“按需分配”,且增删方便,缺点是不能随机访问。在实际当中,有许多应用 是频繁变动,但并不要求随机访问,在这样的...

    数据结构 (线性表的链式存储结构 )

    设计并实现以下算法:给出用单链表存储多项式的结构,利用后接法生成多项式的单链表结构,实现两个多项式相加的运算,并就地逆置相加后的多项式链式

    数据结构实验报告2线性表的链式存储结构.doc

    学院: 专业: 班级: "姓名 " "学号 " "实验组" " "实验时间 "2011-11-11 "指导教师" "成绩 " " "实验项目名称"线性表的链式存储结构 " "实"了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法" "验...

    线性表的链式存储结构..

    实验二 线性表的链式存储结构 题目:设计并实现以下算法:给出用单链表存储多项式的结构,利用后接法生成多项式的单链表结构,实现两个多项式相加的运算,并就地逆置相加后的多项式链式。1. 用户可以根据自己的需求...

    单链表-数据结构

    单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储...

    全网最详细的-线性表的链式存储

    在实现链式存储时,可以使用单链表、双链表或循环链表等不同的结构来实现。单链表包含一个指针域,指向下一个节点;双链表包含两个指针域,分别指向前一个节点和后一个节点;循环链表是一种特殊的链表,尾节点的指针...

    数据结构实验——单链表

    [实现提示]链式存储结构不是随机存储结构,即不能直接取到单链表中某个结点,而要从单链表的头结点开始一个一个地计数寻找。 2、求表长以及有序单链表的合并算法的实现 [问题描述] 假设有两个按元素值递减次序排列的...

    线性表(数据结构).doc

    线性表若采用链式存储结构时,要求内存中可用存储单元的地址_D__。 A. 必须是连续的 B. 部分地址必须是连续的 C. 一定是不连续的 D. 连续或不连续都可以 3. 指针变量p指向单链表中的结点,若该结点是链表的尾结点,...

    c语言数据结构实验:掌握线性表的链式存储结构 熟练掌握循环链表的存储特征和建立方法,掌握线性表的链式存储结构 下面是源码的txt

    2、已知由单链表表示的线性表中,含有三类字符的数据元素(如:字母、数字和其它字符),设计算法构造三个以循环链表示的线性表,使每一个表中只含同一类的字符,且利用原表中的结点空间作为这三个表的空间。...

    单链表是一种链式存取的数据结构.pdf

    单链表是一种链式存取的数据结构,它用一组地址任意的存储单元存放线性表中的数据元素。在单链表中,数据是以结点来表示的,每个结点包含元素(数据元素的映象)和指针(指示后继元素存储位置)。元素就是存储数据的...

    链式存储结构下线性表的实现

    链式存储结构下线性表的实现,dev通过,C++

    北邮数据结构实验2.1.cpp

    根据线性表的抽象数据类型的定义,选择下面任一种链式结构实现线性表,并完成线性 表的基本功能。 线性表存储结构(五选一): 1、 带头结点的单链表 2、 不带头结点的单链表 3、 循环链表 4、 双链表 线性表的基本...

    数据结构——线性表(选择题).docx

    简单,线性表的链式存储原理,02702004 [单选题] A、必须是连续的 B、一定是不连续的 C、部分地址必须是连续的 D、连续与否均可以(正确答案) 数据结构——线性表(选择题)全文共11页,当前为第1页。 数据结构——...

    线性表 实验报告.docx

    选题3:(易)编写算法实现二个有序的线性表的合并问题(存储结构可选:顺序表/单链表)。 参考课件“chap002线性表.ppt”相关例题。 选题4:(难)运用单向循环链表实现约瑟夫环的问题。 参考实验指导书“实验题 4...

    精心整理史上最全的数据结构flash演示动画,共5个版本,祝大家考研成功!

    \数据结构flash演示\版本2\2.3 线性表的链式表示和实现-单链表到循环链表的转化.swf \数据结构flash演示\版本2\2.3 线性表的链式表示和实现-单链表的插入.swf \数据结构flash演示\版本2\2.3 线性表的链式表示和...

    单链表实验报告

    数据结构实验报告:单链表的建立 1.实验目的 (1)了解数据的逻辑结构和数据的存储结构之间的区别与联系; (2)掌握线性表的链式表示和实现方法,特别是插入、删除操作。 (3)掌握运用C语言上机调试线性表的...

    C++数据结构实验一:线性表的应用

    1.熟练掌握线性表的基本运算。 2.掌握顺序表和单链表...4. 掌握线性表的逻辑结构特点、顺序存储结构、链式存储结构、顺序表的结构体类型定义、单链表的结构体类型定义、在两种存储结构上的各种基本操作的实现算法。

    数据结构课时安排.txt

    课程章节主要内容及学时分配 -------------------------------... 算法设计(层次3):熟练掌握线性表在顺序存储结构和链式存储结构下的创建、插入、删除和查找等基本操作;链表合并与分解;有序表的操作方法; 4. 线性

Global site tag (gtag.js) - Google Analytics