随笔分类 -  算法与数据结构

树 - 定义和基本概念
摘要:一、树(Tree)是n(n>=0)个结点的有限集。n=0时称为空树。在任意一棵非空树中:(1)有且仅有一个特定的称为根(root)的结点。 (2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,....,Tm, 其中每一个集合本身又是一棵树,并且称为根的子树(SubTree),如 阅读全文

posted @ 2018-02-26 09:44 AlanTu 阅读(2837) 评论(0) 推荐(0) 编辑

字符串 - KMP模式匹配
摘要:在朴素的模式匹配算法中,主串的pos值(i)是不断地回溯来完成的(见字符串的基本操作中的Index函数)。而计算机的大仙们发现这种回溯其实可以是不需要的。既然i值不回溯,也就是不可以变小,那么考虑的变化就是子串的pos值(j)了。通过分析发现子串中如果有相等字符,j值的变化就会不相同,也就是说,这个 阅读全文

posted @ 2018-02-26 09:43 AlanTu 阅读(268) 评论(0) 推荐(0) 编辑

字符串 - 基本操作
摘要:字符串(string)是由0个或多个字符组成的有限序列。一般使用顺序存储结构,末尾以'\0'表示结束,但不计入字符串的长度。 示例程序:(改编自《大话数据结构》) C++ Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 阅读全文

posted @ 2018-02-26 09:41 AlanTu 阅读(481) 评论(0) 推荐(0) 编辑

队列 - 链式存储结构
摘要:队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已,我们把它简称为链队列。为了操作上的方便,我们将队头指针指向链队列的头节点,而队尾指针指向终端节点。空队列时,front和rear都指向头节点。 示例程序:(改变自《大话数据结构》) C++ Code 1 2 3 4 5 6 7 8 阅读全文

posted @ 2018-02-26 09:39 AlanTu 阅读(646) 评论(0) 推荐(0) 编辑

循环队列 - 顺序存储结构
摘要:队列(Queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。是一种先进先出的线性表(FIFO)。允许插入的一端称为队尾,允许删除的一端称为队头。我们在《栈的顺序存储结构》中发现,栈操作的top指针在Push时增大而在Pop时减小,栈空间是可以重复利用的,而队列的front、rear 阅读全文

posted @ 2018-02-26 09:37 AlanTu 阅读(1173) 评论(0) 推荐(0) 编辑

栈 - 链式存储结构
摘要:当单链表限定只能在头部进行插入和删除操作的时候,即为链栈,一般我们会将单链表的头指针和栈的栈顶指针top合二为一,通常对链栈来说,是不需要头节点的,因为我们维护了栈顶指针。对于链栈来说,基本不存在栈满的情况,除非内存已经没有可以使用的空间,对于空栈来说,链表原定义是头指针指向空,那么链栈的空其实就是 阅读全文

posted @ 2018-02-26 09:34 AlanTu 阅读(419) 评论(0) 推荐(0) 编辑

栈 - 顺序存储结构
摘要:栈(stack)是限定在表尾进行插入和删除操作的线性表。我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom) ,栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构。 示例程序:(改编自《大话数据结构》) C++ Code 1 2 3 4 5 6 阅读全文

posted @ 2018-02-26 09:32 AlanTu 阅读(236) 评论(0) 推荐(0) 编辑

两栈共享存储空间
摘要:数组有两个端点,两个栈有两个栈底,让一个栈的栈底为数组的始端,即下标为0处,另一个栈为栈的末端,即下标为数组长度 n-1处。这样,如果两个栈增加元素,就是两端点向中间延伸。当top1 + 1 == top2 的时候为栈满。 示例代码:(改编自《大话数据结构》) C++ Code 1 2 3 4 5 阅读全文

posted @ 2018-02-26 09:32 AlanTu 阅读(413) 评论(0) 推荐(0) 编辑

静态链表
摘要:首先我们让数组的元素都是由两个数据域组成,data和cur。也就是说,数组的每一个下标都对应一个data和一个cur。 数据域data用来存放数据元素,也就是通常我们要处理的数据;而游标cur相当于单链表中的next指针, 存放该元素的后继在数组中的下标。我们把这种用数组描述的链表叫做静态链表。 数 阅读全文

posted @ 2018-02-26 09:30 AlanTu 阅读(5647) 评论(0) 推荐(2) 编辑

线性表 - 链式存储结构
摘要:为了表示每个数据元素ai与其直接后继元素ai+1之间的逻辑关系,对数据ai,除了存储其自身的信息之外,还需存储一个指示其 直接后继的信息(即直接后继的存储位置)。这两部分信息组成数据元素ai的存储映像,称为结点(Node)。N个结点链结成一个链表, 即为线性表(a1,a2,...,an)的链式存储结 阅读全文

posted @ 2018-02-26 09:29 AlanTu 阅读(253) 评论(0) 推荐(0) 编辑

线性表 - 顺序存储结构
摘要:线性表的数据对象集合为 {a1,a2,....an},每个元素的类型均为Datatype。其中,除第一个元素a1外,每一个元素有且只有一个直接前驱元素,除了最后一个元素an外,每一个元素有且只有一个直接后继元素。数据元素之间的关系是一对一的关系。 线性表的顺序存储结构的优缺点: 优点:无须为表示表中 阅读全文

posted @ 2018-02-26 09:28 AlanTu 阅读(175) 评论(0) 推荐(0) 编辑

快速排序以及第k小元素的线性选择算法
摘要:简要介绍下快速排序的思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。时间复杂度为O(nlogn) 一.《data structure and 阅读全文

posted @ 2018-02-26 09:27 AlanTu 阅读(1661) 评论(0) 推荐(0) 编辑

并发无锁队列
摘要:并发无锁队列学习之一【开篇】 1、前言 队列在计算机中非常重要的一种数据结构,尤其在操作系统中。队列典型的特征是先进先出(FIFO),符合流水线业务流程。在进程间通信、网络通信之间经常采用队列做缓存,缓解数据处理压力。结合自己在工作中遇到的队列问题,总结一下对不同场景下的队列实现。根据操作队列的场景 阅读全文

posted @ 2018-02-25 13:13 AlanTu 阅读(25379) 评论(0) 推荐(1) 编辑

《算法导论》读书笔记(七)
摘要:《算法导论》读书笔记之第16章 贪心算法—活动选择问题 前言:贪心算法也是用来解决最优化问题,将一个问题分成子问题,在现在子问题最优解的时,选择当前看起来是最优的解,期望通过所做的局部最优选择来产生一个全局最优解。书中先从活动选择问题来引入贪心算法,分别采用动态规划方法和贪心算法进行分析。本篇笔记给 阅读全文

posted @ 2018-02-25 13:05 AlanTu 阅读(406) 评论(0) 推荐(0) 编辑

《算法导论》读书笔记(六)
摘要:《算法导论》读书笔记之第15章 动态规划—装配线调度 前言:动态规划的概念 动态规划(dynamic programming)是通过组合子问题的解而解决整个问题的。分治算法是指将问题划分为一些独立的子问题,递归的求解各个问题,然后合并子问题的解而得到原问题的解。例如归并排序,快速排序都是采用分治算法 阅读全文

posted @ 2018-02-25 13:02 AlanTu 阅读(301) 评论(0) 推荐(0) 编辑

数组的连续最大子段和
摘要:问题描述:输入是一个大小为n的整型数组,要求输出数组的任何连续子数组中的最大值。例如:输入的数组为array[10] = {31,-41,59,26,-53,58,97,-93,-23,84};输出最大连续子数组和为array[2...6]:187 算法1:对所有满足0<=i<=j<=n的(i,j) 阅读全文

posted @ 2018-02-25 12:56 AlanTu 阅读(377) 评论(0) 推荐(0) 编辑

《算法导论》读书笔记(五)
摘要:《算法导论》读书笔记之第12章 二叉查找树 摘要: 本章介绍了二叉查找树的概念及操作。主要内容包括二叉查找树的性质,如何在二叉查找树中查找最大值、最小值和给定的值,如何找出某一个元素的前驱和后继,如何在二叉查找树中进行插入和删除操作。在二叉查找树上执行这些基本操作的时间与树的高度成正比,一棵随机构造 阅读全文

posted @ 2018-02-25 12:55 AlanTu 阅读(379) 评论(0) 推荐(0) 编辑

《算法导论》读书笔记(四)
摘要:《算法导论》读书笔记之第10章 基本数据结构 摘要 本章介绍了几种基本的数据结构,包括栈、队列、链表以及有根树,讨论了使用指针的简单数据结构来表示动态集合。本章的内容对于学过数据结构的人来说,没有什么难处,简单的总结一下。 1、栈和队列 栈和队列都是动态集合,元素的出入是规定好的。栈规定元素是先进后 阅读全文

posted @ 2018-02-25 12:38 AlanTu 阅读(370) 评论(0) 推荐(0) 编辑

《算法导论》读书笔记(三)
摘要:《算法导论》读书笔记之第7章 快速排序 本章介绍了快速排序及其算法分析,快速排序采用的是分治算法思想,对包含n个数的输入数组,最坏情况下运行时间为θ(n^2),但是平均性能相当好,期望的运行时间为θ(nlgn)。另外快速排序能够就地排序(我理解是不需要引入额外的辅助空间,每次划分能确定一个元素的具体 阅读全文

posted @ 2018-02-25 12:29 AlanTu 阅读(356) 评论(0) 推荐(0) 编辑

《算法导论》读书笔记(二)
摘要:《算法导论》读书笔记之第6章 堆排序 本章开始介绍了堆的基本概念,然后引入最大堆和最小堆的概念。全章采用最大堆来介绍堆的操作,两个重要的操作是调整最大堆和创建最大堆,接着着两个操作引进了堆排序,最后介绍了采用堆实现优先级队列。 1、堆 堆给人的感觉是一个二叉树,但是其本质是一种数组对象,因为对堆进行 阅读全文

posted @ 2018-02-25 12:24 AlanTu 阅读(439) 评论(0) 推荐(0) 编辑

导航