线性表

定义

线性表(linear list)是由零个或多个相同类型的数据元素构成的有限序列。

存储结构

顺序存储

  • 最简单的存储方法是顺序存储法,即把线性表的数据元素按照逻辑次序顺序地放在一组地址连续的存储空间中,用顺序存储方法存储的线性表称为顺序表(sequential list)。因为存储的类型相同因此每个元素所占的存储空间也相同。
  • 因为顺序表存储的每个元素占用的存储空间相同,因此只要知道第一个元素的存储地址,就可以直接计算出任意元素的存储地址,所以顺序表是一种随机存储结构
  • 优点:不需要为表示元素之间的逻辑关系而增加额外的存储空间;可以方便地随机访问任意位置的元素O(n)。
  • 缺点:插入和删除操作需要移动大量的数据元素,因此效率比较低;难以选择合适的存储容量,顺序表要求连续的存储空间,在分配时会选择大小比较符合的空间,因此容易产生内存碎片。

链式存储

  • 采用动态存储分配的方式,在程序运行时根据实际需要随时申请内存,在不需要时将内存释放,这种链式方式存储的线性表称为链表(linked list)
  • 链表在实现时可以分为动态链表和静态链表,从链接方式上又可以分为单链表、双链表和循环链表等。
单链表
  • 链表用一组任意的存储单元存放线性表中的各个元素,这组存储单元可以师连续的,也可以不连续,甚至零散地分布在内存的某些位置。为了正确表示结点间的逻辑关系,在存储元素值的同时,还需要存储该元素的直接后继元素的位置信息(指针pointer)如【data,next】,因为这种结构的每个结点只包含一个链域(next),故将这种链表称为单链表(single linked list),结尾为NULL指针。
  • 查找算法
    1. 按位查找 由于链表采用的是一直顺序存取方式,如果要实现随机存取则只能从链表的表头出发,顺着每个结点的指针域往后依次访问每个结点。
    2. 按值查找 按值查找是指在单链表中查找给定值的结点,找到后返回元素地址或序号。
循环链表
  • 定义:如果将单链表终点的指针域指向头结点,则整个链表构成一个环,这种首尾相接的单链表称为单循环链表。
双向链表
  • 存储结构: 【 *prev,data, *next】,优点是可以很方便地得到直接前驱元素,这种链表中有两条相反的链域,因此称为双向链表,简称双链表
静态链表

对于使用c++指针来存储结点,结点空间的分配和回收都是由操作符new和delete动态执行的,因此称之为动态链表(dynamic linked list)。对于某些高级语言如java,没有提供指针数据类型,因此多采用数组来描述单链表,用数组元素的下标来模拟链表的指针,这种数组存储的链表结构,称为静态链表。

顺序表与链表的比较

- 时间性能比较
1. 顺序表是由数组实现的,因此是一种随机存储结构,对于表中任意结点存取操作的时间复杂度为O(1),而查找需要从头指针开始顺着链表扫描,平均负责度为O(n),因此如果线性表的主要操作是查找而很少插入或删除操作,则采用顺序表比较合适。
2. 对于链表,在某个位置上进行插入和删除操作,只需要修改指针即可,无需移动大量元素,操作复杂度为O(1)。若插入和删除主要发生在表头和表尾,则采用循环链表更为方便。
- 空间性能比较
1. 顺序表上的存储空间是静态分配的,因此必须提前确定其存储大小,故顺序表常常用于存储规模比较容易确定的线性表。
2. 静态链表也是静态分表的,所以会有相同的问题。但是如果同时存在多个结点类型相同链表,则这些链表可以共享同一静态链表空间。
3. 动态链表的存储空间是动态分配的,因此只要内存空间还有空闲就不会溢出。因此适用于那种长度变化较大或者长度难以估计的线性表。

STL中相关的模板类

