创建: 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. fmt:formatDate的输出格式详解

    <fmt:formatDate value="${isoDate}" type="both"/> 2004-5-31 23:59:59 <fm ...

  2. Python接口测试之unittest框架(五)

    Test-driven development(TDD)开发模式在今天已经不是什么新奇的事了,它的开发思维是在开发一个产品功能的时候,先 编写好该功能的测试代码,在编写开发比如,比如要写二个数相除的函 ...

  3. Master of Subgraph

    Problem E. Master of SubgraphYou are given a tree with n nodes. The weight of the i-th node is wi. G ...

  4. <<编程之美>> -- 队列中取最大值操作的问题

    不得不说编程之美是一本好书,虽然很多题目在做acm中的过程中遇到过,不过还是有很多值得思考的地方 这是今天在编程之美上看到的一个问题,对于栈转化成队列的一个思考 平时都太过依赖c++内函数库中的栈和队 ...

  5. K-th Number POJ - 2104 划分树

    K-th Number You are working for Macrohard company in data structures department. After failing your ...

  6. Linux下汇编语言学习笔记50 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  7. codeforces Gym 100971 A、B、C、F、G、K、L

    A题  直接把问号全部变为陆地如果所有陆地连通    那么再逐个把刚才变成陆地的问号变为水如果依旧连通有多种解 为什么我的代码跑不过去,和网上的题解思路一模一样!!?? #include<cst ...

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

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

  9. noip 2011

    铺地毯 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺 ...

  10. 高数(A)下 第十二章

    12.1 12.2 12.3  12.4 12.5  12.6 自测题