数据结构_顺序表和单链表的对比

这篇博客内容主要是对比顺序表和链表。在不同场景下,这两种结构各有优缺点,都有存在的价值,互相不能取代。目前我对这两种结构的使用很有限,所以在这篇博客中不会做很深入的对比,只能基于我现在的认知进行简单对比,以后深度使用后再补充。

顺序表

顺序表的优点

  1. 可以按下标进行随机访问
    因为顺序表是用数组来存储数据的,因此可以根据下标直接访问数据,避免了对顺序表的遍历。
  2. cpu高速缓存命中率较高
    指的是高速缓存预加载。计算机会将内存当前在使用的数据附近的数据预加载一部分到高速缓存中,这样有一定的概率可以提高程序的运行速度,因为顺序表内存是连续的,所以被预加载的可能性高。

顺序表的缺点

  1. 空间不够时需要动态开辟内存。会造成一定程度的性能消耗或者会造成空间浪费
    当空间不够需要动态开辟内存时,如果我们每次增加一个单位的空间,若是往顺序表大量插入数据时,就需要多次申请内存,这样会造成很大的性能消耗;如果我们每次扩大到当前空间的二倍,那么若是不再插入数据,那么就会造成空间的浪费。
  2. 头部或者中间插入删除数据,需要挪动数据,效率比较低-----> O ( N ) O(N) O(N)
    在顺序表中插入数据时,除了尾插,其余都要挪动顺序表中数据,这会造成一定性能消耗,时间复杂度是 O ( N ) O(N) O(N)

链表

链表的优点

  1. 按需申请内存,需要存一个数据,就申请一块内存。不存在空间浪费。
    链表申请空间和顺序表有个区别,那就是链表不要求数据在物理上是连续的,每次申请一个单位的内存空间,性能消耗小,而顺序表要求数据在物理上是连续的,所以就很容易造成当前区域内存空间不足以扩展,所以需要在其它位置重新申请一整块连续空间,所以性能消耗会很大。
  2. 任意位置 O ( 1 ) O(1) O(1)时间内插入数据
    链表插入数据很方便,只需要遍历找到要插入的位置,然后直接插入就行,这个插入过程的时间复杂度为 O ( 1 ) O(1) O(1),因为不需要挪动其它数据。

链表的缺点

  1. 不支持下标的随机访问
    链表在访问某个位置的数据时,需要遍历链表,这一点比顺序表要麻烦。

总结

很明显,顺序表和链表各有优缺点,但是各有对方不能取代的地方,比如说顺序表的随机访问、链表的内存申请。这两种结构都是非常重要的基础结构,他们的价值在于灵活应用,在后续的堆栈、队列、树和图这些结构中,这两种结构会有非常精妙的应用。掌握这两种结构,对于我们因地制宜,创造最合适的结构至关重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值