数据结构之队列(六)

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

2016-02-25 16:12:30

阅读数 236

评论数 0

数据结构之队列(五)

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

2016-02-24 17:04:34

阅读数 227

评论数 0

数据结构之队列(四)

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

2016-02-24 14:03:21

阅读数 233

评论数 0

数据结构之队列(三)

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

2016-02-23 09:32:25

阅读数 266

评论数 0

数据结构之队列(二)

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

2016-02-22 10:16:45

阅读数 265

评论数 0

数据结构之队列(一)

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

2016-02-22 09:42:12

阅读数 233

评论数 0

数据结构之栈(四)

本文将继续扩展Stack在Arithmetical Expression的处理方面的应用,其中包括:“Postfix2Prefix”、“Postfix2Infix”和“Infix2Postfix”。 一、“Postfix2Prefix”         它是通过多次入栈和出栈来完成的。...

2016-02-19 13:57:36

阅读数 262

评论数 0

数据结构之栈(三)

前面两篇文章介绍了Stack的结构、基本操作和两种实现方式,本文将探讨Stack的应用。Stack的最常见的应用是缓存和处理优先级,Queue也可以用于缓存和处理优先级,但两者的优先级处理方式不同。本文将以“算术表达式”的处理为例,展示Stack的魅力。 一、Arithmetic Exp...

2016-02-19 10:31:36

阅读数 212

评论数 0

数据结构之栈(二)

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

2016-02-18 10:57:31

阅读数 245

评论数 0

数据结构之栈(一)

本系列文章将学习一种常见的数据结构——Stack,具体内容包括:Stack基类、StackAsArray、StackAsLinkedList以及Stack的应用(计算infix expression)。 一、栈(stack)         栈(也可翻译为堆叠)是一种LIFO(for ...

2016-02-18 10:34:50

阅读数 244

评论数 0

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

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

2016-02-17 14:02:46

阅读数 254

评论数 0

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

本篇主要谈容器与其元素之间的关系,具体包括两个概念:托管容器与非托管容器,容器元素的所有权。 一、托管容器与非托管容器(点击打开链接)         英文原文是“Direct Container vs. Indirect Container”,英文中的“direct”有“直接的,直系的和指挥...

2016-02-17 11:16:56

阅读数 297

评论数 0

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

前一篇主要介绍了容器类和Visitor Pattern,本篇将学习另一种与容器有关的重要的辅助类——Iterator,以及Iterator Pattern。 一、迭代器(Iterator)         Iterator是与容器伴生的辅助类,它提供一种逐个访问容器中元素的方法抽象,跨越了容器...

2016-02-17 10:29:50

阅读数 260

评论数 0

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

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

2016-02-17 10:10:03

阅读数 333

评论数 0

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

接上篇,本文主要介绍表征抽象数据类型的几个基础类,包括:Object类(the top of the class hierarchy)、NullObject和Wrapper。 一、Object(点击打开链接)         Object是类层次中最顶层的抽象类,除Ownership外...

2016-02-16 14:37:53

阅读数 390

评论数 0

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

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

2016-02-16 10:04:59

阅读数 1123

评论数 0

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

本篇主要介绍一种重要的链表——“双向链表”(Doubly Linked Lists)。         双向链表,顾名思义,它既可以从head开始正向遍历链表,也可以从tail开始反向遍历链表。双向链表的节点包含两个指针,一个指向下一个节点(successor,同单链表),另一个指向前一个节点(p...

2016-02-15 16:33:06

阅读数 286

评论数 0

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

本篇主要介绍“The Singly-Linked List with a sentinel”。它是单链表诸多变种类型中的一种,参考上一篇的图d。sentinel是一个空节点,始终占据链表的首位,并一直存在链表中(即使是空链表),它本身不存储数据。sentinel节点的设计,实际上是一种编程技巧,它...

2016-02-14 10:46:06

阅读数 309

评论数 0

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