创建: 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. UvaLive 4872 Underground Cables (最小生成树)

    题意: 就是裸的最小生成树(MST), 完全图, 边长是实数. 分析: 算是复习一下MST把 方法一: prim 复杂度(n^2) #include <bits/stdc++.h> usi ...

  2. //……关于TCP三次握手与四次挥手

    TCP的概述 TCP把连接作为最基本的对象,每一条TCP连接都有两个端点,这种断点我们叫作套接字(socket),它的定义为端口号拼接到IP地址即构成了套接字,例如,若IP地址为192.3.4.16 ...

  3. I2C详细介绍

    I2C时序 1.开始和停止: 说明: 开始:在SCL的高电平的时候SDA线的从高电平到低电平的跳变定义为开始 停止:在SCL的高电平的时候SDA线的从低电平到高电平的跳变定义为停止 2.有效数据的位置 ...

  4. CookiesReader

    CookiesReader "use strict"; /** * * @author xgqfrms * @license MIT * @copyright xgqfrms * ...

  5. css3 & background & background-image

    css3 & background & background-image https://developer.mozilla.org/en-US/docs/Web/CSS/backgr ...

  6. 「CodePlus 2017 12 月赛」火锅盛宴

    n<=100000种食物,给每个食物煮熟时间,有q<=500000个操作:在某时刻插入某个食物:查询熟食中编号最小的并删除之:查询是否有编号为id的食物,如果有查询是否有编号为id的熟食, ...

  7. ArrayAdapter的使用

    package com.pingyijinren.test; import android.content.Context; import android.view.LayoutInflater; i ...

  8. Evaluate Reverse Polish Notation(逆波兰式)

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  9. 修改mysql root用户密码(忘记密码)

    vi /etc/my.cnf,在[mysqld]中添加 skip-grant-tables 例如: [mysqld] skip-grant-tables datadir=/var/lib/mysql ...

  10. wget下载网络图片

    wget http.......  --no-check-certificate