- 博客(16)
- 收藏
- 关注
原创 Oracle笔记(操作Scott中的数据)
文章目录1 数据库相关概念2 数据库的发展阶段3 Oracle相关介绍3.1 软件相关介绍3.2 软件目录结构介绍3.3 软件原理3.3.1 软件体系架构3.3.2 本地网络服务配置3.3.3 监听器配置3.4 Oracle账户介绍3.5 Oracle新建账户3.6 Oracle忘记用户密码的解决方法4 关系型数据库的基本概念5 SQL语言简介6 SQL语句的单表查询7 Oracle函数的使用8 ...
2019-08-08 10:48:48 1188
原创 DS15-前缀树的简单实现
前缀树即Trie,也称作字典树,主要应用于通讯录和字典中单词的查找等,是一种比较综合性的数据结构,这里只是简单的实现一部分功能,包括插入一个单词和查找字典里有没有这个单词等.字典树的查找操作的时间复杂度与字典的数量无关,只与自己要查找的那个单词的长度有关,这样就使字典树在超大量的数据查找中具有相当大的优势,理论上对于一个英语单词,不考虑大写的情况下,从根节点开始,每个节点应当可以最多拥有26个孩子...
2019-03-07 17:31:18 216
原创 DS14-线段树的实现
线段树是一种比较高级的数据结构,在现实生活中也有比较广泛的应用,比如:实现对整个宇宙中某个星系的天体数的统计等.线段树是一种自底向上更新数据的数据结构,每个节点的值为其两个孩子节点进行某种操作(相加/取最大值/取最小值)得到的结果. 线段树在实现的时候可以使用数组作为底层,线段树并不是一个完全二叉树,但是是一个平衡二叉树,创建一个线段树需要先假设其是一个满二叉树,在其中存储全部的值,对于用不到的节...
2019-02-25 17:01:49 182
原创 DS13-使用最大堆实现的优先队列
优先队列是一种特殊的队列,在实际生活中应用很广,比如说医院急救,那肯定不能按照先来后到的方式进行排队;因为病人的病情有轻有重,所以要根据病人的病情进行排队,这就是优先队列,优先队列不再按照队列中先进先出的原则进行操作,而是按照优先级进行排队 使用传统的链表当然也能实现优先队列,每次入队都加在队首就可以了,入队操作的时间复杂度为O(1),但是出队的时候,先要找出最大的元素,然后再出队这个元素,因此需...
2019-02-25 12:10:36 186
原创 DS12-映射的两种实现方式(链表实现和二分搜索树实现)
映射Map主要是指在数据存储中一个键key唯一对应一个值value,是一种应用比较广泛的数据结构,实现映射可以采用多种方法,使用链表实现映射的时间复杂度为O(n),使用二分搜索树实现的映射的时间复杂度稍微好一些,为O(logN). 实现映射与实现集合的思路大体相同,只是映射需要在构建节点时在其中加一个V类型的value,并在后续的代码实现中维护这个value,映射中的key也可以理解为一种唯一标识...
2019-02-24 15:35:28 191
原创 DS11-集合的不同实现方式:链表实现/二分搜索树实现
集合是一种比较高级的数据结构,集合中的元素不可重复,主要包括以下几个操作:添加add,删除remove,获取元素个数getSize,判断集合是否为空isEmpty,判断集合中是否包含某个元素contains;使用不同的底层实现集合,会造成集合的时间复杂度有所不同 使用链表实现集合时,假如每次添加元素都添加在链表头,则添加操时间复杂度只有O(n),原因是集合中不能有重复元素,在添加时需要先查看是否有...
2019-02-20 21:46:14 278
原创 DS10-二分搜索树的实现
二分搜索树是一种典型的二叉树,也可以称之为二分排序树,因为当对二分搜索树进行中序遍历的时候,得到的遍历序列就是二分搜索树从小到大排列的值,二分搜索树的特点就是对任意节点来说,它的左子树上的值都更小,右子树上的值都更大,对于二分搜索树的操作主要有添加节点,删除节点,删除最小值/最大值,以及四种遍历方式:前序遍历/中序遍历/后序遍历/层序遍历,其中层序遍历是一种广度优先遍历的算法,其他三种都是深度优先...
2019-02-19 14:41:32 128
原创 DS09-实现循环双链表
循环双链表存在许多优点,比如可以实现时间复杂度均为O(1)的栈和队列,是对于单链表的优化,实现时注意每个节点的两个指针域都要进行维护. 代码如下: /** * 实现循环双链表 * @author ChenZhuJi * * @param <E> */ public class LoopDoubleLinkedList<E> { private class Nod...
2019-02-18 18:47:49 154
原创 DS08-队列的实现方式之链表实现(使用尾指针)
链表的结构决定了再链表头进行添加/删除操作时时间复杂度仅为O(1),但是对链表尾部进行操作的时间复杂度为O(n),而队列是一种先进先出的数据结构,既要对队首进行操作,也要对队尾进行操作,所以必须对链表进行一点修改,才能实现时间复杂度为O(1)的队列. 修改的方式就是添加一个尾指针,指向链表的最后一个节点,这个操作只是针对实现队列时的优化,使得在链表尾部添加元素的时间复杂度从O(n)将为O(1),也...
2019-02-17 14:48:09 262
原创 DS07-栈的实现方式之链表实现
栈是一种先进后出的数据结构,而链表有一个很大的特点:在链表头部增加/删除节点只需要O(1)的时间复杂度,利用这个特点可以设计出O(1)时间复杂度的链表实现栈 实现的时候还是先写一个接口类Stack,把一些操作定义在里面.然后写一个LinkedList类,实现链表的基本操作.再写一个LinkedListStack类,实现Stack接口,复用LinkedList类的实现方法并完成代码测试即可 具体代码...
2019-02-16 22:24:57 117
原创 DS06-单向链表(不使用虚拟头节点)
不使用虚拟头节点进行单向链表的创建和实现,需要注意在添加和删除节点操作时对头节点进行特殊处理,其余的操作大同小异. 代码如下: 实现类: /** * 链表类 * @author ChenZhuJi * * @param <E> */ public class LinkedList<E> { //私有的内部类,仅在这个类中能够使用,表示一个节点 privat...
2019-02-16 20:59:59 155
原创 DS05-单向链表(使用虚拟头节点)
链表类LinkedList中可以设计一个私有内部类Node类,用于表示一个节点类,节点类中存放两个值,一个是支持泛型的E类型的e,一个是表示下一个节点的Node类型的next,链表类中有两个需要维护的参数,一个是用于表示虚拟头节点的dummyHead,另一个就是用于表示链表长度的size. 虚拟头节点就是在头节点前面再放一个空的节点,这个节点值为null,指向头节点.使用虚拟头节点主要是为了避免在...
2019-02-16 17:12:01 216
原创 DS04-循环队列
循环队列相比于数组队列,最大的特点就是可以降低出队操作的时间复杂度,从O(n)将为O(1),降低移动的次数(不是完全不用移动),具体实现的原理就是队列在出队一个队首元素以后,队列中剩下的元素的相互间的顺序并没有改变,如果不想在每次出队操作之后把所有元素移动一次,那就得利用已经出队的那个元素原来占有的位置,这样就出现循环队列 循环队列底层还是用数组实现,可以定义一个int类型的front变量和一个t...
2019-02-16 16:19:06 181
原创 DS03-队列的实现方式之数组实现
队列的特点就是先进先出,基本的操作有入队enqueue,出队dequeue,查看队首元素getFront,判断是否为空isEmpty,获取队列的长度getSize 定义一个Queue接口,记下上述操作,定义一个Array类实现自定义的数组类的操作,最后再来一个ArrayQueue类,实现Queue接口,复用Array类中的方法就可以实现队列 使用数组实现的队列,入队操作的时间复杂度O(1),出队的...
2019-02-16 15:59:55 133
原创 DS02-栈的实现方式之数组实现
栈的特点:先进后出,基本操作包括:进栈push,出栈pop,查看栈顶元素peek,判断栈是否为空isEmpty,获取栈中元素的个数getSize 定义一个Stack接口,记下上述操作,定义一个Array类实现自定义的数组类的操作,最后再来一个ArrayStack类,实现Stack接口,复用Array类中的方法就可以轻松实现栈 由于是使用自定义数组类实现的栈,无论是进栈还是出栈,都是只需要对数组类的...
2019-02-16 15:49:32 182
原创 DS01-实现数组类
自定义实现数组类的元素的添加删除查找等,同时包括一个动态数组实现的方法.时间复杂度分析:增加元素/删除元素的时间复杂度为O(n),修改已知索引元素的值/查找已知索引的元素的值的时间复杂度为O(1),修改未知索引元素的值/查找未知索引的元素值的时间复杂度为O(n) /** * 数组类的实现 * @author ChenZhuJi * * @param &lt;E&gt; */ public...
2019-02-16 15:33:17 150
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人