![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
张一柯
这个作者很懒,什么都没留下…
展开
-
树与二叉树基本概念
1. 树的基本概念: 1. 树属于逻辑非线性结构。 2. 如果一个节点有后继节点,那么该节点可以有n多个后继节点;如果一个节点有前驱节点,那么该树只有一个前驱节点;只有根节点没有前驱节点,其他节点都有前驱节点;一棵没有任何节点的树称为空树。 3. 树中的节点存在三种:根节点(没有前驱节点)、叶子节点(没有叶子节点)、非叶子节点(可以包含根节点)。按照常用的说法,原创 2017-02-28 22:06:42 · 383 阅读 · 0 评论 -
大数相加问题(java版 )
两个大数相加,如果把数字转换成字符串,那么无论多大的数都可以相加了,将两位数做加法的过程用java代码模拟出来,那么这个问题就得到了解决。package com.zhangyike.bigNum;import java.util.Scanner;public class AndBigNumber { public static void main(String[] args) {原创 2017-08-04 09:34:30 · 748 阅读 · 0 评论 -
大数相乘问题(java版)
将两个大数保存到字符串中,他们相乘的结果也保存到字符串中,那么无论多大的数,都能够用这种方法去解决。首先看下我们数学上怎么去计算两个数字相乘的: 如果我们用程序把上面的过程写出来,那么这个问题就解决了。java代码如下:package com.zyk.model;import java.util.Scanner;public class BigNumMuti { public static原创 2017-08-03 20:31:53 · 541 阅读 · 0 评论 -
将一个数转换成小于它的任意进制(java版)
//进制转换 public class RadixChange1 { public static void main(String[] args) { Scanner can = new Scanner(System.in); try { String strs = can.nextLine(); //将输入的字符原创 2017-07-11 11:22:46 · 379 阅读 · 0 评论 -
二叉树遍历算法的应用(java版)
1.统计二叉树中节点的个数 思路:统计二叉树节点个数,无次序的要求,按照一种次序遍历,遇到节点count++即可。 代码:/* * 先根序统计节点的个数 */ private int count = 0; public void calculateNodeCount(Btree<T> root){ if (root != null) {原创 2017-05-09 19:41:00 · 544 阅读 · 0 评论 -
二叉树遍历的非递归实现(java版)
在前面的这篇文章中我写了二叉树遍历的递归实现,在这篇文章中我将讲述下二叉树的非递归实现。大多数的递归问题的非递归算法,需要用栈来消除递归。栈是一种存储容器,同时又是一种控制结构,栈先进先出的控制结构,同时,调用时可用栈来保留必要的信息,退出时,可以从栈中取出信息,进行后续的处理。所以设计二叉树的遍历非递归算法, 需要用栈来保留节点的信息。二叉树的结构class Btree<T>{ T val原创 2017-05-08 20:19:47 · 1183 阅读 · 1 评论 -
二叉树遍历的递归实现
二叉树有三种遍历方式,分别是中根序,先根序和后根序。 中根序的执行顺序:左孩子——>根节点——>右孩子 先根序的执行顺序:根节点——>左孩子——>右孩子 后根序的执行顺序:左孩子——>右孩子——>根节点 中根序:84925A1637 先根序:124895A267 后根序:894A526731 最近看牛客好多题是给你中根序和先根序让求后根序或者画出树状图来原创 2017-03-07 09:51:07 · 369 阅读 · 0 评论 -
图解归并排序算法(java版)
归并排序:采用分治法的思想(递归),将整个数组序列分成两个序列,再讲两个序列分成各自的子序列,采用递归的思想解决一个个的子问题。归并排序的时间复杂度:O(n*lgn) 归病排序的空间复杂度:O(n)归并排序的两个核心: 核心一:将两个有序序列合并。比较两个数列的第一个数,谁小就取谁,然后让该数列向后移动一位,知道其中的一个序列移动到最后一个,将另一个序列按照次序加入到已排到的序列后面。 核心二原创 2017-05-24 19:03:11 · 547 阅读 · 0 评论 -
用HashMap和双链表实现多线程下的LRU缓存算法(java版)
缓存的目的:缓存主要为了保存数据的,在项目中,开启服务器的时候,将访问量大的数据从数据库中查到,放入到缓存中,服务器开启后,用户从前端向后台发送请求,直接从缓存中去取,不用查数据库,加快数据的访问。我的缓存的需求:主要想保存ArticleBean(中有很多属性),加入到缓存的时候按照点击量的降序,定时更新缓存的时候能将按照点击量的降序加入到合适的位置,而查找文章的时候需要根据文章的id直接缓存中去获原创 2017-04-19 19:07:15 · 2281 阅读 · 1 评论 -
快速排序算法(java版)
一、快速排序算法是对冒泡算法的改进,算法的思想是: 1.每一趟排序选定一个基元素,这一趟排序完成后,比基元素小的元素在基元素的左边,比基元素大的元素在基元素的右边。 2.对基元素左边和右边的元素进行如1的排序 …..循环1、2 直到左边的元素大于右边元素,排序完成。二、快速排序的时间复杂度:O(nlogn)三、快速排序的空间复杂度: 快排使用的原创 2017-04-05 08:48:25 · 254 阅读 · 0 评论 -
串匹配算法(二)——手把手教你KMP算法(2)
提示:请结合上一篇文章一起阅读。子串的移动: 现在我们用一个int类型的数组来记录当前字符前面最多有多少个子字符与字符串一开始是相同的。 前两个字符的next数组对应的值都是0,第一个是0,是因为他前面没有字符,第二个字符前面就一个字符与字符串一开始的字符是同一个字符,如果算上的话,那么从相同的字符的下一个字符开始比较,还是失配点与第二个字符开始比较,没有意义,所以前两个字符对应的值都是0.原创 2017-03-29 17:55:23 · 369 阅读 · 0 评论 -
串匹配算法(二)——手把手教你KMP算法(1)
KMP算法是一种比较高效的串匹配算法,高效体现在:源串下标不回溯,子串合理的移动。 KMP算法属于思路比较复杂的算法,我自己学习这个算法可以说是第三次了,前两次是似懂非懂的,但是最近在刷牛客题的时候,发现这个算法还是挺高效的,按照常规思路我的程序在时间复杂度根本通不过,所以下狠心再次去学习这个算法,终于整理出来了。现在觉得要想学懂这个算法必须要耐下心来一遍遍的变量跟踪。 本文主要整理出我自己学习原创 2017-03-29 17:19:15 · 308 阅读 · 0 评论 -
串匹配算法(一)
本文主要介绍普通的串匹配算法,这种算法的特点是好想,但是消耗时间,不够高效,在牛客上做题时遇到这种题,一般情况下是通不过的。该算法为后面的KMP算法做一个铺垫。 思路: 从源字符串的第一个字符开始与子字符串的第一个字符开始比较,字符相同,继续比较下一个字符,遇到不相同的,源字符串回溯到第二个字符,子字符串回溯到第一个字符,再次比较….直到循环停止。我的代码:package com.zha原创 2017-03-28 16:41:14 · 334 阅读 · 0 评论 -
14.链表的倒数第k个节点
PS:这是一道出境率极高的题目,记得去年参加校园招聘时我看到了3次,但是每次写的都不完善。 一、题目:链表的倒数第k个节点 题目:输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点开始它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个结点是值为4的结点。 链表的节点定义如下,原创 2018-01-30 17:24:11 · 174 阅读 · 0 评论