我需要使用pthreads向数据结构添加未知次数并最早排序,有人可以推荐一个好的结构(链表/数组列表)吗?
答案 0 :(得分:1)
链接列表将O(n)
用于查找新对象的位置,但在插入时会保持不变。
动态数组/数组列表将O(log(n))
找到正确的位置,但最坏情况O(n)
插入,因为您需要将所有值移过插入点一个。
如果您不需要随机访问,或者至少在结束之前,您可以使用堆O(log(n))
插入,在完成后,您可以在O(log(n))
中将它们拉出来,所以他们O(n*log(n))
。
并且可能有一个(可能是基于树的)结构可以在O(log(n))
(红黑树?)中完成所有这些。
因此,最终归结为你想要如何使用它。
修改:查看red-black trees,看起来他们O(log(n))
搜索(“分摊O(1)
”,根据维基百科),插入和删除,这可能就是你想。
答案 1 :(得分:1)
如果您只需要在最后订购,请使用链接列表来存储pthread,并保留添加的count
条记录。然后创建一个大小为count
的数组,将元素复制到新创建的数组中,并从列表中删除它们。
最后使用qsort对数组进行排序。
如果您需要维护有序的pthread列表,请使用heap
前一种方法具有以下复杂性
O(n) for Insert
O(nlog(n)) for Sorting
后一种方法会有
O(nlog(n)) for Insert and Fetching
您还可以看到priority queue
请注意,如果您使用STL,则可以使用STL priority_queue
就内存而言,后者会占用更多内存,因为每个节点必须存储两个指针。