什么是链表

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。
使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。链表最明显的好处就是,常规数组排列关联项目的方式可能不同于这些数据项目在记忆体或磁盘上顺序,数据的存取往往要在不同的排列顺序中转换。链表允许插入和移除表上任意位置上的节点,但是不允许随机存取。链表有很多种不同的类型:单向链表,双向链表以及循环链表。链表可以在多种编程语言中实现。像Lisp和Scheme这样的语言的内建数据类型中就包含了链表的存取和操作。程序语言或面向对象语言,如C,C++和Java依靠易变工具来生成链表。
特点
线性表的链式存储表示的特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。因此,为了表示每个数据元素与其直接后继数据元素 之间的逻辑关系,对数据元素 来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置)。由这两部分信息组成一个"结点"(如概述旁的图所示),表示线性表中一个数据元素。线性表的链式存储表示,有一个缺点就是要找一个数,必须要从头开始找起,十分麻烦。
根据情况,也可以自己设计链表的其它扩展。但是一般不会在边上附加数据,因为链表的点和边基本上是一一对应的(除了第一个或者最后一个节点,但是也不会产生特殊情况)。不过有一个特例是如果链表支持在链表的一段中把前和后指针反向,反向标记加在边上可能会更方便。
对于非线性的链表,可以参见相关的其他数据结构,例如树、图。另外有一种基于多个线性链表的数据结构:跳表,插入、删除和查找等基本操作的速度可以达到O(nlogn),和平衡二叉树一样。
其中存储数据元素信息的域称作数据域(设域名为data),存储直接后继存储位置的域称为指针域(设域名为next)。指针域中存储的信息又称做指针或链。
由分别表示,,…,的N 个结点依次相链构成的链表,称为线性表的链式存储表示,由于此类链表的每个结点中只包含一个指针域,故又称单链表或线性链表。

转载于:https://www.cnblogs.com/shadowduke/p/4886533.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272839.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 基础:Sealed、new、virtual、abstract、override的理解

目录 1、sealed 2、new 3、virtual 4、abstract 5、override 1、sealed 密封类不能被继承,密封方法可以重写基类中的方法,但其本身不能在任何派生类(子类)中 进一步重写。当应用于属性或者方法时,sealed 修饰符必须始终…

梁兴珍 java_数据结构与算法_Java语言

第1章 综述1.1 数据结构和算法能起到什么作用?1.2 数据结构的概述1.3 算法的概述1.4 一些定义1.5 面向对象编程1.6 软件工程1.7 对于C程序员的Java1.8 Java数据结构的类库第2章 数组2.1 Array专题Applet2.2 Java中数组的基础知识2.3 将程序划分成类2.4 类接口2.5 Or…

Yii 2.0: yii2-highcharts-widget创建饼状图

安装 The preferred way to install this extension is through composer. 项目根目录下执行: php composer.phar require --prefer-dist miloschuman/yii2-highcharts-widget "*"或者在composer.json中添加 "miloschuman/yii2-highcharts-widget&qu…

【原创】C#中的抽象类(abstract class)和接口(interface)的比较

在C#中抽象类和接口是两个相当重要的概念,深入理解对C#程序员是非常必要的,现总结如下:一、抽象类的特点:1、抽象方法只用于方法的声明并不包含方法的实现,可以看作没有实现实体的虚方法。2、抽象类不能进行实例化。3、…

U3D 脚本添加和获得对象

有时候,一开始可能没有对象,而是由于某种触发,产生的一个对象,这里讲解下,如何通过脚本来创建一个对象: 这是通过脚本创建一个立方体: using UnityEngine; using System.Collections;public cla…

50条超精辟的经典语录:哗众,可以取宠,也可以失宠!

在人生道路上给自己定位很重要,不要苛求自己达到不可能达到的高度。我们能把每一件平凡的事做好就是不平凡,把每一件简单的事做成功就是不简单。1.我们只有一个地球,所以你要爱护地球;地球上只有一个我,所以你也要爱护…

java 时间工具类 大于_Java 时间工具类

