`
淡淡淡的天空
  • 浏览: 7953 次
  • 性别: Icon_minigender_2
  • 来自: 厦门
社区版块
存档分类
最新评论

链表——灵活存储

阅读更多
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。链表最明显的好处就是,常规数组排列关联项目的方式可能不同于这些数据项目在记忆体或磁盘上顺序,数据的存取往往要在不同的排列顺序中转换。链表允许插入和移除表上任意位置上的节点,但是不允许随机存取。链表有很多种不同的类型:单向链表,双向链表以及循环链表。
以单向链表为例:
添加元素方法
public void add(E e){
		Node<E> node=new Node<E>(e);
		if(root==null){//第一个元素
			root=node;
			trail=node;
		}else{//在尾节点后面添加元素
			trail.setNext(node);
			trail=node;
		}
		size++;
	}

删除元素方法
public E remove(int index){
		if(index<0||index>=size)//判断索引位置是否有元素
			return null;
		Node<E> node=root;
		Node<E> rnode=null;
		for(int i=0;i<index-1;i++){
			if(index==0){
				rnode=root;
				root=root.getNext();
			}else{
				rnode=node.getNext();
				Node<E> nnode=rnode.getNext();
				node.setNext(nnode);
			}
		}
		size--;
		return (E)rnode.getObj();
	}	

插入元素方法
public void insert(int index,E e){
		if(index<0||index>=size)
			return ;
		Node<E> node=root;
		Node<E> rnode=null;
		for(int i=0;i<index-1;i++){
			if(index==0){
				rnode=root;
				root=root.getNext();
			}else{
				rnode=node.getNext();
				Node<E> nnode=rnode.getNext();
				node.setNext(nnode);
			}
		}
		size++;
	}

获得指定索引位置元素方法
public E get(int index){
		if(index<0||index>=size)//注意判断索引位置是否有元素
			return null;
		Node<E> node=root;
		for(int i=0;i<index;i++){
			node=node.getNext();
		}
		return (E)node.getObj();
	}
0
0
分享到:
评论

相关推荐

    软件工程之专题九:数据结构知识

    链表的每个表元除要存储线性表结点的信息以外,还要有一个成分来存储其后继结点的指针。 线性链表的特点是:每个链表都有一个头指针,整个链表的存取必须从头指针开始,头指针指向第一个数据元素的位置,最后的节点...

    一元多项式的运算(加减乘)终极版

    学习实现一元n次多项式的加法是符号多项式的操作,是表处理的典型用例,需要注意的是:顺序存储结构指的是用数组方法,使用数组方法实现时,在插入和删除的方面,数组不如链表灵活,方法复杂,删除其中一个需要将其...

    数据结构之学生成绩管理系统.doc

    通过此次课程设计中学生成绩管理系统的题目,掌握链表等数据结构的基本操作方面的知 识,并能灵活的解决一些基本的问题,加深对其性质及各项操作的理解; 2. 将所学数据结构方面的知识与一门具体的语言——C语言来进行...

    IOI国家集训队论文集1999-2019

    来煜坤 -《把握本质,灵活运用——动态规划的深入探讨》 齐 鑫 -《搜索方法中的剪枝优化》 邵 铮 -《数学模型的建立、比较和应用》 石润婷 -《隐蔽化、多维化、开放化──论当今信息学竞赛中数学建模的灵活性》 ...

    零起点学通C++多媒体范例教学代码

    4.2 将变量及数据存储在内存中 4.3 布尔型变量 4.4 字符型变量 4.5 wchart双字符型变量 4.6 整型概述 4.7 整型变量的定义 4.8 浮点型变量 4.9 常量 4.10枚举型常量 第5章 if语句与运算符 5.1 语句的定义 5.2 块的...

    零起点学通C++学习_多媒体范例教学代码

    4.2 将变量及数据存储在内存中 4.3 布尔型变量 4.4 字符型变量 4.5 wchart双字符型变量 4.6 整型概述 4.7 整型变量的定义 4.8 浮点型变量 4.9 常量 4.10枚举型常量 第5章 if语句与运算符 5.1 语句的定义 ...

    易学C++(简单易懂的讲解)

    7.3 向函数传递数组……69 7.4二维数组……71习题……74第八章内存里的...灵活的存储……86习题……88第九章自己设计的箱子……91 9.1我的类型我做主……91 9.2设计一个收纳箱……94 9.3结构与函数……96 9.4结构数组...

    [新概念C语言].李一波.扫描版

    中文名: 新概念C语言 作者: 李一波.图书分类: 软件 ...第18章 其他普量类型、变量的作用域、变量的存储类别和编译预处理 第19章 C++对C的扩充 第20章 C++的面向对象基础 附录及参考文献 参考文献

    新概念C语言.李一波(带详细书签).pdf

    由于学生对语言已具有了初步的了解并掌握了最基本的语法和程序设计思想,能设计较简单的程序,所以在提高篇的学习中,不论对灵活语法的学习和掌握,还是对程序设计思想的掌握都更加容易,从而可以较容易达到教学目标...

    Windows驱动开发技术详解的光盘-part1

     本章总结了在内核模式下的四种等待方法,读者可以利用这些方法灵活地用在自己的驱动程序中。最后本章还介绍了如何对IRP的超时情况进行处理。  10.1 定时器实现方式一  10.1.1 I/O定时器  10.1.2 示例代码  ...

    windows驱动开发技术详解-part2

    这是书的光盘。共分为两个部分,这是第一部分。 本书由浅入深、循序渐进地... 本章总结了在内核模式下的四种等待方法,读者可以利用这些方法灵活地用在自己的驱动程序中。最 后本章还介绍了如何对IRP的超时情况进行...

    UNIX 高级教程系统技术内幕

    1.2.9 灵活性 1.3 回顾与展望 1.3.1 UNIX 好在哪里 1.3.2 UNIX 的误区在哪儿 1.4 本书的范围 1.5 参考文献 第2 章 进程与内核(17) 2.1 简介 2.2 模式.空间和上下文 2.3 进程抽象 2.3.1 进程状态 2.3.2 进程上下文 ...

    C++MFC教程

    而且C++本身所具备的超越C语言的特性都可以使开发者编写出更易用,更灵活的代码。 在MFC中对消息的处理利用了消息映射的方法,该方法的基础是宏定义实现,通过宏定义将消息分派到不同的成员函数进行处理。下面简单...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。 常见的数据模型 1. 层次结构模型: 层次结构模型实质上是一种有根结点的定向有序树,IMS...

Global site tag (gtag.js) - Google Analytics