Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Data structures 适用于窗口系统的数据结构_Data Structures - Fatal编程技术网

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

Data structures 适用于窗口系统的数据结构,data-structures,Data Structures,我正在开发一个自定义窗口系统,该系统同时显示多个重叠窗口 有关窗口的重要数据包括其坐标(x-y坐标系中两个对角)、索引(索引值最低的一个显示在所有其他窗口的上方)及其内容 这些行动包括 点击(点击测试) 记录windows使用的历史记录 最近 调整大小 拖拉 最小化窗口(将索引更新为无穷大/最大值) 最大化窗口(将所有其他窗口索引值增加1) 我发现minheap可以用来跟踪以键为索引的窗口。树的节点可以包含其他信息,如x-y坐标和指向其内容的指针 历史记录可以通过双链接列表来完成 问题: 其他哪

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

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

这些行动包括

  • 点击(点击测试)
  • 记录windows使用的历史记录 最近
  • 调整大小
  • 拖拉
  • 最小化窗口(将索引更新为无穷大/最大值)
  • 最大化窗口(将所有其他窗口索引值增加1)
  • 我发现
    minheap
    可以用来跟踪以键为索引的窗口。树的节点可以包含其他信息,如x-y坐标和指向其内容的指针

    历史记录可以通过
    双链接列表来完成

    问题

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

  • 是否有任何数据结构可以单独解决此问题
  • 如果排除最小化/最大化操作,是否有任何数据结构可以有效地匹配
  • 有人知道windows是如何在windows系列、Linux等操作系统中跟踪的吗
    似乎使用最小堆在这里对您没有多大好处。它唯一真正有用的是告诉你哪个窗口在z顺序的顶部。它不能轻易地告诉你第二、第三等位置是什么

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

    请注意,这样做并不需要为每个windows的z顺序维护一个明确的数字。顺序在列表中是隐式的

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

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

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

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


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

    如何选择其他窗口?是否有最小化操作或您只需选择下一个窗口?在这种情况下,当前的顶部窗口去了哪里?我认为这个明显的解决方案没有什么错——拥有一个窗口数组,一个用于排序的引用数组,以及一个用于历史的标识符数组。