1.. 集合的应用 集合可以用来去重 集合可以用于进行客户的统计 集合可以用于文本词汇量的统计   2.. 集合的实现 定义集合的接口 Set<E> ·void add(E) // 不能添加重复元素 ·void remove(E) ·boolean contains(E) ·int getSize() ·boolean isEmpty() 集合接口的业务逻辑如下: public interface Set<E> { void add(E e); void remove(…
      1.. 栈的特点: 栈也是一种线性结构: 相比数组,栈所对应的操作是数组的子集: 栈只能从一端添加元素,也只能从这一端取出元素,这一端通常称之为"栈顶": 向栈中添加元素的过程,称之为"入栈",从栈中取出元素的过程称之为"出栈": 栈的形象化描述如下图: "入栈"的顺序若为1-2-3-4,那么出栈的顺序只能为4-3-2-1,即,栈是一种"后进先出"(Last In First Out)的数据结构…
      1.. 优先队列(Priority Queue) 优先队列与普通队列的区别:普通队列遵循先进先出的原则:优先队列的出队顺序与入队顺序无关,与优先级相关. 优先队列可以使用队列的接口,只是在实现接口时,与普通队列有两处区别,一处在于优先队列出队的元素应该是优先级最高的元素,另一处在于队首元素也是优先级最高的元素. 优先队列也可以使用不同的底层实现,不同底层实现的时间复杂度如下: 从上图可以看出,使用"堆"这种数据结构来实现优先队列是比较高效的. 2.. 二叉堆(Binary…
      1.. 二叉树 跟链表一样,二叉树也是一种动态数据结构,即,不需要在创建时指定大小. 跟链表不同的是,二叉树中的每个节点,除了要存放元素e,它还有两个指向其它节点的引用,分别用Node left和Node right来表示. 类似的,如果每个节点中有3个指向其它节点的引用,就称其为"三叉树"... 二叉树具有唯一的根节点. 二叉树中每个节点最多指向其它的两个节点,我们称这两个节点为"左孩子"和"右孩子",即每个节点最多有两个孩子. 一…
      1.. 链表的重要性 我们之前实现的动态数组.栈.队列,底层都是依托静态数组,靠resize来解决固定容量的问题,而"链表"则是一种真正的动态数据结构,不需要处理固定容量的问题: 链表是最简单的动态数据结构: 学习链表有助于更深入的理解"引用"(或指针): 学习链表有助于更深入的理解"递归": 链表可以用来辅助组成其他数据结构: 2.. 链表基础 数据存储在"节点"(Node)中: 链表的形象化解释如下图: 链表的…
      1.. 队列基础 队列也是一种线性结构: 相比数组,队列所对应的操作数是队列的子集: 队列只允许从一端(队尾)添加元素,从另一端(队首)取出元素: 队列的形象化描述如下图: 队列是一种先进先出(First In First Out)的数据结构: 2.. 队列的实现 任务目标如下: Queue<E> ·void enqueue(E) //入队 ·E dequeue() //出队 ·E getFront() //查看队首元素 ·int getSize() //查看队列中元素的个数 ·b…
      1.. 线段树引入 线段树也称为区间树 为什么要使用线段树:对于某些问题,我们只关心区间(线段) 经典的线段树问题:区间染色,有一面长度为n的墙,每次选择一段墙进行染色(染色允许覆盖),问:经过m次操作后,可以看见多少种颜色?再进一步,经过m次操作后,在区间[i, j]中可以看到多少种颜色? 上面的问题涉及到了两种操作,即,染色操作(更新区间)和查询操作(查询区间),可以使用数组来对问题进行描述,这两种操作的时间复杂度如下: 由于通过数组来进行实现的时间复杂度达到了O(n)级别,因此…
近期有些人问我PCI设备驱动的问题, 和他们交流过后, 我建议他们先看一看<<The Windows NT Device Driver Book>>这本书, 个人感觉, 这本书写得很连贯流畅. PCI设备驱动基本包含了PCI的资源获取, 配置空间的读写, 中断的处理, 中断后半部在DPC中的处理. 同一时候, 也必须了解DMA, ScatterGater, MapRegister, Common Buffer等基础. 1.1 PCI设备资源获取 PCI设备的资源是系统依据设备的属性…
1.. 并查集的应用场景 查看"网络"中节点的连接状态,这里的网络是广义上的网络 数学中的集合类的实现   2.. 并查集所支持的操作 对于一组数据,并查集主要支持两种操作:合并两个数据.判断两个数据是否属于同一集合(两个数据是否连接)   3.. 定义并查集的接口 并查集的接口业务逻辑如下: public interface UF { int getSize(); boolean isConnected(int p, int q); void unionElements(int p,…
前言 之前写过几篇关于TreeWidget的文章,不过不方便查阅,特此重新整合作为总结.不过关于QtDesigner画图,还是不重新写了,看 第一篇 就OK. 准备工作 1. 用QtDesigner画一个QTreeWidget 2. 自己事先确定好层次与列的类型. QtreeWidget的展开层次类定义. # 节点类型的枚举类型 class TreeItemType(Enum): itGroupItem = 1001 # 群组 itMemberItem = 1002 # 成员 QTreeWidg…