创建: 2017/12/26

完成: 2018/01/14

【TODO】
    S4, S5, S14来处理动态数组   CAF8A81B790F
【github 地址】传送门
 链表的定义
 定义  存储大量数据的数据结构
 性质  ● 相邻元素用指针连接
 ● 最后的要素指向NULL
 ● 程序运行时动态调整大小(size)
 ● (在计算机内存范围内)能获取需要的长度
 ● 不浪费内存空间(但是指针需要多余的内存)
   
   
   
 链表ADT
 链表的主要运算  ● 插入: 插入元素
 ● 删除: 删除指定位置的元素
 链表的额外运算  ● 链表删除: 删除链表的所有元素(删除链表)
 ● 计数: 获取链表内元素的个数
 ● 获取链表末尾第n个元素
   
   
   
 使用链表的理由
 数组概览
 定义  数组全体分配一个内存块
 用index花费固定时间(O(1))来接入
 获取元素花费一定时间
 O(1)
 获取元素A[n]时,
 n为元素到首元素的位差,
 位差n*元素大小为首元素内存与目标元素的差

获取元素: 一次乘法和一次加法   O(1)

 优点  ● 简单好用
 ● 获取元素高速 O(1)
 缺点  ● 大小(size)固定: 不能动态指定
 ● 分配一个内存块: 定义时分配,太大悲剧
 ● 插入操作非常坑: 要把后面的一个一个移开
 动态数组   ● 满了长度x2
 ● 不到一半, 长度/2

CAF8A81B790F

 【TODO】S4, S5, S14来处理

 链表的优劣
 优点  ● 增减元素只花费固定时间O(1)
 缺点  ● 获取单个元素花费大量时间O(n)
 ● 多余的指针浪费内存空间
 数组与链表的
 时间复杂度比较
   链表  数组  动态数组
 获取元素  O(n)  O(1)   O(1)
 插入/删除开头  O(1)  -  O(n)
 插入/删除结尾  O(n)  -  O(1), 数组没满的时候
 O(n), 数组满了的时候
 插入/删除中间  O(n)  -  O(n)
 内存的浪费  O(n)   0  O(n)
   
 单向链表
   
   
   
   
   
   
   
   
   
   
 双向链表
 概要
 优点  ●可以双向移动,操作便利
 缺点  ●需要额外的指针,额外消耗内存
 ●插入/删除更花时间(因为指针操作更多)
   
   
   
   
   
   
   
   
   
   
   
   
 循环链表
   用于轮询调度算法等
   
   
   
   
   
   
   
   
   
 内存高效率的双向链表
   
   
   
   
   
 链表的不足
   
   
   
   
   
   
   
   
   
   

转载于:https://www.cnblogs.com/lancgg/p/8281671.html

【WIP_S3】链表相关推荐

  1. 伍六七带你学算法 入门篇-链表的中间节点

    力扣-876链表的中间节点 难度-简单 给定一个带有头结点 head 的非空单链表,返回链表的中间结点. 如果有两个中间结点,则返回第二个中间结点. 示例 1: 输入:[1,2,3,4,5] 输出:此 ...

  2. Go 学习笔记(80)— Go 标准库 container/list(单链表、双链表)

    列表是一种非连续存储的容器,由多个节点组成,节点通过一些变量记录彼此之间的关系.列表有多种实现方法,如单链表.双链表等. ​ 在 Go 语言中,将列表使用 container/list 包来实现,内部 ...

  3. 数据结构(08)— 线性单链表基本操作

    1. 线性单链表数据结构 // 假定每个结点的类型用 SNode 表示 typedef struct SNodeTag {int data; // 所存储的数据元素SNodeTag *next; // ...

  4. 数据结构(05)— 线性单链表实战

    1. 设计思路 本项目的实质是完成对考生信息的建立.查找.插入.修改.删除等功能,可以首先定义项目的数据结构,然后将每个功能写成一个函数来完成对数据的操作,最后完成主函数以验证各个函数功能并得出运行结 ...

  5. 使用python建立简单的单链表

    代码 import sysclass ListNode:def __init__(self, x):self.val = xself.next = None# 将列表转换成链表 def list_to ...

  6. LeetCode19. Remove Nth Node From End of List 删除链表中的倒数第n个位置的元素

    前言 本文是LeetCode19. Remove Nth Node From End of List解法,这个题目需要删除链表中的倒数第n个位置的元素 代码 # -*- coding: utf-8 - ...

  7. 【数据结构】链表中的 指针,地址

    数据结构中跳过集合,直接开始线性结构 线性结构中单链表的操作涉及到给一个变量赋值地址,所以涉及到了指针 通过指针里的地址很方便找到节点 但指针这里绕了我很长时间,不论学了多少遍也不敢说把指针学会了 地 ...

  8. LeetCode中等题之两两交换链表中的节点

    题目 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 示例 1: 输入:head = [1,2,3,4] 输出:[ ...

  9. LeetCode简单题之合并两个链表

    题目 给你两个链表 list1 和 list2 ,它们包含的元素分别为 n 个和 m 个. 请你将 list1 中下标从 a 到 b 的全部节点都删除,并将list2 接在被删除节点的位置. 下图中蓝 ...

  10. LeetCode中等题之删除链表的中间节点

    题目 给你一个链表的头节点 head .删除 链表的 中间节点 ,并返回修改后的链表的头节点 head . 长度为 n 链表的中间节点是从头数起第 ⌊n / 2⌋ 个节点(下标从 0 开始),其中 ⌊ ...

最新文章

  1. 系列篇|编写一个翻转事件极性的package
  2. 使用IntelliJ IDEA开发SpringMVC网站(一)开发环境
  3. Meshlab和CloudCompare截图时去除“旋转圈”
  4. Kafka学习-复制
  5. 引导类、扩展类、系统类加载器的使用及演示
  6. win7 第一次装 mysql-5.7-winx64 系列,不知道root 密码,该如何处理?
  7. 张洁的新书「流浪的老狗」
  8. 《C++ Primer》7.1.3节练习
  9. 前端学习(2971):前一天回顾
  10. C++学习之路 | PTA乙级—— 1051 复数乘法 (15 分)(精简)
  11. 【Java】Hello world
  12. Centos 6 编译安装 Apache 2.4
  13. JAVA使用URLEncoder、URLDecoder编码解码
  14. 十四五规划下建筑企业智慧建造数字化转型规划战略
  15. newifi3刷什么固件最稳定_新路由三无线路由器刷什么固件好?
  16. 正在升级android s8,国行版三星S8/S8+再添新操作 升级安卓8.0
  17. 几个python运维脚本
  18. python计算图形面积的方法_Python计算任意多边形面积算法
  19. 中国工程院院士高文:从大数据科学到人工智能的迁移过程
  20. DAY 2 基础查询与排序

热门文章

  1. 最近租房有点烦!技术人如何用Python找到称心如意的“小窝”?
  2. AndroidDeveloper Weekly No.3
  3. R语言--字符串操作
  4. Centos7 Zabbix3.2安装(yum)
  5. Django的cmdb探索与开发(三)
  6. 对Spark2.2.0文档的学习1-Cluster Mode Overview
  7. 数据库练习(1)——建立数据库
  8. bae3.0第三步 添加默认管理后台模块和mysql库
  9. 转--global.asax文件(站点计数器)
  10. 使用AjaxPro实现ajax效果