上次写了篇如果让你手写个栈和队列,你还会写吗?是和一个CSDN上的朋友闲聊时候给我的启发,决定在公众号里连更一下经典数据结构和算法的文章,和大家一起巩固巩固内功。

今天来手写一个链表。虽然是用Java写的,但招式只是形式,内功还是最重要的

我们知道,数组作为数据存储结构有一定的缺陷。在无序数组中,搜索时低效的;而在有序数组中,插入效率又很低;不管在哪一种数组中删除效率都很低。况且一个数组创建后,它的大小是无法改变的。

而链表可能是继数组之后第二种使用得最广泛的通用数据结构了。这里主要来讨论并写一个单链表和双向链表。

顾名思义,单链表只能从表头到表尾的顺序,每个节点中保存了指向下一个节点的指针;双向链表则可以反向遍历,因为节点中既保存了向后节点的指针,又保存了向前节点的指针。由于链表结构相对简单,这里不再赘述,直接通过程序来查看它们常见的操作:

1. 单链表

2. 双向链表

在表头插入和删除速度很快,仅需改变一两个引用值,所以花费 O(1) 的时间。平均起来,查找、删除和在指定节点后面插入都需要搜索链表中的一半节点,需要O(N)次比较。在数组中执行这些操作也需要 O(N) 次比较,但是链表仍然要比数组快一些,因为当插入和删除节点时,链表不需要移动任何东西,增加的效率是很显著的,特别是当复制时间远远大于比较时间的时候。

当然,链表比数组优越的另一个重要方面是链表需要多少内存就可以用多少内存,并且可以扩展到所有可用内存。数组的大小在它创建的时候就固定了,所以经常由于数组太大导致效率低下,或者数组太小导致空间溢出。可变数组可以解决这个问题,但是它经常只允许以固定大小的增量扩展,这个解决方案在内存使用率上来说还是比链表要低。

END

人之所以能,是相信能!这世上没有天才,你若对得起时间,时间便对得起你。关注我们,每天进步一点点~

作者:华为云云享专家倪升武

开发了那么多项目,你能自己手写个健壮的链表出来吗?相关推荐

  1. 【机器学习】PCA主成分项目实战:MNIST手写数据集分类

    PCA主成分项目实战:MNIST手写数据集分类 PCA处理手写数字集 1 模块加载与数据导入 2 模型创建与应用 手动反爬虫:原博地址 https://blog.csdn.net/lys_828/ar ...

  2. 实验5-9 使用函数输出水仙花数_正点原子STM32F407探索者开发板资料连载第五十三章 手写识别实验

    1)实验平台:alientek 阿波罗 STM32F767 开发板 2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第五十三章 手写识别实 ...

  3. application.properties 不识别_阿波罗 STM32F767 开发板资料连载第五十八章 手写识别实验

    1)实验平台:alientek 阿波罗 STM32F767 开发板2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第五十八章 手写识别实验 ...

  4. Winform开发中手写签名的实现

    由于项目的需要,需要在项目的Winform系统的一个模块中集成手写签名的功能,一开始对这块不是很了解,只是了解他能够替代鼠标进行签名.既然是签名,一般就是需要记录手稿图片,作为一个记录核实的凭证,因为 ...

  5. Maven标准目录结构(手写Maven项目)

    标准目录结构 手写Maven项目 src main test 执行命令 启动项目 标准目录结构 Maven标准目录结构为如下图 手写Maven项目 按照上面的结构图,我们就手写Maven项目 先来一个 ...

  6. 【北京大学】13 TensorFlow1.x的项目实战之手写英文体识别OCR技术

    目录 1 项目介绍 1.1 项目功能 1.2 评估指标 2 数据集介绍 2.1 数据特征 3 数据的预处理 3.1 数据增强 3.2 倾斜矫正 3.3 去横线 3.4 文本区域定位 4 网络结构 5 ...

  7. JAVA工作总是维护项目_开发维护大型 Java 项目的建议

    原标题:开发维护大型 Java 项目的建议 假设你是正在开发和维护一个包含2000个类并使用了很多框架的Java开发者.你要如何理解这些代码?在一个典型的Java企业项目小组中,大部分能够帮你的高级工 ...

  8. 从零开发一个 Java Web 项目要点

    前言 本文章详细的列出了开发一个传统JavaWeb项目需要注意的要点,从环境准备开始到三层架构搭建,需要注意的地方全部罗列出来. 第一部分:环境准备 1. Maven命令创建web骨架 mvn arc ...

  9. ASP.NET 5 入门(1) - 建立和开发ASP.NET 5 项目

    ASP.NET入门(1) - 建立和开发ASP.NET 5 项目 ASP.NET 5 理解和入门 使用自定义配置文件 建立项目 首先,目前只有VS 2015支持开发最新的ASP.NET 5 程序,所以 ...

最新文章

  1. 一篇文章让你搞懂原型和原型链
  2. 通信保障:世博会看不到的展品
  3. 【数据资源】遥感资源大放送(下)| 11 个经典遥感数据集
  4. Android开发教程之--sql语句一、创建/删除表Stringsql=Createtable
  5. LetCode-MSSQL超过5名学生的课
  6. DHPST分销系统 YEP分销云主机分销系统源码
  7. 利用for...in...遍历js数组与Python异同
  8. iOS无限轮播图片的两种方式
  9. springboot yml多环境开发
  10. 挑选大数据营销平台应注意哪些问题
  11. 高速信号传输约翰逊 pdf_?高速滑环生产加工问题的具体分析
  12. 红米3 MoKee 7.1.2_r36 自编译版/去魔趣中心、宙斯盾/息屏禁止刷新UI 2018年5月5日更新...
  13. C++操作MySQL大量数据插入效率低下的解决方法
  14. emule最新服务器地址,emule 国内服务器(最新emule服务器)
  15. no identity-based policy allows the cloudformation:CreateStack action
  16. cadence导入dxf文件_PCB原创|cadence allegro导入DXF文件操作步骤
  17. nginx出现403错误的解决方法(亲测有效)
  18. Hole_making基于特征加工
  19. 【转】Swagger详解(SpringBoot+Swagger集成)
  20. matlab抓取网页信息,如何利用Matlab抓取网页数据

热门文章

  1. sql 如何查询上次的记录_学会SQL并不难,小白学习记录之五(多表查询)
  2. 测试用例综合设计方法
  3. JavaScript中关于创建对象的笔记
  4. 浏览器加载渲染HTML、DOM、CSS、 JAVASCRIPT、IMAGE、FLASH、IFRAME、SRC属性等资源的顺序总结...
  5. jvm间歇性崩溃分析
  6. JavaEE各种Javadoc的下载
  7. 北大OJ(POJ 2808)校门外的树
  8. 斐波那契数列大数的压位c语言,HDU 1568 Fibonacci(大数前4位)
  9. 国考最热岗位报录比20602:1?还是数据库知识挑战赛适合我
  10. MySQL数据库之互联网常用架构方案(全)