码莎拉蒂 .
这个作者很懒,什么都没留下…
展开
-
数据结构之希尔排序
1希尔排序在要排序的一组数中,根据某一增量分为若干子序列,并对子序列分别进行插入排序。然后逐渐将增量减小,并重复上述过程。直至增量为1,此时数据序列基本有序,最后进行插入排序。2 代码实现#include <stdio.h>void print(int* data, int len){ for (int i = 0; i &l...原创 2019-11-05 02:22:26 · 2603 阅读 · 0 评论 -
数据结构之冒泡排序
1冒泡排序冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来算法过程如下:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来...原创 2019-11-04 11:27:04 · 2255 阅读 · 0 评论 -
数据结构之插入排序
1插入排序在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序2 我的分析如果有N个数,我们需要大循环N - 1次,然后我们从第二个元素开始找起,当发现比前面的元素小的时候,我们就当前的元素往后面移动一下(前提是在我们排好序列的数组里面),如上图,当i=3的时候...原创 2019-11-04 02:42:58 · 2453 阅读 · 0 评论 -
数据结构之选择排序
1选择排序思想在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换;第二次遍历n-2个数,找到最小的数值与第二个元素交换;。。。第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。2 代码实现第一次实现如下#include <stdio.h>void selectSort(int* data, int...原创 2019-11-04 00:16:18 · 2239 阅读 · 0 评论 -
数据结构之堆排序
1 堆排序堆排序(英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点,我们可以理解构建的堆是 完全二叉树 ,它们的下标有如下性质完全二叉树还有这个性质,比如这个树有n个节点,那么这个树的有左右孩子节点的父节点有n / 2个,如果我们堆顶是从下标0开始的,那么n / 2个数...原创 2019-11-03 00:34:09 · 2175 阅读 · 0 评论 -
数据结构之判断一棵树是不是完满二叉树
1完满二叉树除了叶子结点之外的每一个结点都有两个孩子结点。如下是完满二叉树 1 2 3 4 5 6 72 分析...原创 2019-10-28 21:07:11 · 2222 阅读 · 0 评论 -
数据结构之判断一棵树是不是满二叉树
1满二叉树除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树。一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。2 分析我们知道满二叉树是三角形的比如如下,最后一层任何一个节点的高度都是数的高度。 ...原创 2019-10-27 23:59:59 · 4148 阅读 · 0 评论 -
经典排序之插入排序
经典排序算法 – 插入排序Insertion sort 插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。插入排序方法分直接插入排序和折半插入排序两种,这里只介绍直接插入排序,折半插入排序留到“查找”内容中进行。 图1演示了对4个元素进行直接插入排序的过程,共需要(a),(b),(c)三次插入。设数组为a[原创 2016-09-29 20:09:53 · 2428 阅读 · 0 评论 -
求字符串的不重复字符的最长子串长度的问题
题目:已知一个字符串,只含有小写字母,求这个字符串的每个字符都不相同的最长子串的长度。比如:abcd 结果是4abcab 结果是3思路:用一个26个元素的整形数组表示一个字符串中是否含有某个字符。a~b分别映射到数组元素0~25。用两个指针分别指向字符串的第一个和第二个元素,用第二个指针从左往右扫描字符串。每扫描一个字符,根据数组原创 2016-10-14 18:26:51 · 2756 阅读 · 0 评论 -
数据结构-Hash总结(三):实践基础篇
转载请注明出处 http://blog.csdn.net/yankai0219/article/details/8185847问题:1. hash算法主表实现为什么不直接用数组,而使用malloc动态申请?2. 另外每个桶的使用 线性队列 和 双向队列 以及 二级hash的区别以及好处是什么?答案: 1. 1)hash表大小如果是固定的,当然可以采转载 2016-10-13 17:22:42 · 3037 阅读 · 0 评论 -
数据结构-Hash总结(一):理论学习篇
转载请注明出处http://blog.csdn.net/yankai0219/article/details/8185796零、学习方法 简要学习理论篇,进入程序学习篇,再回头学习理论篇和实践篇一、基本概念 1.Hash定义 Hash定义:将任意长度的输入,通过散列算法,变成固定长度的输出,该输出就是散列值。 hash函数:就是一种将任意转载 2016-10-13 17:18:55 · 2286 阅读 · 0 评论 -
数据结构-Hash总结(二)
转载:http://blog.csdn.net/liufei_learning/article/details/19220391理解Hash哈希表(hash table)是从一个集合A到另一个集合B的映射(mapping)。映射是一种对应关系,而且集合A的某个元素只能对应集合B中的一个元素。但反过来,集合B中的一个元素可能对应多个集合A中的元素。如果B中的元素只转载 2016-10-13 17:15:23 · 2292 阅读 · 0 评论 -
堆的构建、堆的插入、堆的删除、堆排序
如果你不了解堆是如何构建、插入、删除、堆排序的原理,可以点击下面连接,有详细的图解,让你知道逻辑原理。http://blog.csdn.net/u011068702/article/details/52712634 最详细的最小堆构建、插入、删除的过程图解http://blog.csdn.net/u011068702/article/details/52767187堆排序原创 2016-10-09 22:28:53 · 21499 阅读 · 1 评论 -
堆排序图片详解
堆排序实例首先,建立初始的堆结构如图:然后,交换堆顶的元素和最后一个元素,此时最后一个位置作为有序区(有序区显示为黄色),然后进行其他无序区的堆调整,重新得到大顶堆后,交换堆顶和倒数第二个元素的位置……堆排序分析 堆排序方法对记录数较少的文件并不值得提倡,但对n较大的文件还是很有效的。因为其运行时转载 2016-10-09 15:23:27 · 8956 阅读 · 1 评论 -
判断一棵树是否为平衡二叉树
代码:package com.sangfor.tree;public class Node { public int value; public Node left; public Node right; public Node(int value) { this.value = value; }}package com.sangfor.tree;public原创 2016-08-14 23:59:55 · 3970 阅读 · 2 评论 -
反序列化层遍历二叉树
反序列化层遍历二叉树规则: 序列化:如果这个节点有值,则打印“值!" 如果这个节点没有值,则打印“#!” 从上到下,从左到右比如: 1原创 2016-08-13 12:02:01 · 2333 阅读 · 0 评论 -
层遍历二叉树
一行一行打印树规则: 如果这个节点有值,则打印“值!" 如果这个节点没有值,则打印“#!” 从上到下,从左到右比如: 1原创 2016-08-12 13:22:27 · 1888 阅读 · 0 评论 -
Tree的前序序列化
Tree的序列化比如有一颗树是这样的 1 2 3 如果它这个节点本身不是空则输入自己的值然后加上“!#”原创 2016-08-11 22:48:11 · 1976 阅读 · 0 评论 -
最详细的最小堆构建、插入、删除的过程图解
转载:http://blog.csdn.net/hrn1216/article/details/514652701.简介 最小堆是一棵完全二叉树,非叶子结点的值不大于左孩子和右孩子的值。本文以图解的方式,说明最小堆的构建、插入、删除的过程。搞懂最小堆的相应知识后,最大堆与此类似。2.最小堆示例3.最小堆的构建转载 2016-09-30 17:22:09 · 29438 阅读 · 4 评论 -
字符串之将整数字符串转成整数值
题目:字符串之将整形字符串转成整数值,并且属于32位整数范围例如:str = "123" 返回 123str = "012" 不符合书写习惯,所以返回0str = "A12" 返回0str = " 0" 返回 0str = "214783647"返回 214783647str = "214783647" 因为溢出了,所以返回 0原创 2016-11-29 22:16:51 · 2446 阅读 · 0 评论 -
字符串之替换字符串中连续出现的指定字符串
题目:字符串之替换字符串中连续出现的指定字符串给定3个字符串str from to已知from字符串无重复字符,把str中所有from的子串全都替换成to字符串,连续出现from只需要换成一个to就可。例如:str="123adc" from = "adc" to ="4567" 返回1234567str="123" from = "adc" to ="4567" 返回12原创 2016-11-29 22:24:32 · 2889 阅读 · 0 评论 -
数据结构之求二叉树的所有叶子和以及叶子总数
1、题目数据结构之求二叉树的所有叶子和以及叶子总数2、代码实现tree.javapackage leetcode.chenyu.test;public class Tree { int val; Tree left; Tree right; Tree(int val) { this.val = val; }}pa原创 2017-06-11 22:14:45 · 3490 阅读 · 0 评论 -
数据结构之线性查找和折半查找
1、线性查找比如字符串 char s[] = "chenyu";如果我们是线性查找的话,就是从字符‘c’依次到字符串结尾‘u’查找2、折半查找注意查找之前必须是有序的比如整形数组 int a[10] = {1, 2, 7, 9, 10};查找数字2我们可以定义 首和尾巴,拿需要查找的数据和 首和尾巴下表除以2这个坐标数据对比如果这个查找的数字比,中间的数字小原创 2016-12-30 22:42:55 · 2286 阅读 · 0 评论 -
数据结构之插入排序
1 、插入排序的详解 从第二个数字开始插入在之前的有有序系列中,直到末尾。 比如有个数组 int a[5] = {2, 5, 3, 1, 4}; 第 一次排序为:2, 5 ,3,1, 4 第二次排序为: 2, 3, 5, 1, 4 第三次排序为: 1, 2, 3, 5, 4 第四次排序为: 1, 2, 3, 4, 52原创 2016-12-30 21:47:07 · 2213 阅读 · 0 评论 -
数据结构之深度优先搜索(用栈实现)问题
深度优先搜索可以这样理解,向四边延伸搜索,然后遇到不能搜索的时候就回退,也就是回溯思想,然后再去其它可能地方搜索。题目:定义一个二维数组:int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0原创 2017-01-06 12:29:51 · 9642 阅读 · 0 评论 -
数据结构之广度优先搜索(队列实现)问题
Description定义一个二维数组:int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0,};它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。原创 2017-01-03 22:08:19 · 4740 阅读 · 0 评论 -
字符串之括号的有效性
题目:给定一个字符串str,判断是不是整体有效的括号字符串举例:str = "()" return true; stre = "()()" return true;str = "())" return false; str = "()a()" return false;代码:package com.chenyu.string.cn;public class IsV原创 2016-12-07 20:53:16 · 2385 阅读 · 0 评论 -
字符串之数组中两个字符串的最小距离
题目:给定一个字符串数组strs, 再给定两个字符串str1和str2,返回在strs中str1和str2的最小距离,如果str1和str2为null,或者不再strs中,都返回-1列如:strs = {"1","3","3","2","3","1","3"} ,str1 = "1" str2 = "2" 返回2strs = {"CD"},str1 = "CD",str2="AC"原创 2016-12-03 18:16:17 · 2512 阅读 · 0 评论 -
字符串之翻转字符串
题目:给定一个字符类型的数组chas,请在单词间做逆序调整,只要做到单词顺序即可,对空格的位置没有特别要求。 例如: 如果把chas看作字符串为“dog loves pig”,调整成“pig loves dog”.如果把chas看作字符串为“I'm a student.”,调整成“student. a I'm”.代码:pack原创 2016-12-03 17:11:45 · 2582 阅读 · 2 评论 -
字符串之从规定的字符串中根据下标得到字符
题目:例如给规定字符串str = "a_3_b_4_c_5",给定下标4,会得到字符'b'str = "a_3_b_4_c_5" 就意味着字符串是str = "aaabbbbccccc";然后下标4,就会得到字符‘b’代码实现:package com.chenyu.string.cn;import java.util.Arrays;public class Get原创 2016-12-03 12:12:15 · 17625 阅读 · 0 评论 -
字符串之找到字符串的最大无重复字符串子串
题目:字符串之找到字符串的最大无重复字符子串举例:str = "adcd" return 4str = "aabcd" I know this str is 'adc' so return 3要求:时间复杂度为O(N)代码实现:package com.chenyu.string.cn;public class MaxUnique {原创 2016-12-10 23:41:52 · 2283 阅读 · 0 评论 -
字符串之统计字符串
题目:给一个str = "aaabbbcccddee"然后返回字符串“a_3_b_3_c_3_d_2_e_2”分析:给一个str = "aaabbbcccddee"然后返回字符串“a_3_b_3_c_3_d_2_e_2”,我们从结果可知道有一定规律,我们可以先得到a_3_b,然后把a_3_b保存起来,然后得到a_3_b_3_c以此递归,然后最后需要注意了,我们得到了a_原创 2016-11-30 20:22:43 · 2669 阅读 · 0 评论 -
Tree前序反序列化
题目:序列化:已知树如果当前节点不是空,则打印“值!”如果为空,则打印“#!”反序列化:1!2!#!#!3!#!#!然后构建成树比如树 1 2原创 2016-08-12 15:22:07 · 2052 阅读 · 0 评论 -
打印二叉树的边界节点
题目:给定一颗二叉树的头结点head,按照如下标实现二叉树边节点的逆时针打印标准一: 1、头节点为边界节点 2、叶结点为边界节点 3、如果节点在其所在的层中是最左边或最右边,那么也是边界节点。例如:如图所示的数原创 2016-08-08 02:36:08 · 3651 阅读 · 6 评论 -
用非递归方式实现二叉树后序遍历
先序遍历:中、左、右中序遍历:左、中、右后序遍历:左、右、中比如下面这科树 1 2 3 4 5 6 7package com.sangfor.tree; public class Node { public int value;原创 2016-08-07 23:37:58 · 2361 阅读 · 5 评论 -
链表之删除链表a/b处的节点
题目:删除链表a/b处的节点比如链表1、2、3、4、5如果a/b=r;如果0如果1/5如果2/5如果3/5如果4/5思路:得到我们需要删除链表的第几个的值,假设链表的长度为length,第几个值为n=(length*a/b),如果n为小树,我们像上去整,为什么是向上,读者可以自己去想想然后去尝试代码实现:原创 2015-12-13 23:47:57 · 1631 阅读 · 0 评论 -
链表之删除单链表倒数第K个节点
删除单链表倒数第K个节点题目:删除单链表中倒数第K个节点,思路: 给我们一个单链表,我们需要删除倒数第K个节点,比如链表每个节点值是1、2、3、4、5、6 K值是2,链表的总长度是6,要得倒数第二个数的值,前面就有6-2=4个的值,如果头结点往下移,移到第4个 结点的话,就是我们需要删除的结点,所以这个地方最关的是我们需要得到4,然后4又原创 2015-12-13 02:40:12 · 3494 阅读 · 0 评论 -
链表之删除链表中间节点
题目:链表之删除链表中间节点思路:方法1:我们先得到链表的长度,如果是奇数的话加一除以2,如果是偶数直接除以二,得到的长度,然后从头结点开始遍历得到的长度前一个节点,然后把它删除方法2:比如链表是1 、2 删除节点1比如链表是1 、2、3 删除节点2比如链表是1 、2 、3、4 删除节点2比如链表是1 、2 、3、4、5 删除节点3、比原创 2015-12-13 21:44:48 · 2148 阅读 · 0 评论 -
链表之删除双链表倒数第K个节点
链表之删除双链表倒数第K个节点题目:链表之删除双链表倒数第K个节点思路:之前写过http://blog.csdn.net/u011068702/article/details/50280099(链表之删除单链表倒数第K个节点),思路是一样的,如果不知道,你可以参考下代码实现:package com.chenyu.zuo.linkedList;impo原创 2015-12-13 14:59:11 · 1543 阅读 · 0 评论 -
链表之打印两个有序链表的公共部分
题目:打印两个有序链表的公共部分package com.chenyu.zuo.linkedList;/** * 打印有序链表的公共部分 * @author 陈喻 *题目:给定两个有序链表的头指针head1和head2,打印出两个链表的公共部分 *思路:因为有序 *如果head1的值小于head2,则head1往下移动 *如果head2的值小于head1,则head2往下移动 *原创 2015-12-12 23:07:36 · 2064 阅读 · 0 评论