由windows的Alt+Tab键联想到的数据结构
2011-11-13 12:04
253 查看
对windows的快捷键比较熟悉的人应该用过Alt+Tab吧。可以方便的切换各个任务程序。在win7下的效果更炫一点。按住Alt键不放,然后敲击Tab键,即可预览各个任务界面,以及切换到各个程序界面。那么这是如何实现的后台数据结构是如何设计的。
首先应该认真观察切换效果,假设有任务A,B,C,D,E。
(1)切换一次后变成B,A,C,D,E.在切换一次后又是A,B,C,D,E。
(2)切换两次后变成C,A,B,D,E.三次后变成D,A,B,C,E.
(3)切换五次后仍为A,B,C,D,E.
(4)切换七次后是C,A,B,D,E.
分析后发现其实就是一个特殊栈,栈顶是当前界面,然后从栈顶往下遍历(还可以循环上来),到哪个把哪个抽出来放到栈顶,作为当前界面。
由于涉及增删较多,数据结构可以选用链式存储,遍历到想要的节点,摘下放到头结点即可。由于切换循环,当然需要循环链表了。另外每开一个新的程序需要放到头结点。代码如下,大家只需关注核心两个函数就可以了。其余都是为了测试用的。
看完之后是否会感觉这个就像是操作系统中学到的内存LRU算法!不错,原理都是一样的。呵呵
首先应该认真观察切换效果,假设有任务A,B,C,D,E。
(1)切换一次后变成B,A,C,D,E.在切换一次后又是A,B,C,D,E。
(2)切换两次后变成C,A,B,D,E.三次后变成D,A,B,C,E.
(3)切换五次后仍为A,B,C,D,E.
(4)切换七次后是C,A,B,D,E.
分析后发现其实就是一个特殊栈,栈顶是当前界面,然后从栈顶往下遍历(还可以循环上来),到哪个把哪个抽出来放到栈顶,作为当前界面。
由于涉及增删较多,数据结构可以选用链式存储,遍历到想要的节点,摘下放到头结点即可。由于切换循环,当然需要循环链表了。另外每开一个新的程序需要放到头结点。代码如下,大家只需关注核心两个函数就可以了。其余都是为了测试用的。
#include<iostream> using namespace std; struct Node{ int data; Node* next; }; class Task{ public: Task(int data){ Node* node = new Node; node->data = data; node->next = node; used = node; now = node; last = node; } void open(int data){ Node* node = new Node; node->data = data; node->next = used; last->next = node; used = node; now = used; } /*核心*/ void press(){ //摁下Alt放得前提下,摁Tab键一次 pre = now; now = now->next; } void up(){ //放下Alt和Tab键 if(now == used){ } else if(now == last){ used = last; last = pre; now = used; }else{ pre->next = now->next; now->next = used; last->next = now; used = now; } }/*核心*/ void out(){ Node* p = used; cout << p->data << " "; while(p->next != used){ p = p->next; cout << p->data << " "; } cout << endl; } private: Node* used; Node* now; Node* pre; Node* last; }; int main(){ int count = 5; Task task(1); while(count--){ task.open(count); task.out(); } for(int j = 1; j < 10; j++){ for(int k = 0; k < j; k++){ task.press(); } task.up(); task.out(); } return 0; }
看完之后是否会感觉这个就像是操作系统中学到的内存LRU算法!不错,原理都是一样的。呵呵
相关文章推荐
- Windows 7 Home Basic 的任务栏缩略图预览和Alt+Tab缩略图平铺预览功能已足够了
- 屏蔽Win、Ctrl_ESC、Alt_Tab、Alt_F4等键(Windows XP、Windows 2003 Server下测试通过)
- [Windows 编程] 如何截获 Alt+Tab 事件
- 屏蔽Windows98/2000/XP任务栏、win键、Ctrl+Esc、Alt+Tab、Ctrl+Alt+Del
- [Windows 编程] 如何截获 Alt+Tab 事件
- [Windows 编程] 如何截获 Alt+Tab 事件
- 屏蔽Windows98/2000/XP任务栏、win键、Ctrl+Esc、Alt+Tab、Ctrl+Alt+Del
- 屏蔽Windows98/2000/XP任务栏、win键、Ctrl+Esc、Alt+Tab、Ctrl+Alt+Del
- 关闭Windows的CTRL+ALT+DEL 和 ALT+TAB组合键的方法
- FastTab 取代windows alt+tab 的快速软件
- 关闭Windows的CTRL+ALT+DEL 和 ALT+TAB组合键的方法
- 屏蔽Windows98/2000/XP任务栏、win键、Ctrl+Esc、Alt+Tab、Ctrl+Alt+Del
- 联想发布23寸IPS触控屏的Windows 8一体电脑
- 联想笔记本出厂预装Windows 8系统机型改装Windows 7系统的操作步骤及常见问题(转自联想官网)
- Windows7安装IIS中关于Windows 系列于谷歌Chrome系统争议一点联想
- KRBTabControl(中文)Windows选项卡控件
- windows上写python的tab键问题
- Windows下配置Python GUI的tab补齐功能
- [转]让窗体不显示在Alt+Tab中
- c# 隐藏窗口在ALT+TAB中