每日学习录(线性表)

三、线性表

3.1 线性表的定义

零个或多个数据元素的有限序列。

注意点:
序列:元素是有顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他元素有且只有一个前驱和后继。
有限:无线的数列只存在于数学的概念中。

如果用数学的语言来进行定义:

在较复杂的线性表中,一个数据元素可以由若干个数据项组成。

为什要用线性表呢?因为要相同类型的数据。

3.2 线性表的抽象数据类型

线性表的抽象数据类型定义如下:

3.3 线性表的顺序存储结构

3.31 顺序存储定义

线性表的两种物理结构的第一种
用一段地址连续的存储单元依次存储线性表的数据元素。

3.32 顺序存储方式

用一维数组来实现顺序存储结构
起始位置 数组下标为0的地方 数组的长度就是这个最大存储容量

3.33 数组长度与线性表长度区别

数组长度MaxSize (最大存储容量)是存放线性表的存储空间的长度,存储分配后一般不会变。
动态分配数组会带来性能损耗
线性表的长度Length 是线性表数据元素的个数,随着线性表的插入和删除操作,这个量是变化的
线性表长度<=数组的长度

3.34 地址计算方法

存储器中的每个存储单元都有自己的编号,这个编号称为地址。
当第一个位置确定之后,其他位置就可以确定下来。
每个数据元素,不管数据类型是什么(当然一个线性表里的数据元素的数据类型是一样的),他都要占用一定的存储空间。

假设占用c个存储单元,那么线性表中第i+1个数据元素的存储位置和第i个数据元素的存储位置满足下列关系(LOC表示获得存储位置的函数)

对每个线性表位置的存入和取出数据,对于计算机来说都是相等的时间,也就是一个常数,因此用我们算法中学到的时间复杂度的概念来说,它的存取时间性能为O(1)。我们通常把具有这一特点的存储结构称为随机存取结构

3.4 顺序存储结构的插入与删除

3.41 获得元素操作(GetElem)

对于数组来说是简单的,只要i的数值在数组下标范围内,需要将数组下标为i-1的值返回即可。

注意这里返回值类型Status是一个整型,返回OK代表1,ERROR代表0,。之后代码中出现就不再详述。

3.42 插入操作(Listinsert)

3.43 删除操作(ListDelete)

分析一下插入和删除的时间复杂度
最好情况 插入删除最后一个 O(1)
最坏情况第一个 所有的元素都要移动了 O(n)
平均的情况 插入删除第i个元素则 要移动n-i(应该在+1把?) 平均就是(n-1)/2 还是O(n)。

所以线性表的顺序存储结构,在存和读时,不管哪个位置都是O(1);而插入和删除时,时间复杂度时O(n).适合元素个数不太变化,而更多是存取数据的应用。

3.44 线性表顺序存储结构的优缺点

3.5 线性表的链式存储结构

3.51 线性表链式存储结构定义

特点:用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的。
意味着这些数据元素可以存储在内存中未被占用的任意位置。

链式结构中,每个数据元素不只要存储数据元素信息,还要存它的后继元素地址。

3.52 头指针与头结点的异同

3.53 线性表链式存储代码描述

3.6 单链表的读取

3.6 单链表的插入与删除

3.61 单链表的插入

3.62 单链表的删除

3.7 单链表的整表创建

创建单链表的过程就是一个动态生成链表的过程。即从“空表”的初始状态起,依次建立各元素结点,并逐个插入链表。

3.8 单链表的整表删除

3.9 单链表结构与顺序存储结构优缺点

3.10 静态链表

数组的元素都是由datacur两个数据域组成。

数据域data:用来存放数据元素,也就是通常我们要处理的数据。

游标cur:相当于单链表中的next指针,存放该元素的后继在数组中的下标。

我们把这种用数组描述的链表叫做静态链表(游标实现法)。

3.10.1 静态链表的插入操作

在静态链表中。操作的是数组。

3.10.2静态链表的删除操作

3.10.3 静态链表优缺点

3.11 循环链表

将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称循环链表(circular linked list)。

循环链表解决了一个很麻烦的问题:如何从当中一个结点出发,访问到链表的全部结点。

3.12 双向链表

双向链表(double linked list)是在单链表的每个结点中,再设置一个指向其前驱结点的指针域

克服了单向性这一缺点。

线性表的双向链表存储结构:

在插入和删除时,需要更改两个指针变量。

总结:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值