数组和链表的简单对比

数组是有限个相同类型的变量所组成的有序集合,数组是最为简单,最为常用的数据结构,数组的另一个特点是顺序存储,因此可以很好地实现逻辑上的顺序表。
数组的查找可以直接通过下标索引查找,所以查找效率特别高,插入和删除的时候都可以分为头部,中部,尾部,数组每次插入或者删除的时候都需要移动其他元素,所以说相对来说效率比较低。
插入和删除的时间复杂度都为O(n)。
链表是一种在物理上非连续、非顺序的数据结构,有若干结点所组成。链表在内存里是随机存储的,相对数组的顺序存储,链表可以灵活有效地利用零散的碎片空间,链表的查找只能从头结点开始向后一个一个节点逐一查找。时间复杂度为O(n),
链表插入的情况同样分为三种情况,尾部,头部,中间。尾部插入最简单,直接把最后一个节点的next指针指向新插入的节点即可。
头部插入可以分为两个步骤,第一步,把新节点的next指针指向原先的头结点,第二步把新节点变为链表的头结点。
中间插入同样分为两个步骤,第一步把插入位置的前置节点的next指针指向插入的新节点,第二步,将新节点的next指针指向前置节点的next指针原先所指向的节点。
只要内存空间允许,能够插入链表的元素是无穷无尽的,不需要像数组那样考虑扩容的问题哦。
链表的删除操作同样分为三种情况,尾部删除是最简单的结果,把倒数第二个节点的next的指针指向空即可。
头部删除也很简单,把链表的头结点设为原先头结点的next指针即可。
中间删除,同样很简单,把要删除节点的前置节点的next指针,指向需要删除元素的下一个节点即可。
这里需要注意的是,许多高级语言,如java,拥有自动化的垃圾回收机制,所以我们不用刻意去释放被删除的节点,只要没有外部引用指向它们,被删除的节点会被自动回收。
总结一下,链表如果不考虑插入、删除操作之前的查找元素的过程,只考虑纯粹的插入和删除操作,时间复杂度都是O(1)。
数组和链表都属于线性的数据结构,数组适合查找,而链表更适合插入、删除。
发布了13 篇原创文章 · 获赞 10 · 访问量 404

猜你喜欢

转载自blog.csdn.net/qq_41426449/article/details/104458358
今日推荐