自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 资源 (1)
  • 收藏
  • 关注

原创 数据结构之队列(六)

本文接上一篇,主要介绍“Deque”的另一种更高效的实现——DequeAsDoublyLinkedList。一、操作效率之比        前一篇中学到的DequeAsLinkedList,它的底层是采用的是单链表(点击打开链接)。单链表的特点是:“它只有一个指针域,指向后继者”,只能从前向后遍历,不能从后向前遍历。故删除head元素比较简单,直接删除指向的元素,并移动head指针

2016-02-25 16:12:30 363

原创 数据结构之队列(五)

本文将学习“Deque”的两种实现——“DequeAsArray”和“DequeAsLinkedList”。一、DequeAsArray(点击打开链接)        为了提高代码复用,这里采用的是多继承的方式来实现,如下:#pragma once#include "Deque.h"#include "QueueAsArray.h"class DequeAsArray

2016-02-24 17:04:34 369

原创 数据结构之队列(四)

本文将学习“双端队列”及其实现,并探讨两种继承路线——“Generalization”和“Specialization”。(点击打开链接)一、双端队列及其基本操作        前面几篇文章学习的“Queue”都是在一端添加元素,在另一端删除元素。本文要介绍的“Deque”(Double-end queue,双端队列)是一种可以在“pile”的两端都进行添加和删除操作的数据结构,是

2016-02-24 14:03:21 400

原创 数据结构之队列(三)

本文将介绍Queue的应用——N-ary Tree(n叉树)的“Breadth-first Traversal”。一、树的结构        A tree is comprised of nodes  (indicated by the circles) and edges  (shown as arrows between nodes). We say that the edge

2016-02-23 09:32:25 465

原创 数据结构之队列(二)

前一篇介绍了一种数组实现的队列,本文将介绍一种链表实现的队列,并进行简单的比较。一、QueueAsLinkedList(点击打开链接)        先看声明,链表实现的队列没有特定的成员,只有一个链表,如下:#pragma once#include "Queue.h"#include "LinkedList.h"using namespace FoundationalD

2016-02-22 10:16:45 389

原创 数据结构之队列(一)

本系列文章主要学习“队列”这种数据结构的基本操作、实现方式、应用和扩展(双端队列)。其中,本文将介绍队列这种数据结构的特点和一种实现方式。一、Queue(点击打开链接)        前面学习的Stack是在“pile”的同一端添加或删除元素,是一种FILO型的线性表;而Queue是在“pile”的一端添加元素,在“pile”的另一端删除元素,是一种FIFO型的线性表,如下图。

2016-02-22 09:42:12 439

原创 数据结构之栈(四)

本文将继续扩展Stack在Arithmetical Expression的处理方面的应用,其中包括:“Postfix2Prefix”、“Postfix2Infix”和“Infix2Postfix”。一、“Postfix2Prefix”        它是通过多次入栈和出栈来完成的。主要步骤是:遍历“postfix string”:        1)是算子先压栈;     

2016-02-19 13:57:36 466

原创 数据结构之栈(三)

前面两篇文章介绍了Stack的结构、基本操作和两种实现方式,本文将探讨Stack的应用。Stack的最常见的应用是缓存和处理优先级,Queue也可以用于缓存和处理优先级,但两者的优先级处理方式不同。本文将以“算术表达式”的处理为例,展示Stack的魅力。一、Arithmetic Expression(点击打开链接)        数学中的算术表达式一般是这样的:

2016-02-19 10:31:36 386

原创 数据结构之栈(二)

本文主要讲解“StackAsLinkedList”,即用链表来实现栈。链表在物理上(内存)是离散的,在逻辑上是连续的,而栈是连续的,故用链表来实现栈,利用的是它逻辑上的连续性。一、声明#pragma once#include "Stack.h"#include "LinkedList.h"using namespace FoundationalDataStructure;

2016-02-18 10:57:31 400

原创 数据结构之栈(一)

