线性表概念

归总说明现行表的特性,并汇总了线性表的一些常见的基本概念。

不错的几个博客位置:


版权声明:本文为CSDN博主「大唐不良猿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_49188222/article/details/124309378

1. 线性表概念

线性表(list)是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列(a1, a2 ..., an)。其中Ai是表象,n是表长度。线性表中的数据元素之间是有顺序的;线性表中的数据元素个数是有限的;线性表中的数据元素的类型必须相同线性表具有如下几项性质:

1、a0为线性表的第一个元素,只有一个后继。
2、an为线性表的最后一个元素,只有一个前驱。
3、除a0和an外的其它元素ai,既有前驱,又有后继。
4、线性表能够逐项访问顺序存取

这里假设是在int为4字节的系统上,数组存储在一段连续的内存上,例如图中从地址1000开始,每个格子存放一个4字节的int,就可以通过简单的加法计算出要访问的某一项的地址了,因此数组可以做到随机访问(random-access),也就是任意访问数组某一项a[x]时,可以通过(a的地址+x*sizeof(int))计算得到a[x]地址,时间复杂度是O(1)。
  相反,链表的内存是不连续的,代价就是要存储多一个next指针,指向下一个结点的地址,通过这个地址找到链表的下一个结点,因此链表支持顺序访问(sequential access),也就是当我要访问链表的第x个结点时,我要从头结点开始按顺序遍历next指针才能找到这个结点,时间复杂度是O(n)。

链表与数组的优缺点比较

1.2 内存管理

线性表在代码中实现其内存管理可以是联系的也可以是跳跃的方式,联系方式通过经典的数组实现,当然我们可以认为数组就是最简单的一种线性表。对于链式存储结构,主要通过指针来进行数据管理,常用的有单向链表、双向链表。

  这里还有一个比较重要的点:在遍历数组和链表时时间复杂度都是O(n),但是实际上数组耗时比链表小很多,原因是cpu缓存对连续内存的数组友好,对不连续内存的链表不友好。
  计算机的存储器分6个层级结构:(处理速度从快到慢)

寄存器
高速缓存 (cpu缓存,一般有L1,L2,L3三层缓存)
主存储器(内存)
磁盘缓存
固定磁盘
可移动存储介质
  根据局部性原理,cpu在读取内存时会读取一片连续空间的内存,将一些经常访问的数据放在cpu缓存,在访问数据的时候,先检查缓存里是否存在,如果存在就直接读取使用,如果不存在再去内存读取。CPU缓存的访问速度和内存的访问速度可能相差几十倍

1. 线性表操作

  • 创建线性表                        list_create()
  • 销毁线性表                        list_destroy()
  • 清空线性表
  • 将元素插入线性表
  • 将元素从线性表中删除
  • 获取线性表中某个位置的元素
  • 获取线性表的长度
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值