用于订购time_t对象的C中的动态数据结构?

时间:2011-11-29 16:27:44

标签: c data-structures time pthreads

我需要使用pthreads向数据结构添加未知次数并最早排序,有人可以推荐一个好的结构(链表/数组列表)吗?

2 个答案:

答案 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

就内存而言,后者会占用更多内存,因为每个节点必须存储两个指针。