本系列文章将学习一种常见的数据结构——Stack,具体内容包括:Stack基类、StackAsArray、StackAsLinkedList以及Stack的应用(计算infix expression)。一、栈(stack)        栈(也可翻译为堆叠)是一种LIFO(for last in, first out)的元素集合体。栈支持两种基本的操作:push——将新元素加入到栈

2016-02-18 10:34:50 502

原创 抽象数据类型之容器(四)

本文将继续学习容器的特性:容器元素的关联性和容器元素的索引。一、Associations(点击打开链接)        An association is an ordered pair of objects. The first element of the pair is called the key ; the second element is the value  ass

2016-02-17 14:02:46 444

原创 抽象数据类型之容器(三)

本篇主要谈容器与其元素之间的关系,具体包括两个概念:托管容器与非托管容器,容器元素的所有权。一、托管容器与非托管容器(点击打开链接)        英文原文是“Direct Container vs. Indirect Container”,英文中的“direct”有“直接的,直系的和指挥管理等含义”,在此取其形容词含义“直系的”,同时根据Qt一书中的翻译为“托管的”更贴切,意思是

2016-02-17 11:16:56 517

原创 抽象数据类型之容器(二)

前一篇主要介绍了容器类和Visitor Pattern,本篇将学习另一种与容器有关的重要的辅助类——Iterator,以及Iterator Pattern。一、迭代器(Iterator)        Iterator是与容器伴生的辅助类,它提供一种逐个访问容器中元素的方法抽象,跨越了容器的具体类型(数组、链表等),也有人说它是一种广义指针。类Iterator的接口定义如下:#ifnd

2016-02-17 10:29:50 466

原创 抽象数据类型之容器(一)

本系列文章基于我之前的“抽象数据类型与类层次”系列,专门讲解“抽象容器”及其相关概念。(点击打开链接)一、容器类            根据上面的类层次图,容器也是一种“Object”。容器是一种能够存储其他物体的物体。下面使用一个容器类来抽象容器这个概念。#pragma once#include "Object.h"#include "OwnerShip.h"#incl

2016-02-17 10:10:03 635

原创 抽象数据类型与类层次(二)

接上篇,本文主要介绍表征抽象数据类型的几个基础类,包括:Object类(the top of the class hierarchy)、NullObject和Wrapper。一、Object(点击打开链接)        Object是类层次中最顶层的抽象类,除Ownership外,该体系中所有其它的类都派生自Object。这种设计的好处是:1)可以通过Object设定公共接口;2

2016-02-16 14:37:53 629

原创 抽象数据类型与类层次(一)

本系列文章主要学习抽象数据类型(Abstract Data Types)的基本知识和使用C++类层次(Class Hierarchy)来表示各种抽象数据类型。        本文主要介绍一些基本概念:抽象(Abstract)、ADTs、设计模式(Design Patterns)。然后再展示后面要用到的类层次图。一、抽象与抽象数据类型        抽象就是将物体的性质从具体

2016-02-16 10:04:59 1769

原创 基础数据结构之数组与链表(五)

本篇主要介绍一种重要的链表——“双向链表”(Doubly Linked Lists)。        双向链表,顾名思义,它既可以从head开始正向遍历链表,也可以从tail开始反向遍历链表。双向链表的节点包含两个指针,一个指向下一个节点(successor,同单链表),另一个指向前一个节点(predecessor),因此,也可以将它看作是两个迭代方向不同的叠在一起的单链表。如下图a。

2016-02-15 16:33:06 516

原创 基础数据结构之数组与链表(四)

本篇主要介绍“The Singly-Linked List with a sentinel”。它是单链表诸多变种类型中的一种,参考上一篇的图d。sentinel是一个空节点,始终占据链表的首位,并一直存在链表中(即使是空链表),它本身不存储数据。sentinel节点的设计,实际上是一种编程技巧,它可以简化链表的某些操作。比如,对Extract函数的简化。此外,该链表的尾节点的next指针不再指向N

2016-02-14 10:46:06 617

《Windows驱动开发技术详解》源码

《Windows驱动开发技术详解》一书的源码,包括:DDK 编译版本和VC 版本。

2019-02-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除