Stack/Queue与Vector/List的联系

来源:互联网 发布:足彩数据分析 编辑:程序博客网 时间:2024/05/22 14:04

Vector:(顺序表【数组存储】)

1.当申请的空间不足的时候,需要再次开辟一块更大的空间,并把值拷过去。

2.对于尾删和尾插是比较方便的,只需要改动最后一个元素即可。不会改动原有的空间。适用于多次重复的对尾部插删。

3.顺序存储,地址是连续的。

4.头插和头删都需要移动一定的大小。时间复杂度为o(N)。而链表只需o(1)。

List:(链表)

1.需要每次都创建节点。

2.适用于头删尾插,但是不适用于多次重复的插删,因为每次都得创建节点,释放节点,消耗是比较大的。

3.非顺序存储,地址不连续。

4.由于节点之间地址是不连续的,所以会产生内存碎片问题。

如图:


List和Vector还有一个重要的点是:

Vector的CPU缓存利用率比链表高。

简单阐述一下:




那么,Vector/List与Stack/Queue有什么联系呢?

Stack:[栈](后进先出)


对于栈来说,后进先出,所以是对尾部进行插删操作,和Vector(尾插尾删较方便)是类似的。

Queue:[队列](先进先出)


对于队列来说,是先进先出的。所以,对头部删除,尾部插入是比较方便的,刚好和链表(List)是类似的。

一般情况下,我们会用Vector来模拟实现栈;用List来模拟实现队列。


1 0
原创粉丝点击