顺序表、单链表、双链表的差异

顺序表由于顺序存放,拿到查找的值就能拿到查找值的上一个和下一个值,即可以直接返回查找的值的位置(索引号)。

单链表在查找的时候无论是按值还是按节点查找,就算拿到了那个节点或值,只能得到下一个节点的位置,而无法得到上一个节点的位置,即无法修改上一个节点的位置,因此只能循环遍历。

双链表如果按照值搜索的话,通过值是无法拿到上一个节点和下一个节点的位置的,而如果按照节点删除的话,能直接拿到上一个节点和下一个节点的位置,就能达到O(1)的操作。

删除和增加的前提都是查找,这样看貌似链表的查找要慢很多,那为什么还提倡用链表进行删除和插入操作呢?其实很简单,因为我们在顺序表查找的时候虽然是O(1)时间,但是我们在删除和增加的时候还需要移动删除值的后面所有元素,移动插入值的后面的所有值,这样空间上的时间会造成极大的浪费。

好了,那这样看双链表貌似更加完美,但是我们忽略了一个很重要的点,双链表的节点造出来是要花很大的内存代价的,他的每个节点都有两个指针,而一旦数据大了他的指针数过多,每个指针还占有8个字节数,那么他在很大程度上其实是不如单链表好的。(有兴趣的同学自己深入研究)

做个总结吧。如果我们对一组数据仅仅做查找操作,那么顺序表一定是最好不过的,但是如果我们涉及到删除和插入操作的时候,这个时候就不得不牺牲一点空间换取时间了,毕竟算法就是在时间和空间上权衡。

猜你喜欢

转载自www.cnblogs.com/chenyoude/p/9898779.html