数据结构与算法
文章平均质量分 79
Sagittarius_Warrior
这个作者很懒,什么都没留下…
展开
-
算法分析之基本公理
(Algorithm Analysis -- the baseaxiom)算法分析包括许多方面,最重要的是“determinethe running time of a program as a function of itsinputs”,即“时间复杂度”,它与输入有关。此外,算法分析的时候,还需要忽略硬件和操作系统的影响,为此,我们引入了“model”(模型)。按我的理解,所谓模式就是原创 2015-11-25 09:43:28 · 564 阅读 · 0 评论 -
Ownership of Container Object
本文主要记录我在学习Data Structures and Algorithms with Object-oriented Design Patterns in C++ 第五章《Data types and Abstraction》时关于容器及容器内元素的理解。同时,也截取了《An Introduction to Design Patterns in C++ with Qt》第六章部分关于Qt原创 2015-12-30 09:11:54 · 579 阅读 · 0 评论 -
数据结构之栈(三)
前面两篇文章介绍了Stack的结构、基本操作和两种实现方式,本文将探讨Stack的应用。Stack的最常见的应用是缓存和处理优先级,Queue也可以用于缓存和处理优先级,但两者的优先级处理方式不同。本文将以“算术表达式”的处理为例,展示Stack的魅力。一、Arithmetic Expression(点击打开链接) 数学中的算术表达式一般是这样的:原创 2016-02-19 10:31:36 · 386 阅读 · 0 评论 -
数据结构之栈(四)
本文将继续扩展Stack在Arithmetical Expression的处理方面的应用,其中包括:“Postfix2Prefix”、“Postfix2Infix”和“Infix2Postfix”。一、“Postfix2Prefix” 它是通过多次入栈和出栈来完成的。主要步骤是:遍历“postfix string”: 1)是算子先压栈;原创 2016-02-19 13:57:36 · 466 阅读 · 0 评论 -
数据结构之“Ordered List and Sorted List”(五)
前面四篇文章主要学习“Ordered List”,本文将学习另一种列表(list)—— “Sorted List”。一、“Sorted List”的特性和声明(点击打开链接) “Sorted List”与“Ordered List”类似,都是保存一系列元素的可搜索容器。不同的是, “Sorted List”中任一项的位置不是任意的,它的全部项都是按从小到大的顺序排列的原创 2016-03-07 13:53:57 · 696 阅读 · 0 评论 -
数据结构之队列(一)
本系列文章主要学习“队列”这种数据结构的基本操作、实现方式、应用和扩展(双端队列)。其中,本文将介绍队列这种数据结构的特点和一种实现方式。一、Queue(点击打开链接) 前面学习的Stack是在“pile”的同一端添加或删除元素,是一种FILO型的线性表;而Queue是在“pile”的一端添加元素,在“pile”的另一端删除元素,是一种FIFO型的线性表,如下图。原创 2016-02-22 09:42:12 · 439 阅读 · 0 评论 -
数据结构之队列(二)
前一篇介绍了一种数组实现的队列,本文将介绍一种链表实现的队列,并进行简单的比较。一、QueueAsLinkedList(点击打开链接) 先看声明,链表实现的队列没有特定的成员,只有一个链表,如下:#pragma once#include "Queue.h"#include "LinkedList.h"using namespace FoundationalD原创 2016-02-22 10:16:45 · 389 阅读 · 0 评论 -
数据结构之“Ordered List and Sorted List”(六)
本文将学习“SortedList”的指针实现,并比较数组实现和指针实现的性能。一、SortedListAsLinkedList(点击打开链接) 如上图,SortedListAsLinkedList(SortedList的指针实现)也采用的是多继承,其中接口继承自SortedList,实现继承自ListAsLinkedList。声明如下:#pra原创 2016-03-08 09:39:36 · 547 阅读 · 0 评论 -
数据结构之队列(三)
本文将介绍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 阅读 · 0 评论 -
抽象数据类型之容器(三)
本篇主要谈容器与其元素之间的关系,具体包括两个概念:托管容器与非托管容器,容器元素的所有权。一、托管容器与非托管容器(点击打开链接) 英文原文是“Direct Container vs. Indirect Container”,英文中的“direct”有“直接的,直系的和指挥管理等含义”,在此取其形容词含义“直系的”,同时根据Qt一书中的翻译为“托管的”更贴切,意思是原创 2016-02-17 11:16:56 · 517 阅读 · 0 评论 -
数据结构之“Ordered List and Sorted List”(七)
本文主要学习“Sorted List”的应用—— 多项式相加(the addition of two polynomials,点击打开链接)。一、多项式相加的计算机表示 前面学习“Ordered List”的应用的时候,我们学到用“a sequence of ordered pairs”来表示一个多项式。如下: 然后,用“Ordered Li原创 2016-03-09 14:19:01 · 599 阅读 · 0 评论 -
数据结构之队列(四)
本文将学习“双端队列”及其实现,并探讨两种继承路线——“Generalization”和“Specialization”。(点击打开链接)一、双端队列及其基本操作 前面几篇文章学习的“Queue”都是在一端添加元素,在另一端删除元素。本文要介绍的“Deque”(Double-end queue,双端队列)是一种可以在“pile”的两端都进行添加和删除操作的数据结构,是原创 2016-02-24 14:03:21 · 400 阅读 · 0 评论 -
数据结构之队列(五)
本文将学习“Deque”的两种实现——“DequeAsArray”和“DequeAsLinkedList”。一、DequeAsArray(点击打开链接) 为了提高代码复用,这里采用的是多继承的方式来实现,如下:#pragma once#include "Deque.h"#include "QueueAsArray.h"class DequeAsArray原创 2016-02-24 17:04:34 · 369 阅读 · 0 评论 -
数据结构之队列(六)
本文接上一篇,主要介绍“Deque”的另一种更高效的实现——DequeAsDoublyLinkedList。一、操作效率之比 前一篇中学到的DequeAsLinkedList,它的底层是采用的是单链表(点击打开链接)。单链表的特点是:“它只有一个指针域,指向后继者”,只能从前向后遍历,不能从后向前遍历。故删除head元素比较简单,直接删除指向的元素,并移动head指针原创 2016-02-25 16:12:30 · 363 阅读 · 0 评论 -
32位的整型数拆分为两个浮点数的方法
在数字信号处理领域,常常需要将基带采集的AD数据传送到PC,并进行相应的处理和数据可视化。在基带,特别是FPGA中,一般不采用浮点运算,故基带会用一个unsigned long来表示一对IQ数据,其中高16位表示I路,低16位表示Q路。基带将这样的一堆usigned long传递给上位机后,上位机需要将它们拆分位两个浮点型的数组来存储。这个拆分可以用如下的一个函数来完成:void ULONG2原创 2016-04-23 09:19:46 · 2438 阅读 · 0 评论 -
八大排序算法总结
本文主要转载两位网友的总结,如下:各种排序(简易版)八大排序算法(提升版)转载 2016-04-24 14:21:11 · 447 阅读 · 0 评论 -
数据结构之“Ordered List and Sorted List”(四)
本文主要介绍“Ordered List”的一种应用——“多项式求导”。(点击打开链接)一、名字介绍 本文的数学公式比较多,我就不在博客中编公式了,在此简单列一下几个高数名词。 polynomial —— 多项式 coefficient —— 系数 exponent —— 指数转载 2016-03-04 15:38:11 · 662 阅读 · 0 评论 -
数据结构之“Ordered List and Sorted List”(三)
本篇将给出两份测试代码,测试上一篇的两个实现列表。此外,也将比较两种实现的优缺点。一、测试代码1,测试数组实现 // test for ListAsArray { ListAsArray list1(10); Int pArray[] = { Int(1), Int(2), Int(3), Int(4), Int(5) };原创 2016-03-04 15:17:54 · 493 阅读 · 0 评论 -
《数据结构与算法》学习之入门篇
To develop a solid understanding ofa data structure requires three things: First, you must learn howthe information is arranged in the memory of the computer. Second,you must become familiar with t原创 2015-11-25 09:43:25 · 511 阅读 · 0 评论 -
抽象数据类型之容器(四)
本文将继续学习容器的特性:容器元素的关联性和容器元素的索引。一、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 阅读 · 0 评论 -
基础数据结构之数组与链表(四)
本篇主要介绍“The Singly-Linked List with a sentinel”。它是单链表诸多变种类型中的一种,参考上一篇的图d。sentinel是一个空节点,始终占据链表的首位,并一直存在链表中(即使是空链表),它本身不存储数据。sentinel节点的设计,实际上是一种编程技巧,它可以简化链表的某些操作。比如,对Extract函数的简化。此外,该链表的尾节点的next指针不再指向N原创 2016-02-14 10:46:06 · 617 阅读 · 0 评论 -
基础数据结构之数组和链表(三)
前面两篇主要介绍基础数据结构中的数组及其变种,本篇开始学习另一个重要的基础数据结构——链表(Linked List)。链表有很很多种,主要可以分为单链表(Singly-Linked List)和双链表(Doubly-Linked List)以及循环链表(Circle Linked List)。本篇主要介绍单链表及其变种。一、结构设计 A singly-linked list is原创 2015-12-17 10:40:29 · 585 阅读 · 0 评论 -
基础数据结构之数组与链表(五)
本篇主要介绍一种重要的链表——“双向链表”(Doubly Linked Lists)。 双向链表,顾名思义,它既可以从head开始正向遍历链表,也可以从tail开始反向遍历链表。双向链表的节点包含两个指针,一个指向下一个节点(successor,同单链表),另一个指向前一个节点(predecessor),因此,也可以将它看作是两个迭代方向不同的叠在一起的单链表。如下图a。原创 2016-02-15 16:33:06 · 516 阅读 · 0 评论 -
抽象数据类型与类层次(一)
本系列文章主要学习抽象数据类型(Abstract Data Types)的基本知识和使用C++类层次(Class Hierarchy)来表示各种抽象数据类型。 本文主要介绍一些基本概念:抽象(Abstract)、ADTs、设计模式(Design Patterns)。然后再展示后面要用到的类层次图。一、抽象与抽象数据类型 抽象就是将物体的性质从具体原创 2016-02-16 10:04:59 · 1769 阅读 · 0 评论 -
抽象数据类型与类层次(二)
接上篇,本文主要介绍表征抽象数据类型的几个基础类,包括:Object类(the top of the class hierarchy)、NullObject和Wrapper。一、Object(点击打开链接) Object是类层次中最顶层的抽象类,除Ownership外,该体系中所有其它的类都派生自Object。这种设计的好处是:1)可以通过Object设定公共接口;2原创 2016-02-16 14:37:53 · 629 阅读 · 0 评论 -
抽象数据类型之容器(二)
前一篇主要介绍了容器类和Visitor Pattern,本篇将学习另一种与容器有关的重要的辅助类——Iterator,以及Iterator Pattern。一、迭代器(Iterator) Iterator是与容器伴生的辅助类,它提供一种逐个访问容器中元素的方法抽象,跨越了容器的具体类型(数组、链表等),也有人说它是一种广义指针。类Iterator的接口定义如下:#ifnd原创 2016-02-17 10:29:50 · 466 阅读 · 0 评论 -
基础数据结构之数组与链表(二)
本文主要学习数组的一个变种——多维数组(Multi-Dimensional Arrays)。一、多维数组A multi-dimensional array of dimension n (i.e., an n-dimensional array or simply n-D array) is a collection of items which is accessed via n原创 2015-12-18 13:25:53 · 515 阅读 · 0 评论 -
基础数据结构之数组与链表(一)
本系列文章将主要介绍两种“基础数据结构”——数组和链表,及其变种。(参考教材:Foundational Data Structures) 数组与链表是两种最基本的数据结构。 在《数据结构与算法》的学习中,我们将遇到多种"Abstract Data Types (ADTs)",包括:stacks, queues, deques, ordered lists, s原创 2015-12-16 16:13:20 · 666 阅读 · 0 评论 -
数据结构之栈(一)
本系列文章将学习一种常见的数据结构——Stack,具体内容包括:Stack基类、StackAsArray、StackAsLinkedList以及Stack的应用(计算infix expression)。一、栈(stack) 栈(也可翻译为堆叠)是一种LIFO(for last in, first out)的元素集合体。栈支持两种基本的操作:push——将新元素加入到栈原创 2016-02-18 10:34:50 · 502 阅读 · 0 评论 -
抽象数据类型之容器(一)
本系列文章基于我之前的“抽象数据类型与类层次”系列,专门讲解“抽象容器”及其相关概念。(点击打开链接)一、容器类 根据上面的类层次图,容器也是一种“Object”。容器是一种能够存储其他物体的物体。下面使用一个容器类来抽象容器这个概念。#pragma once#include "Object.h"#include "OwnerShip.h"#incl原创 2016-02-17 10:10:03 · 635 阅读 · 0 评论 -
数据结构之栈(二)
本文主要讲解“StackAsLinkedList”,即用链表来实现栈。链表在物理上(内存)是离散的,在逻辑上是连续的,而栈是连续的,故用链表来实现栈,利用的是它逻辑上的连续性。一、声明#pragma once#include "Stack.h"#include "LinkedList.h"using namespace FoundationalDataStructure;原创 2016-02-18 10:57:31 · 400 阅读 · 0 评论 -
数据结构之“Ordered List and Sorted List”(一)
本系列文章将学习我们生活中最常用也最简单的一种数据结构——List(列表,点击打开链接)。List就是一个元素项(items)序列,支持“添加”、“删除”和“访问元素”等操作。本系列文章主要学习两种List——Ordered List(有序列表)和Sorted List(排序列表)。一、区分概念 这两种List从字面上看,容易让人混淆,我举几个实际生活中的例子两展示它们之间的原创 2016-03-04 14:45:17 · 2011 阅读 · 0 评论 -
数据结构之“Ordered List and Sorted List”(二)
本文主要学习“Ordered List”的两种实现——“ListAsArray”(基于动态数组:点击打开链接)和“ListAsLinkedList”(基于指针)。一、“ListAsArray”(点击打开链接) 基于数组的List,有大小限制。#pragma once#include "List.h"#include "DynamicArray.h"using原创 2016-03-04 14:57:33 · 641 阅读 · 0 评论 -
快速入门“正则表达式”
目录导读正则表达式的设计哲学设计哲学一:设计哲学二:设计哲学三:设计哲学四:正则表达式规则树正则表达式速查导读 像大多数的数学表达式一样,正则表达式也是一个中很“反人性”的表达式,相信很多人看正则表达式跟看天书一样,即使学习和使用过正则表达式,也很快就忘了它的规则。而本文的目的就是让普通人能够轻松快速地了解正则表达式,并把握正则表达式的设计哲学,不会那么容易就忘记。 注意,为简单起见,本...原创 2018-11-09 13:44:45 · 738 阅读 · 0 评论