自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 剑指Offer算法题之已知两种遍历方式重建二叉树--面试题6:重建二叉树

直接上题目 本题所构建的二叉树如下图 -本文已知二叉树的前序遍历和中序遍历,在二叉树的前序遍历序列中,第一个数字总是树的根结点的值。但在中序遍历序列中,根结点的值再序列的中间,所以 左子树的结点的值位于根结点的值得左边,而右子树的结点的值位于根结点的值得右边。因此可知,我们需要扫描一遍中序遍历,找到根结点。如下图可知,前序遍历序列的第一个数字1就是根结点,进过扫描中序遍历后找到根结点1所在位置。因此

2017-07-31 22:10:32 586

原创 剑指offer算法题之单链表的删除结点操作--面试题13:在O(1)时间删除链表结点

题目如下: - 常见删除链表结点的顺序遍历法 单链表最常见的删除结点操作:就是从链表的头结点开始,顺序遍历查找要删除的结点,找到该结点后删除即可。 如下图(a)所示链表中,我们想删除链表结点i,可以从链表的头结点a开始顺序遍历 ,发现h结点的m_pNext指针指向的结点就是i结点,于是我们可以安全的删除结点i,把指针指向下一个结点j。指针调整之后我们就可以安全的删除结点i,并保证链表没有断开,

2017-07-30 22:17:10 445

原创 剑指offer算法题之单链表的反转--面试题16:反转链表

题目如下: 本题分析第一步: 反转结点指针 一般解决与链表相关问题总是涉及到大量的指针操作,这时候代码中很容易出错。为了正确地反转一个链表,需要调整链表中指针的方向。因此我们借助图形来直观的分析本题指针的变化过程。如下图所示,(a )图中的h, i , j 是三个相邻的结点。假设进过之前的反转操作,h结点之前的指针调整完毕,可见,前面的所有结点的m_pNext指针都指向前面一个结点。接下来要做分

2017-07-28 23:35:46 701

原创 C++之迭代器(Iterator)篇

迭代器(Iterator)的介绍 背景:指针可以用来遍历存储空间连续的数据结构,但是对于存储空间费连续的,就需要寻找一个行为类似指针的类,来对非数组的数据结构进行遍历。 定义:迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。 迭代器(Iterator)是指针(pointer)的泛化,它允许程序员用相同的方式处理不同的数据结构(容器)。 (1)迭代器类似于C语言里面的指针类

2017-07-28 10:52:21 39065 10

原创 剑指offer算法题之循环链表--约瑟夫问题,面试题45:圆圈中最后剩下的数字(补充:define和typedef)

题目如下: 分析本题思路: 本题的原型就是约瑟夫环问题,有两种解决方法:第一种方法是用环形链表模拟圆圈的经典解法,第二种方法是分析每次被删除的数字的规律并直接计算出1圆圈中最后剩下的数字。本篇文章主要分析第一种解题方法。经典的解法:用环形链表模拟圆圈 既然题目中有一个数字圆圈,很自然的想法就是用环形链表来模拟这个圆圈。我们可以创建一个共有n个结点的环形链表,然后每次在这个链表中删除第m个结点。

2017-07-27 23:56:31 581

原创 数据结构与算法分析之单链表的建立,插入和删除操作。

序言 单链表:当一个序列中只含有指向它的后继结点的链接时,就称该链表为单链表。具体形式如下图: 其中:data称为数据域,next称为指针域。在链表的最开头是头指针head,头指针顾名思义,不含有数据域;尾接点指向NULL的地方。注意,若head==NULL,为空表。 具体代码如下: 1、定义一个结构体,里面包含单链表的每个接点的数据域和指针域。 2、要注意指针域的定义方式。因为是指

2017-07-25 22:03:12 1888

原创 数据结构与算法分析之顺序存储结构的建立,插入和删除操作

