自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 平衡二叉树的最少最多节点数

对于高度为n的平衡二叉树:最少需h(n)个结点,做多需要2^n-1个结点。h(n)=h(n-1)+h(n-2)+1h(0)=0 h(1)=1 h(2)=2

2019-01-28 10:31:21 20436 5

原创 树、森林及二叉树之间的相互转换

一、树转换为二叉树1、在所有兄弟结点之间加一条连线。2、对树中每个结点,只保留它与第一子结点(从左到右数)的连线,删除它与其他孩子结点之间的连线。3、调整位置,使得结构关系清晰二、森林转换为二叉树1、把每棵树转换为二叉树。2、第一棵二叉树不动,从第二棵二叉树开始,依次把后一棵二叉树的根结点作为前一棵二叉树的根结点的右孩子,用线连接起来。三、二叉树转换为树/森林将以上步骤反向执行即可...

2019-01-28 09:40:54 188

原创 线索二叉树

如上图所示,在二叉树中,每一个结点都包含三个基本信息:结点自身的数据信息,结点指向左子节点和右子节点的指针。然而从空间利用率上说,对于非满二叉树,我们发现经常会有结点空指针的情况出现,造成大量的空间浪费,为了更高效地利用空间,提高运行效率,我们针对二叉树进行改进,提出了线索二叉树,即二叉树的线索化。图中为一个二叉树,其中用红色圆圈标注出来的都是结点的空指针线索二叉树的改进原理与方法通...

2019-01-25 00:18:12 195

原创 二叉树的前序遍历、中序遍历、后序遍历、层次遍历

一、前序遍历根节点->左子树->右子树二、中序遍历左子树->根节点->右子树三、后序遍历左子树->右子树->根节点四、层次遍历按照深度,以从上到下、从左到右的顺序进行遍历特殊情况分析:1、后序遍历序列与中序遍历序列相同说明该二叉树无右结点...

2019-01-24 22:27:28 1019

原创 二叉树的叶子结点数量计算

已知总结点数为NN为偶数:叶子节点为N/2N为奇数:叶子节点为N/2+1

2019-01-24 21:44:21 5475 1

原创 线索二叉树的线索

n个结点的二叉链表中含有n+1(2n-(n-1)=n+1)个空指针域。这些空指针域也叫做线索。

2019-01-24 21:16:24 1309

原创 循环队列和循环栈的队尾指针和队头指针指向位置的区别

循环队列:队头指针:指向队首元素的前一个位置队尾指针:指向队尾元素循环栈:队头指针:指向队首元素队尾指针:指向队尾元素的后一个位置...

2019-01-24 08:42:04 25505

原创 树的一些重要概念

节点的度:一个节点含有的子树的个数称为该节点的度;树的度:一棵树中,最大的节点的度称为树的度;叶节点或终端节点:度为零的节点;非终端节点或分支节点:度不为零的节点;父亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;兄弟节点:具有相同父节点的节点互称为兄弟节点;节点的层次:从根开始定义起,根为第1层...

2019-01-24 01:23:29 215

原创 链表带头结点和不带头结点的区别、优缺点

头结点:在单链表的第一个结点之前附加一个结点,称为头结点。(通常头结点的data域可以为空)。带头结点的优点:1、更快删除/插入第一个结点2、统一空表和非空表的处理...

2019-01-23 21:38:47 8651 3

转载 通过示意图理解各种链表的存储结构

2019-01-23 20:50:44 1371

原创 单链表和双链表的区别

一、方向不同单链表只有指向下一个结点的指针双链表既有指向下一个结点的指针,也有指向上一个结点的指针二、适用情况不同单向链表更适合元素的增加与删除双向链表更适合元素的查询工作三、读取不同单链表只能单向读取双链表可以双向读取...

2019-01-23 18:34:33 9612

原创 辨析前缀、中缀和后缀表达式

前缀表达式、中缀表达式、后缀表达式的区别在于运算符放的位置不同,可以通过下面一个简单例子来理解:前缀表达式:±/12345(运算符在操作数之前)中缀表达式:1+2-34/5(运算符在操作数中间)后缀表达式:12345±*/(运算符在操作数之后)...

2019-01-23 10:05:41 215

原创 堆和栈的区别

一、内存分配栈:系统自动分配,分为动态分配和静态分配,物理地址上连续的堆:由程序指令负责调配,只有静态分配,物理地址上是不连续的二、运行速度栈:运行速度较快堆:运行速度较慢...

2019-01-23 09:56:34 148

原创 已知入栈顺序,总结出栈顺序的规律