- STL中的向量(Vector)是使用数组实现的,因此具有顺序表的所有特点,可以快速存取任意元素,向量是同一种数据类型的对象集合。
- 列表(list)是STL中线性表的链式存储形式,STL标准库中一般采用双向循环链表实现列表。因此list容器不支持"直接"随机访问(可以通过内部实现“随机”,但是效率不如数组),查找某个元素时往往需要遍历相邻的若干元素。其优点是任何位置都可以高效地插入或删除元素,并且不需要移动其他元素。

《数据结构与STL-第二章 线性表》读书笔记的更多相关文章

  1. csapp读书笔记-并发编程

    这是基础,理解不能有偏差 如果线程/进程的逻辑控制流在时间上重叠,那么就是并发的.我们可以将并发看成是一种os内核用来运行多个应用程序的实例,但是并发不仅在内核,在应用程序中的角色也很重要. 在应用级 ...

  2. CSAPP 读书笔记 - 2.31练习题

    根据等式(2-14) 假如w = 4 数值范围在-8 ~ 7之间 2^w = 16 x = 5, y = 4的情况下面 x + y = 9 >=2 ^(w-1)  属于第一种情况 sum = x ...

  3. CSAPP读书笔记--第八章 异常控制流

    第八章 异常控制流 2017-11-14 概述 控制转移序列叫做控制流.目前为止,我们学过两种改变控制流的方式: 1)跳转和分支: 2)调用和返回. 但是上面的方法只能控制程序本身,发生以下系统状态的 ...

  4. CSAPP 并发编程读书笔记

    CSAPP 并发编程笔记 并发和并行 并发:Concurrency,只要时间上重叠就算并发,可以是单处理器交替处理 并行:Parallel,属于并发的一种特殊情况(真子集),多核/多 CPU 同时处理 ...

  5. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  6. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

  7. 《C#本质论》读书笔记(18)多线程处理

    .NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...

  8. C#温故知新:《C#图解教程》读书笔记系列

    一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...

  9. C#刨根究底:《你必须知道的.NET》读书笔记系列

    一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...

  10. Web高级征程:《大型网站技术架构》读书笔记系列

    一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...

随机推荐

  1. 【arc075F】Mirrored

    Portal --> arc075_f Solution ​  一开始抱着"我有信仰爆搜就可以过"的心态写了一个爆搜.. ​  但是因为..剪枝和枚举方式不够优秀愉快T掉了q ...

  2. mysql四-1:单表查询

    一 单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二 关键 ...

  3. ORACLE获取某个时间段之间的月份列表

    返回1-31,或者1-12,或者某个 select rownum   from dual   connect by rownum<31 就是connect by http://marcospri ...

  4. oracle、mysql、db2三大数据库分页方法的整理

    最近项目中经常会涉及到代码中支持三种数据库的分页的功能,自己整理了关于三种数据库的分页的写法,分享给大家,以供大家使用.希望能帮到更多的码友! 先来看一个代码片段: String page = ala ...

  5. vmvare彻底删除(转)

    bat脚本 echo off cls echo "flag">>%windir%\system32\test.log if not exist %windir%\sys ...

  6. Bootstrap3和Bootsrap4的区别

    Bootstrap3和Bootstap4的区别 1.Bootsrap4 css文件减少了40%以上 2.Bootsrap4已经不支持IE8以及IOS 6的支持 3.多了些类好组件

  7. 线上Redis偶发性链接失败排查记

    问题过程 输入法业务于12月12日上线了词库接受业务,对部分用户根据用户uuid判断进行回传,在12月17日早上8点多开始出现大量的php报错(Redis went away),报错导致了大量的链接积 ...

  8. vijos 1288 箱子游戏 计算几何

    背景 hzy是箱子迷,他很喜欢摆放箱子,这次他邀请zdq,skoier一起来玩game... 描述 地板上有一个正方形的大箱子和许多三角型的小箱子.所有的小箱子都在大箱子里面,同时,一些三角形的小箱子 ...

  9. [SCOI2010]生成字符串 题解(卡特兰数的扩展)

    [SCOI2010]生成字符串 Description lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数 ...

  10. .net APIHelper client获取数据

    using Newtonsoft.Json; using System.Net.Http.Headers; public static class APIHepler { public static ...