-
【数据结构】2.java源码关于LinkedList
所属栏目:[安全] 日期:2021-04-02 热度:62
副标题#e# 关于LinkedList的源码关注点 1.从底层数据结构,扩容策略 2.LinkedList的增删改查 3.特殊处理重点关注 4.遍历的速度,随机访问和iterator访问效率对比 ? 1.从底层数据结构,扩容策略 构造函数不做任何操作,只要再add的时候进行数据初始化操作,[详细]
-
【数据结构】【状态压缩】刷题
所属栏目:[安全] 日期:2021-04-02 热度:72
没什么别的,就希望自己记住那些函数 1floyd+bitset优化 #includecstdio#includecstdlib #includebitset using namespace std;int n;const int N=2003;char s[N];bitset N bs[N]; int main(){ scanf("%d",n); for(int i=1;i=n;i++) { scanf("%s",s+1); for[详细]
-
【数据结构】Hash表
所属栏目:[安全] 日期:2021-04-02 热度:99
副标题#e# 【数据结构】Hash表 Hash表也叫散列表,是一种线性数据结构。在一般情况下,可以用o(1)的时间复杂度进行数据的增删改查。在Java开发语言中,HashMap的底层就是一个散列表。 1. 什么是Hash表 Hash表是一种线性数据结构,这种数据结构的底层一般是[详细]
-
自己动手实现java数据结构(五)哈希表
所属栏目:[安全] 日期:2021-04-02 热度:169
副标题#e# 1.哈希表介绍 前面我们已经介绍了许多类型的数据结构。在想要查询容器内特定元素时,有序向量使得我们能使用二分查找法进行精确的查询((O(logN)对数复杂度,很高效)。 可人类总是不知满足,依然在寻求一种更高效的特定元素查询的数据结构,哈希表[详细]
-
自己动手实现java数据结构(七) AVL树
所属栏目:[安全] 日期:2021-04-02 热度:159
副标题#e# 1.AVL树介绍 前面我们已经介绍了二叉搜索树。普通的二叉搜索树在插入、删除数据时可能使得全树的数据分布不平衡,退化,导致二叉搜索树最关键的查询效率急剧降低。这也引出了平衡二叉搜索树的概念,平衡二叉搜索树在此前的基础上,通过一系列的等[详细]
-
自己动手实现java数据结构(八) 优先级队列
所属栏目:[安全] 日期:2021-04-02 热度:137
副标题#e# 1.优先级队列介绍 1.1 优先级队列 有时在调度任务时,我们会想要先处理优先级更高的任务。例如,对于同一个柜台,在决定队列中下一个服务的用户时,总是倾向于优先服务VIP用户,而让普通用户等待,即使普通的用户是先加入队列的。 优先级队列和普[详细]
-
自己动手实现java数据结构(六)二叉搜索树
所属栏目:[安全] 日期:2021-04-02 热度:50
副标题#e# 1.二叉搜索树介绍 前面我们已经介绍过了向量和链表。有序向量可以以二分查找的方式高效的查找特定元素,而缺点是插入删除的效率较低(需要整体移动内部元素);链表的优点在于插入,删除元素时效率较高,但由于不支持随机访问,特定元素的查找效率[详细]
-
自己动手实现java数据结构(一) 向量
所属栏目:[安全] 日期:2021-04-02 热度:95
副标题#e# 1.向量介绍 计算机程序主要运行在内存中,而内存在逻辑上可以被看做是连续的地址。为了充分利用这一特性,在主流的编程语言中都存在一种底层的被称为数组(Array)的数据结构与之对应。在使用数组时需要事先声明固定的大小以便程序在运行时为其开辟[详细]
-
自己动手实现java数据结构(四)双端队列
所属栏目:[安全] 日期:2021-04-02 热度:89
副标题#e# 1.双端队列介绍 在介绍双端队列之前,我们需要先介绍队列的概念。和栈相对应,在许多算法设计中,需要一种"先进先出(First Input First Output)"的数据结构,因而一种被称为"队列(Queue)"的数据结构被抽象了出来(因为现实中的队列,就是先进先出的[详细]
-
自己动手实现java数据结构(三) 栈
所属栏目:[安全] 日期:2021-04-02 热度:52
副标题#e# 1.栈的介绍 在许多算法设计中都需要一种"先进后出(First Input Last Output)"的数据结构,因而一种被称为"栈"的数据结构被抽象了出来。 栈的结构类似一个罐头:只有一个开口;先被放进去的东西沉在底下,后放进去的东西被放在顶部;想拿东西必须[详细]
-
自己动手实现java数据结构(二) 链表
所属栏目:[安全] 日期:2021-04-02 热度:92
副标题#e# 1.链表介绍 前面我们已经介绍了向量,向量是基于数组进行数据存储的线性表。今天,要介绍的是线性表的另一种实现方式---链表。 链表和向量都是线性表,从使用者的角度上依然被视为一个线性的列表结构。但是,链表内部存储数据的方式却和向量大不[详细]
-
栈-java代码
所属栏目:[安全] 日期:2021-04-01 热度:134
import java.util.Arrays;public class StackDemo { private int maxSize; long[] stackArray; top; // 构造器 public StackDemo( s){ 初始化栈 maxSize = s; stackArray = new [maxSize]; top = -1; } 入栈 void push( element){ stackArray[++top] = ele[详细]
-
队列-java代码
所属栏目:[安全] 日期:2021-04-01 热度:103
public class QueueDemo { private int maxSize; long[] queueArray; // 队列的头,实际是数组的尾 header; 队列的尾,实际是数组的头 footer; nElems; public QueueDemo( size){ maxSize = size; queueArray = new [maxSize]; header = 0; footer = -1; n[详细]
-
算法图解之散列表
所属栏目:[安全] 日期:2021-04-01 热度:71
散列函数 专业术语表述,”将输入映射到数字”。 散列函数具有如下要求: (1)它必须是一致的。 如你输入blog得到的是wordpress,那么每次输入blog,得到的都必须为wordpress。 (2)它应将不同的输入映射到不同的数字。 如,如果一个散列函数不管输入是什么都[详细]
-
算法图解之二分查找
所属栏目:[安全] 日期:2021-04-01 热度:191
简单查找,如下图: ? 从图可知那个眼镜男从1开始猜,猜到100,大家都知道这种猜法最终都会得到答案,就是时间问题而已。100毕竟是这个列表的最大长度。但是换言之,如果是一万、百万、上千亿呢?那么这种猜法虽然能够得到答案,但是时间方面的成本将会非常[详细]
-
lt;数据结构与算法分析gt;读书笔记--运行时间中的对数及其分析
所属栏目:[安全] 日期:2021-04-01 热度:135
副标题#e# 分析算法最混乱的方面大概集中在对数上面。我们已经看到,某些分治算法将以O(N log N)时间运行。此外,对数最常出现的规律可概括为下列一般法则: 如果一个算法用常数时间(O(1))将问题的大小削减为其一部分(通常是1/2),那么该算法就是O(logN)。[详细]
-
lt;数据结构与算法分析gt;读书笔记--最大子序列和问题的求解
所属栏目:[安全] 日期:2021-04-01 热度:187
副标题#e# ? 现在我们将要叙述四个算法来求解早先提出的最大子序列和问题。 第一个算法,它只是穷举式地尝试所有的可能。for循环中的循环变量反映了Java中数组从0开始而不是从1开始这样一个事实。还有,本算法并不计算实际的子序列;实际的计算还要添加一些[详细]
-
lt;数据结构与算法分析gt;读书笔记--实现泛型构件pre-Java5
所属栏目:[安全] 日期:2021-04-01 热度:129
副标题#e# ? 面向对象的一个重要目标是对代码重用的支持。支持这个目标的一个重要的机制就是泛型机制:如果除去对象的基本类型外,实现的方法是相同的,那么我们就可以用泛型实现来描述这种基本的功能。 ? ? 1.使用Object表示泛型 Java中的基本思想就是可以[详细]
-
算法图解之递归
所属栏目:[安全] 日期:2021-04-01 热度:151
图一: ? ?图二: ? ? ? 图一和图二对比,它们的作用都是相同的。从流程上分析,图一流程相对比较复杂,而图二则简单明了, 这是某位同行在stackoverflow上面说过的话:如果使用循环,程序的性能可能更高;如果使用递归,程序可能更容易死理解。如何选择要看什[详细]
-
算法图解之大O表示法
所属栏目:[安全] 日期:2021-04-01 热度:76
大O表示法 大O表示法是一种特殊的表示法,指出了算法的速度有多快。 1.算法的运行时间以不同的速度增加 关于算法的运行时间以不同的速度增加,我联系到平时写代码,严谨的代码(易读,可扩展,精悍,经过多方测试等),通常运行速度与那些不严谨的代码(完全[详细]
-
算法图解之广度优先搜索
所属栏目:[安全] 日期:2021-04-01 热度:96
广度优先搜索的应用场景,如下: (1)编写国际跳棋AI,计算最少走多少步就可获胜; (2)编写拼写检查器,计算最少编辑多个地方就可将错拼的单词改为正确的单词,如将READED改为READER需要编辑一个地方; (3)根据你的人际关系网络找到关系最近的医生; 图简介 假[详细]
-
算法图解之内存的工作原理
所属栏目:[安全] 日期:2021-04-01 热度:173
? 其中fe0ffeeb是一个内存单元的地址,需要将数据存储到内存时,你请求计算机提供存储空间,计算机给你一个存储地址。需要存储多项数据时,有两种基本方式,一种是数组,另外一种是链表。但它们并非都适用于所有情形,因此知道它们的差别非常重要。[详细]
-
【数据结构】第二章 线性表
所属栏目:[安全] 日期:2021-03-31 热度:156
§2.1线性表的定义 §2.2线性表的顺序表示和实现 优点: 随机 存储 §2.3线性表的链式表示和实现 ?链式表示优点:灵活 ? ? 缺点:不随机存储 ?2.3.1线性链表:储存单元可以是连续的 也可以是不连续的。 ?对于数据元素ai来说,除了存储其本身的信息之外,还[详细]
-
【数据结构】图的遍历方法 深度优先遍历和广度优先遍历
所属栏目:[安全] 日期:2021-03-31 热度:76
接着上次的文章“图的构建(邻接链表法)”,邻接链表法构建图相对来说比较简单,并且遍历起来也相对简单,但是要是动态添加图的节点和图的边,则是实在不方便,不过现在不管那么多,今天的主题是遍历。? -?有另外一种图的构建方法,叫做十字链表法,插入[详细]
-
【数据结构】 两个栈实现一个队列【面试】
所属栏目:[安全] 日期:2021-03-31 热度:113
栈结构:先进后出,后进先出,只允许在栈尾操作。 队列:先进先出,在队尾入队,在队头出队。 要想用两个栈实现一个队列,就需要使用一个相当于中间量的结构进行队列的入队和出队操作。 用图形象化为: 这样问题就从图中得出了思路: 入队操作:把入队元素[详细]