滚动历史记录的数据结构

时间:2011-03-05 03:02:50

标签: delphi data-structures

我有一个应用程序从外部数据源读取偏移值。这些偏移量是+ - 从中​​心点(nom = 0)。

我想保存这些偏移的最后一分钟并将它们显示在滚动图上。该图需要根据最后一分钟的数据自动调整其最小/最大值。

所以我可以看到这指向FIFO队列。

我正在使用Delphi 7,但是当尝试使用TQueue类时,我无法使用Peek()看到任何方式访问队列中的值(而只是队列的顶部)。

我的问题是否有更好的数据结构?

我需要存储60个浮点数,访问所有这些数字以显示在图表上,并确定队列中任何时间点的最大值。

1 个答案:

答案 0 :(得分:5)

警告:我不知道德尔福。但是在语言不可知的术语中,您可以维护某种具有适当大小的循环缓冲区。用数组返回它,让你的写指针循环遍历数组索引。如果缓冲区已填满,则从写指针开始读取,否则返回0。

要查找最小值/最大值,您可以执行以下操作:

  1. 天真的方法:每次重新计算最小值和最大值。上)。 (n = 60也不错。)
  2. 稍微好一点:只在弹出最小值或最大值时重新计算最小值和最大值。 (当然你也需要为每次推送更新它。)O(n)。
  3. 渐近良好:将您的值保存在自平衡二叉搜索树中。当您从缓冲区弹出时,在推入循环缓冲区时插入树中并从树中删除。 O(log n)。