适用于窗口系统的数据结构



我正在开发一个自定义窗口系统,该系统同时显示多个重叠的窗口。

关于窗口的重要数据包括其坐标(x-y坐标系中对角的两个角)、索引(索引值最低的一个显示在所有其他窗口之上)及其内容。

操作包括

  1. 点击(点击测试)
  2. 记录使用过的窗口的历史记录最近
  3. 调整大小
  4. 拖动
  5. 最小化窗口(将索引更新为无穷大/最高值)
  6. 最大化窗口(将所有其他窗口索引值增加1)

我已经发现Min-heap可以用来跟踪以关键字为索引的窗口。树的节点可以包括其他信息,如x-y坐标和指向其内容的指针。

历史记录可以用Doubly Linked Lists来完成。

问题

哪种其他数据结构适用于此问题?

  1. 有什么数据结构可以单独解决这个问题吗
  2. 如果排除了最小化/最大化操作,是否有有效的数据结构
  3. 有人知道windows家族、Linux等操作系统是如何跟踪windows的吗

在这里使用最小堆似乎没有多大好处。它唯一真正有用的地方是告诉你哪个窗口在z顺序的顶部。它不能轻易地告诉你什么在第二、第三等位置。

我认为您应该使用窗口的链接列表,最上面的窗口是第一个节点,最下面的窗口是最后一个节点。

请注意,这样做并不需要为每个窗口的z顺序保留一个显式数字。该顺序隐含在列表中。

命中测试是一个简单的问题,按顺序搜索列表。通过将窗口移动到列表的前面来最大化窗口。通过将窗口移动到列表的后面来最小化窗口。

对于日志记录历史,请使用单独的链接列表。

调整大小和拖动不需要特殊的数据结构。

如果要显示任务栏,则需要保留按创建顺序排列的窗口列表。否则,每次更改窗口的z顺序时,它在任务栏中的位置都会发生变化。那将是。。。令人困惑

我不建议尝试构建一个处理所有用例的单一数据结构。如果你这样做,那么如果你想改变一件事的工作方式,或者如果你想添加新的功能,你就有可能破坏其他一切。但是,如果您使用链表进行命中测试,并且您想更改历史记录的工作方式,则不会影响命中测试,因为它是一个单独的数据结构。

最新更新