ADT列表实现与链表实现之间的(有效)差异是什么? 关于队列?
此外, 你能建议任何有这些类型列表的可视化例子的网站吗?
答案 0 :(得分:3)
真的很难理解这个问题,但是在试图询问实际问题是什么时,我相信已经弄明白了。所以我的假设是,问题是:“std :: list和std :: queue之间的区别是什么。@fatai:当我错的时候请纠正我。
std :: list是一个双向链表。列表的每个元素“知道”下一个和前一个元素。列表“知道”它的开始和结束。看这里:http://www.cplusplus.com/reference/stl/list/
std :: queue是一个具有特殊功能的列表。此功能允许您轻松地在前面插入元素,并从后面删除元素。看看这里: http://www.cplusplus.com/reference/stl/queue/
如果你想拥有最少的功能,我会使用队列。队列针对其目的进行了优化。它还可以防止您意外地做错事(例如从中间删除元素)。
我希望能回答你的(令人困惑的)问题。 ; - )
答案 1 :(得分:0)
使用迭代器擦除并插入到列表中间具有O(n)复杂度,因为在后台它必须移动所有其他元素。 (使用向量ADT的特殊模型,但你甚至无法访问带索引机制的列表元素。)
在链表中,擦除和插入列表具有O(1)复杂度。它不需要移动操作的元素。即使在链表中搜索元素也具有O(n)复杂度,如列表ADT。