绪论 线性表是最简单的一种数据结构,它可以用来描述:n个数据元素的优先序列。记为:L=(a1,a2,…..,an) 按照存储结构它又可以分为顺序存储结构和链式存储结构。而其中线性表的顺序存储结构是最简单最常用的数据结构。定义: 用一段连续地址依次存储表中的数据元素。性质: 顺序存储结构封装需要三个属性: 1.存储空间的起始位置,对于数组data来说,它的位置就是线性表存储空间的存储位置

2017-07-22 22:38:02 2307

转载 数据结构与算法分析之平衡二叉树的建立

平衡二叉树的概念: 平衡二叉树是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树。平衡二叉树又称AVL树。平衡二叉树的性质: 对于每个结点来说,它的左右子树的高度之差不能超过1,如果插入或者删除一个结点是的高度之差大于1,就要进行结点之间的旋转,将二叉树重新维持在一个平衡状态。下面会一步一步的讲解如何写平衡二叉树,重点是平衡二叉树的核心部分,也就是旋转算法。-第一步:创建节点信息 相

2017-07-18 22:41:57 844

原创 数据结构与算法分析--二叉排序树(二叉查找树,二叉搜索树)的查找、插入和删除操作

什么是二叉排序树 它表示一棵二叉树,并且包含以下性质: 1)可能是一棵空树 2)若不为空,那么其左子树结点的值都是小于根结点的值,右子树结点的值都是大于根结点的值 3)左右子树都是二叉树。对于二叉排序树功能的介绍 本文主要介绍的是二叉排序树的几种基本操作,包括查找、插入和删除操作。用到的二叉排序树如下图所示: 二叉排序树的建立二叉树结点的创建:typedef struct BiTNo

2017-07-18 11:26:24 4216 1

原创 数据结构与算法分析之二叉树的三种遍历方式。--前序遍历,中序遍历和后序遍历

在介绍二叉树的遍历算法之前,我们需要介绍一下二叉树以及遍历方式这些概念。二叉树:是树的一种特殊结构,在二叉树中每个结点最多只能有两个子节点。二叉树中最重要的操作就是遍历,通常二叉树的遍历方式有一下几种:前序遍历:先访问根结点,再访问左结点,最后访问右结点。如图示前序遍历顺序是:10、6、4、8、14、12、16。 中序遍历:先访问左结点,再访问根结点,最后访问右结点。如图所示中序遍历顺序是:4 、

2017-07-13 10:03:18 958

原创 树的存储结构之双亲孩子表示法

已知给出的树结构如下图:用代码实现方式如下:/*孩子表示法:浪费资源双亲孩子表示法:数组和链表的结合*//*1.双亲孩子表示法定义一个数结构,运用结构体指针的编程方式2.找到每个结构之间的联系,此套系统是倒序构建的*/#define MAX_TREE_SIZE 100//孩子结点typedef struct CTnode{ int child;

2017-07-12 21:41:34 3901

原创 剑指Offer算法题之设计模式的单例模式--面试题2:实现Singleton模式

提到单例模式,不得不稍微了解一下设计模式,所以首先介绍几种常见的设计模式。设计模式:它表示了一个特定环境、一类问题和一个解决方案之间的关系。每一个模式都描述了一个不断重复发生的问题,以及该问题解决方案的核心设计。常见设计模式介绍1. 单例模式的介绍(singleton)有些时候,允许自有创建某类的实例是会造成系统性能的下降。如果一个类始终只创建一个实例,则这个类就被称为单例类,这种模式就被称为单例模

2017-07-12 10:09:35 386

原创 剑指Offer算法题之字符串替换字符--面试题4:替换空格

替换空格题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.”。题目背景:在网络编程中,如果URL参数中含有特殊字符,如空格,可能导致服务器端无法获得正常的参数值。因此我们需要将这些特殊符号转换成服务器可以识别的字符。一般转换规则是在‘%’后面跟上ASCII码的十六进制的表示。例如空格就被替换成“%20”。题目

2017-07-11 15:08:27 736

空空如也

空空如也

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

TA关注的人

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