规律:出栈的每一个元素的后面,其中比该元素先入栈的一定按照入栈逆顺序排列。举例说明:已知入栈顺序: 1 2 3 4 5判断出栈顺序: 4 3 5 1 2结果:不合理,原因是出栈元素3之后有 5 1 2 这三个元素,其中1 2 是比3先入栈的,根据规律,这两个出栈的顺序必须和入栈顺序相反,也就是 2 1 出栈,不可能按照1 2 顺序出栈。已知入栈顺序: 1 2 3 4 5判断出栈顺序:...

2019-01-23 09:33:12 32449 2

原创 如何将字符进行Huffman编码

以alibaba为例:1、将每个字符在字符串中的出现频率进行从小到大统计:a:3 b:2 l:1 i:12、构建依据频率的带权重的二叉树:3、根据二叉树读出每个字符的Huffman码:a:0b:11l:100i:1014、将上面的Huffman码替换掉原来的alibaba:0100101110110...

2019-01-23 08:44:56 2415

转载 32位系统和64位系统各种数据类型占用的空间(字节数)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012611878/article/details/52455576 </div> <div id="content_views" class="markdown_

2019-01-21 22:50:59 6840

原创 广义表的head与tail计算

假设有广义表L=(A,B,C)则表头是A,表尾是(B,C)文字定义:当广义表L非空时,称第一个元素为L的表头;称广义表L中除去表头后其余元素组成的广义表为LS的表尾head(L)=A;tail(L)=(B,C);tail(tail(L))=(B,C);head(tail(tail(L)))=B;...

2019-01-21 22:20:43 11196 4

原创 字符串数组的几种输出方式以及注意点

假设我们需要输出 a[80] 和 b[80],可以采用以下输出方式:1、puts(a); puts(b);//puts()函数自带换行2、printf("%s,%s", a, b);//在printf函数中a和b不能加上中括号,此处表示的是数组首地址不能采用的输出方式:putchar(a, b);puts(a, b);//putchar和puts函数中不能使用多个参数...

2019-01-21 21:23:25 10690 1

转载 理解next数组的计算方式

i 0 1 2 3 4 5 6 7 8 9 10 11s a b a b a a a b a b a anext[i] -1 0 0 1 2 3 1 1 2 3 4 5先计算前缀next[i]的值:...

2019-01-21 20:52:30 3958 2

原创 关于堆排序的总结理解

本文将从相关预备知识、堆排序步骤、总结三方面阐述堆排序。一、预备知识:堆:一种树形序列,所有的堆都必须符合两个条件:(1)完全二叉树(2)父节点总是小于或大于子节点。图形表达和数字表达的转换:图一也写成12-8-10-6-4-7-9,图二也写成2-6-6-6-4-7-9二、堆排序步骤:(1)升序进行堆排序:(第一轮)不断调换相邻节点位置,直到父节点总是大于子节点。达成目的后,将首尾...

2019-01-21 18:24:04 1890 1

原创 四种存储结构

1、随机存储:可以直接根据下标(地址)访问到该元素。2、顺序存储:必须依次根据从前从后的顺序依次访问,访问A元素,需要经过A之前的元素。3、索引存储:建立索引表,根据索引表的地址提示进行访问。4、散列存储:建立散引表,根据散引表的地址进行访问。...

2019-01-21 16:25:13 9569

原创 线性结构与非线性结构辨析

线性结构:元素之间存在一一对应的关系,即除了首尾元素,其它元素的前后元素都是唯一的。非线性结构:每个元素都可能和0/1/多个元素之间对应,如二叉树,多维数组等。...

2019-01-21 15:53:07 1505

原创 判断循环队列的队空、队满以及队列中元素个数的计算

front表示队头指针(指向队列内首元素)rear表示队尾指针(指向队列内尾元素的下一个位置)m表示队列的容量队空:front=rear队满:front=(rear+1)%m队列内元素个数:(rear - front + m) % m...

2019-01-21 13:34:02 17885

原创 关于链表和数组常用操作的时间复杂度

数组:1、查找复杂度:O(1)2、添加/删除复杂度:O(n)链表:1、查找复杂度:O(n)2、添加/删除复杂度:O(1)

2019-01-21 13:18:20 6759 2

原创 链表和数组的区别

区别一:物理地址存储的连续性数组的元素在内存中是连续存放的。链表的元素在内存中不一定是连续存放的,通常是不连续的。区别二:访问速度数组的访问速度很快,因为数组可以根据数组可以根据下标进行快速定位。链表的访问速度较慢,因为链表访问元素需要移动指针。区别三:添加、删减元素速度数组的元素增删速度较慢,因为需要移动大量的元素。链表的元素增删速度较快,因为只需要修改指针即可。...

2019-01-20 01:20:50 6317

原创 行主序、列主序概念辨析以及基地址的含义

