数组与链表

前言

在数据结构中,基本都会使用到数组和链表,那么数组和链表有哪些区别呢,什么时候用数组什么时候用链表?

一、区别

数组:
1.存储数组的内存空间的地址是连续的,且大小是有局限性的,对内存空间的要求比较高,假如我们申请一个100字节的数组,如果没有足够大的内存空间,那么会申请失败,可能申请的这个数组大小只有这块内存的大小;
2.数组还存在越界访问的问题,如果我们访问数组的成员超过第100字节,可能编译器不会报错,但是当程序运行时,可能会按照内存地址递增或递减的方式来访问,假设如果是在一个循环判断里面,如果你访问到的是循环的判断变量,则可能会造成无限循环;
3.假如当前数组的大小不满足我们的需求时,需要进行扩容,一旦进行扩容,需要进行数据复制,非常麻烦;
4.数组是一种线性表,内存空间也是连续的,因此可以直接指定下标进行随机访问;
5.数组在进行“插入”、“删除”操作时时间复杂度是O(n),效率较低;
链表:
1.链表的每个结点都需要申请内存空间,因此特别消耗内存空间;
2.链表的操作难度大,容易造成段错误或者越界访问;
3.假如频繁的对链表进行插入或删除,会造成内存的频繁申请和释放,会产生内存碎片;
4.链表在进行“插入”、“删除”操作时时间复杂度为O(1),效率较高;

选择:

思想:时间换空间,空间换时间
当内存空间充足的时候,如果我们更加追求代码的执行速度,我们就可以用空间换时间的思路选择链表,如果内存比较紧缺,这时,就要反过来用时间换空间的思路,用数组较好,当然,代码讲究的还是可靠性,如果对内存的要求特别高,还是优先选择数组较好。

最后:

刚学没多久,记录一下,后续再完善笔记。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值