创建: 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)
   
 单向链表
   
   
   
   
   
   
   
   
   
   
 双向链表
 概要

 优点  ●可以双向移动,操作便利
 缺点  ●需要额外的指针,额外消耗内存
 ●插入/删除更花时间(因为指针操作更多)
   
   
   
   
   
   
   
   
   
   
   
   
 循环链表
   用于轮询调度算法等
   
   
   
   
   
   
   
   
   
 内存高效率的双向链表
   
   
   
   
   
 链表的不足
   
   
   
   
   
   
   
   
   
   

【WIP_S3】链表的更多相关文章

  1. Redis链表实现

    链表在 Redis 中的应用非常广泛, 比如列表键的底层实现之一就是链表: 当一个列表键包含了数量比较多的元素, 又或者列表中包含的元素都是比较长的字符串时, Redis 就会使用链表作为列表键的底层 ...

  2. [数据结构]——链表(list)、队列(queue)和栈(stack)

    在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...

  3. 排序算法----基数排序(RadixSort(L))单链表智能版本

    转载http://blog.csdn.net/Shayabean_/article/details/44885917博客 先说说基数排序的思想: 基数排序是非比较型的排序算法,其原理是将整数按位数切割 ...

  4. 防御性编程习惯:求出链表中倒数第 m 个结点的值及其思想的总结

    防御性编程习惯 程序员在编写代码的时候,预料有可能出现问题的地方或者点,然后为这些隐患提前制定预防方案或者措施,比如数据库发生异常之后的回滚,打开某些资源之前,判断图片是否存在,网络断开之后的重连次数 ...

  5. 时间复杂度分别为 O(n)和 O(1)的删除单链表结点的方法

    有一个单链表,提供了头指针和一个结点指针,设计一个函数,在 O(1)时间内删除该结点指针指向的结点. 众所周知,链表无法随机存储,只能从头到尾去遍历整个链表,遇到目标节点之后删除之,这是最常规的思路和 ...

  6. C语言之链表list

    #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h& ...

  7. 单链表的C++实现(采用模板类)

    采用模板类实现的好处是,不用拘泥于特定的数据类型.就像活字印刷术,制定好模板,就可以批量印刷,比手抄要强多少倍! 此处不具体介绍泛型编程,还是着重叙述链表的定义和相关操作.  链表结构定义 定义单链表 ...

  8. 学习javascript数据结构(二)——链表

    前言 人生总是直向前行走,从不留下什么. 原文地址:学习javascript数据结构(二)--链表 博主博客地址:Damonare的个人博客 正文 链表简介 上一篇博客-学习javascript数据结 ...

  9. 用JavaScript来实现链表LinkedList

    本文版权归博客园和作者本人共同所有,转载和爬虫请注明原文地址. 写在前面 好多做web开发的朋友,在学习数据结构和算法时可能比较讨厌C和C++,上学的时候写过的也忘得差不多了,更别提没写过的了.但幸运 ...

随机推荐

  1. UVa 806 四分树

    题意: 分析: 类似UVa 297, 模拟四分树四分的过程, 就是记录一个左上角, 记录宽度wideth, 然后每次w/2这样递归下去. 注意全黑是输出0, 不是输出1234. #include &l ...

  2. Vue如何实现swiper左右滑动内容区控制导航tab同时切换高亮

    Vue如何实现左右滑动内容区控制导航tab同时切换高亮,实现的效果是:点击导航按钮时内容区发生改变,左右滑动内容区时导航按钮跟随切换高亮,停留在某个内容区时刷新页面后仍然停留在当前内容区.       ...

  3. Qmake 工具编译调试

    Qmake 工具编译调试 2015年4月9日星期四 18:38:06 1. 确定qmaek 路径 [root@roger ~]# which qmake /usr/lib/qt-3.3/bin/qma ...

  4. 静态区间第k大(划分树)

    POJ 2104为例[经典划分树问题] 思想: 利用快速排序思想, 建树时将区间内的值与区间中值相比,小于则放入左子树,大于则放入右子树,如果相等则放入左子树直到放满区间一半. 查询时,在建树过程中利 ...

  5. 有用的 SystemTap 脚本

    https://segmentfault.com/a/1190000000680628 https://github.com/posulliv/stap

  6. linux 的硬链接与软连接

    linux 里有硬链接和软连接两种概念.要明白这些概念首先要明白文件在linux 上其实有3个组成部分. data 真正的数据存储区域 inode 一个用来唯一表示data的数据结构 filename ...

  7. 012 router password

    Press RETURN to get started!       Router>en Router#config t Enter configuration commands, one pe ...

  8. python实现同服站点地址获取

    说明:程序使用http://s.tool.chinaz.com/same此站点查询的结果.使用python简单的实现抓取结果 先随便查询一个结果,抓包分析,如图: 使用python模仿post表单,使 ...

  9. C#如何让Listbox支持多选

    把SelectionMode改成MultiExtended

  10. Yarn 的工作流-创建一个新项目

    Microsoft Windows [版本 10.0.16299.125] (c) Microsoft Corporation.保留所有权利. C:\Users\Administrator>cd ...