1 /**2 * 格式化字符串为日期格式3 *4 *paramdateStr 需要格式化的字符串5 *paramformat 需要的日期格式,例如"yyyy-MM-dd HH:mm:ss"6 *return7 */8 public staticDate formatDate(String dateStr, String format) {9 SimpleDateFormat dateFormat newSi…

IP、TCP和DNS与HTTP的密切关系

看了上一篇博文的发表时间,是7月22日,现在是10月22日,已经有三个月没写博客了。这三个月里各种忙各种瞎折腾,发生了很多事情,也思考了很多问题。现在这段时间开始闲下来了,同时该思考的事情也思考清楚了&am…

C# 委托的理解

1、什么是委托委托可以理解为持有一个或多个方法的对象。如果执行委托的话,委托会执行它所"持有"的方法。委托可以避免程序中大量使用if-else语句,使程序拥有更好的扩展性。2、委托的本质委托和类一样,是一种用户自定义的类型&…

java基础判断题_java基础知识周测试题带答案

简单题(每题5分,共计50分)简述Java语言跨平台的原理Java跨平台的特性,也就是同一份字节码文件可以在不同的系统上执行,由不同系统中的Java虚拟机负责翻译成对应的机器指令。写出以下名词的概念和各自作用jre - Java运行时环境信息&#xff0c…

SQLSERVER 2008 R2版本密钥(摘)

开发版32位:MC46H-JQR3C-2JRHY-XYRKY-QWPVM开发版64位:FTMGC-B2J97-PJ4QG-V84YB-MTXX8工组版:XQ4CB-VK9P3-4WYYH-4HQX3-K2R6QWEB版:FP4P7-YKG22-WGRVK-MKGMX-V9MTM数据中心版32位:PTTFM-X467G-P7RH2-3Q6CG-4DMYB数据中…

java conf_JAVA 解析、编辑nginx.conf

最近工程开发遇到一个需求:用Java去解析并编辑nginx.conf解析nginx.conf过程可以参考该项目的README.md下面举个列子说明一下该如何编辑nginx.conf。定义一个pojoimportcom.alibaba.fastjson.JSONArray;importcom.google.common.base.Strings;importlombok.Data;Dat…

【原创】关于ASP.NET WebForm与ASP.NET MVC的比较

WebForm的理解1、 WebForm概念ASP.NETWebform提供了一个类似于Winform的事件响应GUI模型(event-drivenGUI),隐藏了HTTP、HTML、JavaScript等细节,将用户界面构建成一个服务器端的树结构控件(Control)&#…

对象的接口

Simula(模拟) 是一个很好的列子。正如这个名字锁暗示的,它的作用是"模拟"像"银行出纳员"我们有一系列出纳员,客户,账户以及交易等 每类成员(元素)都有具有一些通用的特征,每个账号都有一定的余额;每个出纳都能接收客户的存款,等等。…

java color类 蓝色_java中Color类的简单总结

标签:java中Color类的简单总结1.颜色的常识任何颜色都是由三原色组成(RGB),JAVA中支持224为彩色,即红绿蓝分量取值介于0-255之间(8位表示)2.Color类中的常量public final static Color black new Color(0,0,0);public final static Color bule new Col…

C#中几种循环语法的比较

循环操作在程序开发当中使用非常的广泛,当然循环也很容易成为整个程序运行的性能瓶颈,所以理解C#中几种循环的用法,还是非常重要的。C#支持一下四种循环方式1、while循环2、do...while循环3、for 循环4、foreach循环前三种循环在C、Java中也是…

Eclipse基金会

昨天Eclipse基金会庆祝其成立十周年。2004年2月的新闻稿宣布该非盈利组织的正式成立,由包括开发者、消费者和插件提供商在内的各独立团体组成的董事会,为Eclipse的长期发展负责。 基金会成立时,有19个项目和50个董事会成员,其开源…

.Net架构必备工具列表

原文N多年前微软官网曾发了.Net下必备的十种工具,N多年过去了,世异时移,很多东西都已经变化了,那个列表也似乎陈旧了。而且,该文也只是对十种工具独立的介绍,显得有些罗列的感觉,是不是每个工具…

java scanner接收数组_java – 使用scanner将文件中的整数读入数组

我正在为学校做一份复习工作.赋值是编写一个类,它从标准输入读取一个包含几个整数的文件,这些整数将被放入一个数组中.从这里开始,需要编写方法来找出平均值,中位数,最大值,最小值和标准差.它读起来像这样:4556677889等等…所以,我假设我需要创建一个数组列表(因为长…

Asp.Net页面传值的方法简单总结【原创】

1、QueryString当页面上form按照get的方式向页面发送请求数据的时候,web server会将请求数据放入一个QEURY_STRING的环境变量中,然后通过QeueryString方法从这个变量中获取相应的参数。例如:发送参数页面Test1.aspx 按钮单击代码:…