线性表

定义

线性表(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. Linux之Libcurl库的介绍与应用20170509

    一.LibCurl简介 LibCurl是免费的客户端URL传输库,支持FTP,FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, FILE ,LDAP等 ...

  2. Codeforces Round #385 (Div. 2)A B C 模拟 水 并查集

    A. Hongcow Learns the Cyclic Shift time limit per test 2 seconds memory limit per test 256 megabytes ...

  3. 洛谷P1199 三国游戏

    题目描述 小涵很喜欢电脑游戏,这些天他正在玩一个叫做<三国>的游戏. 在游戏中,小涵和计算机各执一方,组建各自的军队进行对战.游戏中共有 N 位武将(N为偶数且不小于 4),任意两个武将之 ...

  4. kotlin Hello World 以及关键字

    hello world:(支持函数式编程,不需要放到 class 中) fun main(args: Array<String>) { println("Hello World& ...

  5. bzoj1511 [POI2006]OKR-Periods of Words kmp+乱搞

    1511: [POI2006]OKR-Periods of Words Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 351  Solved: 220[S ...

  6. 手脱Aspack变形壳1

    1.载入PEID Aspack v2.12 -> www.aspack.com 2.载入OD,不管是看查壳信息还是看入口特征都跟我上一次发的一个手脱Aspack v2.12的帖子相同http:/ ...

  7. MySQL建表时列名同保留字重复问题解决办法

    建表时遇到遇到属性名同MySQL的保留字相同导致不能建表的问题,如下SQL语句: CREATE TABLE TBL_ACCOUNT_FROZEN_RECORD ( ID BIGINT NOT NULL ...

  8. 跟我一起写Makefile(二)

    Makefile 总述——————— 一.Makefile里有什么? Makefile里主要包含了五个东西:显式规则.隐晦规则.变量定义.文件指示和注释. 1.显式规则.显式规则说明了,如何生成一个或 ...

  9. 深入探索C++对象模型(七)

    站在对象模型的尖端(On the Cusp of the Object Model) Template 下面是有关template的三个主要讨论方向: template的声明,基本上来说就是当你声明一 ...

  10. zoj 3229 Shoot the Bullet(有源汇上下界最大流)

    Shoot the Bullethttp://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3442 Time Limit: 2 Second ...