行主序:在数组中按照a[0][0]、a[0][1]、a[0][2]…a[1][0]、a[1][1]、a[1][2]…依次存储数据列主序:在数组中按照a[0][0]、a[1][0]、a[2][0]…a[0][1]、a[1][1]、a[2][1]…依次存储数据基地址:即数组首元素地址,数组的起始地址。...

2019-01-19 23:05:18 8089

原创 关于排序中的快速排序

记忆要点:从两头往中间搜索,右边找小,找到和基准数互换位置;左边找大,找到和基准数互换位置PS:右边先开始

2019-01-19 09:23:57 143

原创 线性表、顺序存储和链式存储的关系

线性表是一种逻辑结构顺序存储和链式存储是存储结构顺序表和链表两者比较:1、顺序表可以顺序存取/随机存取,链表只能顺序存取2、顺序表存储内容在物理储存地址上也相邻,链表通过指针指向,故链表不一定3、顺序表存取速度慢,查询速度快;链表存取速度快,查询速度慢。...

2019-01-18 09:05:53 1847

原创 如何理解三维数组

array[a][b][c]含义:可以理解为该数组有a页,每一页都有一个b行c列的二维数组

2019-01-14 04:03:29 6617 3

原创 链式存储与顺序存储的区别

一、存储地址链式存储:储存单位的地址不一定是连续的顺序存储:储存单位的地址必须是连续的二、存储空间利用率与分配链式存储:利用率低,动态分配顺序存储:利用率高,静态分配三、修改内容速度链式存储:修改速度快顺序存储:修改速度慢三、查询内容速度链式存储:查询速度慢顺序存储:查询速度快...

2019-01-14 02:53:41 7024 3

原创 Java中顺序栈和链栈的区别

顺序栈:定义底栈和顶栈的指针,以及存储空间的大小链栈:仅定义顶栈的执政。主要区别:一、空间分配顺序栈是静态空间,链栈是动态空间二、修改内容速度链栈的添加删除元素的速度更快三、查询速度顺序栈的内容查询的速度更快...

2019-01-13 22:16:40 3014

转载 collection中各类中数值是否可重复?

Collection(集合):容器,用于存放对象(引用类型。基本类型需要自动装箱)List(列表):元素有序,元素可以重复 (有索引)。 通过元素的equals()方法判断是否重复。Set(集):元素无序,不可重复 (没有索引)。 遍历只能用Iterator迭代器和增强for, 不能使用普通for遍历。ArrayList(数组列表): 查询快,增删慢。LinkedList(链表): 查询慢...

2019-01-12 19:55:26 2253

转载 Java输入输出流树状关系图

2019-01-12 19:33:23 728 1

原创 Java中方法重写的记忆要点和口诀

方法重写指的是在子类继承父类时,子类需要对父类的方法重新定义。重写需要遵循的规则可以总结为“两同两小一大原则”:一、两同方法名相同,参数类型相同二、两小子类返回类型小于等于父类方法返回类型子类抛出异常小于等于父类方法抛出异常三、一大子类访问权限大于等于父类方法访问权限...

2019-01-12 18:04:39 791 1

原创 Java中LinkedList和ArrayList的区别

LinkedList和ArrayList都是对List的实现,原理上区别是:ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。一、访问速度ArrayList快于LinkedList,因为LinkedList需要移动指针二、添加删除元素速度LinkedList快于ArrayList,因为ArrayList需要移动数据...

2019-01-12 18:02:02 1541

原创 Java中run()和start()的区别

run(),实质上是方法,作用是运行线程,无法开启新的线程start(),创建启动新的线程,可以实现多线程工作。通过start()使得线程处于就绪状态,在获得CPU时间片后通过run()开始运行...

2019-01-12 15:40:58 3373 1

原创 Java中栈、堆、静态存储区(方法区)和寄存器的辨析

栈:存放基本类型的变量数据和对象的引用(对象在堆里,栈存放的引用,即地址)堆:主要保存由new生成的变量寄存器:核心是按需分配,我们无法控制它的使用,也找不到调用它的踪迹...

2019-01-12 15:33:17 1106

原创 关于接口中定义的变量

public class A implements B{public static void main(String args[]){ int i; A a1=new A(); i =a1.k; System.out.println("i="+i); }}interface B{ int k=10;}在接口中的变量都默认是public...

2019-01-12 14:33:44 10551

原创 Java中会导致InterruptedException异常的情况

1、java.lang.Object 类的 wait 方法2、java.lang.Thread 类的 sleep 方法3、java.lang.Thread 类的 join 方法

2019-01-12 13:42:53 7151 2

原创 Java中statement的作用

1、Statement:执行不带参数的简单SQL语句。2、Prepared Statement :执行预编译,并运行SQL语句。3、Callable Statement:执行对存储过程的调用。

2019-01-12 11:33:48 2300

空空如也

空空如也

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

TA关注的人

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