顺序表的线性表示

顺序表是啥?
想象一下,你有一串珍珠项链,每颗珍珠代表一个数据元素,珍珠一颗接一颗地连在一起,这就是线性表。如果这些珍珠都放在同一个盒子里,而且盒子里的珍珠是按照一定的顺序排列的,那么这个盒子就是顺序表。
顺序表有啥特点?
快取快放:就像你从盒子里随便拿一颗珍珠一样,想拿哪颗就拿哪颗,速度很快。
省空间:每颗珍珠只占它自己的地方,不像有些项链,珍珠之间还要留空隙。
挤一挤:如果你想在项链中间加一颗珍珠,可能就得把后面的珍珠都往后挪一挪,这就比较麻烦了。
盒子大小:有两种盒子,一种是固定的,一旦珍珠放满了就放不下了;另一种是可以变大的,珍珠多了就换个大盒子。
顺序表上的基本操作:
插入操作:就像往项链里加一颗珍珠,如果是加在项链末尾,那就简单了;如果是加在中间,就得把后面的珍珠都挪一挪。
删除操作:就像从项链上取下一颗珍珠,如果是取末尾的,直接拿掉就行;如果是取中间的,就得把后面的珍珠往前挪一挪。
查找操作:就像在项链上找一颗特定的珍珠,如果珍珠就在你手边,那很快;如果珍珠在项链的另一头,那就得一颗一颗找过去。
小贴士:
即使盒子可以变大,珍珠的排列方式还是一样的,找珍珠的速度还是很快。
 

知识点链接
顺序表的定义
概念:顺序表使用一组地址连续的存储单元来存储线性表中的数据元素,使得逻辑上相邻的元素在物理位置上也相邻。
特点
随机访问:可以通过首地址和元素序号快速访问到指定元素,时间复杂度为O(1)。
存储密度高:每个结点只存储数据元素,与链表相比,没有额外的存储开销。
逻辑与物理位置相邻:插入和删除操作时需要移动大量元素,这可能导致效率问题。
一维数组的空间分配:分为静态分配和动态分配两种方式。
静态分配
数组的大小和空间是固定的,空间占满后无法添加新元素,可能导致溢出。
动态分配
在程序执行过程中动态分配存储空间,空间占满时可以重新分配一块更大的空间替换原来的空间。
顺序表上基本操作的实现
插入操作:在指定位置插入新元素,需要对表中的元素进行整体移动。
最好情况:在表尾插入,时间复杂度为O(1)。
最坏情况:在表头插入,需要移动n次元素,时间复杂度为O(n)。
平均情况:移动节点的平均次数为 \frac{n}{2} ,时间复杂度为O(n)。
删除操作:删除指定位置的元素,需要移动元素以覆盖被删除的元素。
最好情况:删除表尾元素,时间复杂度为O(1)。
最坏情况:删除表头元素,需要移动n-1次元素,时间复杂度为O(n)。
平均情况:删除节点的平均次数为 \frac{n-1}{2} ,时间复杂度为O(n)。
按值查找(顺序查找):查找特定值元素的位置。
最好情况:查找的元素在表头,时间复杂度为O(1)。
最坏情况:查找的元素在表尾或不存在,需要比较n次,时间复杂度为O(n)。
平均情况:查找元素所需比较的平均次数为 \frac{n}{2} ,时间复杂度为O(n)。
Tips
动态分配仍然是顺序存储结构,物理结构没有变化,依然是随机存取方式,只是分配的空间大小可以在运行时决定。
 

 

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值