创建: 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. xcap发包工具的简单使用2(发送报文)

    上一篇文章介绍了如何构造报文,现在简单讲一下发送报文的步骤 1.获取接口列表 点击主界面工具栏中的“刷新列表”按钮(或对应菜单“interface->Reference interfaces”) ...

  2. js变量类型详解

    <html> <title>js变量类型详解</title> <meta http-equiv="content-type" conten ...

  3. xtu summer individual 3 F - Opening Portals

    Opening Portals Time Limit: 2000ms Memory Limit: 262144KB This problem will be judged on CodeForces. ...

  4. 添物不花钱学JavaEE(基础篇)-综述

    JavaEE由一堆基础标准组成.JavaEE开发一般需要如下工具和掌握如下内容: Java环境 Eclipse或其他开发工具 Tomcat容器或类似软件 Jsp/Servlet/Web/JDBC的掌握 ...

  5. 数据结构-B+树

    B+ 树是一种树数据结构,是一个n叉排序树,每个节点通常有多个孩子,一棵B+树包含根节点.内部节点和叶子节点.根节点可能是一个叶子节点,也可能是一个包含两个或两个以上孩子节点的节点. B+ 树通常用于 ...

  6. [luoguP1970] 花匠(DP)

    传送门 n2 过不了惨啊 70分做法 f[i][0] 表示第 i 个作为高的,的最优解 f[i][0] 表示第 i 个作为低的,的最优解 (且第 i 个一定选) 那么 f[i+1][1]=max(f[ ...

  7. [NOIP2007] 提高组 洛谷P1099 树网的核

    题目描述 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边到有正整数的权,我们称T为树网(treebetwork),其中V,E分别表示结点与边的集合,W表示各边长度的集合,并 ...

  8. TCP/IP学习笔记(4)------ICMP,ping,traceroute

    IMCP协议介绍 当传送IP数据包发生错误--比如主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,然后传送回给主机.给主机一个处理错误的机会,这 也就是为什么说建立在IP层以上的协议是可能 ...

  9. Spring Boot 2.1.5 正式发布,1.5.x 即将结束使命!

    Spring Boot 官网在 2019/03/15 这天发布了 Spring Boot 2.1.5 正式版,栈长表示真跟不上了.. 官宣如下 : https://spring.io/blog/201 ...

  10. 洛谷 P1183 多边形的面积

    P1183 多边形的面积 题目描述 给出一个简单多边形(没有缺口),它的边要么是垂直的,要么是水平的.要求计算多边形的面积. 多边形被放置在一个 X-YX−Y 的卡笛尔平面上,它所有的边都平行于两条坐 ...