
数据结构
文章平均质量分 71
数据结构
Hello_GY
有在认真生活✌️
展开
-
Java:StringBuffer 和 StringBuilder
StringBuffer 和 StringBuilder 的类结构:原创 2021-06-10 09:37:33 · 231 阅读 · 0 评论 -
Java集合:List、Set和Map
List、Set和Map 区别:List、Set都继承Collection接口,Map则不是 List 元素有放入顺序,可以重复 ,Set 元素没有放入顺序,且不可重复,重复元素会被覆盖掉(注意:Set元素虽然无放入顺序,但是元素在Set中的位置是由该元素的HashCode决定的,其位置是固定的,加入Set的Object必须定义equals()方法,另外List支持for循环,可以通过下标来遍历,也可以用迭代器,但是Set只能用迭代,因为其元素无序,无法用下标来取得想要的值。) Set 检索元...原创 2021-04-27 19:19:20 · 239 阅读 · 0 评论 -
二叉搜索树
什么是二叉搜索树二叉搜索树(BST)也称为二叉排序树或二叉查找树。二叉搜索树:一棵二叉树,可以为空;如果不为空,满足以下性质。非空左子树的键值小于其根结点的键值。 非空右子树的键值大于其根结点的键值。 左右子树都是二叉搜索树。二叉搜索树的查找操作查找从根结点开始,如果树为空,返回NULL。若树非空,则根结点关键字和X进行比较,并进行处理:若X小于根结点的值,只需要在左...转载 2018-08-15 16:09:05 · 153 阅读 · 0 评论 -
最长回文子串
题目:给定一个字符串s,找出s中的最长回文子串;回文是指正着读和倒着读,结果一些样,比如abcba或abba。方法:暴力法,DP法, 中心扩展法,manacher算法1、暴力法求出每一个子串,之后判断是不是回文,找到最长的那个。求遍历每一个子串的方法的时间复杂度O(n^2),判断每一个子串是不是回文的时间复杂度是O(n),所以总时间复杂度为O(n^3)。思想: 1...转载 2018-08-09 18:00:54 · 312 阅读 · 0 评论 -
单链表逆转
List结构定义如下:struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }}L是给定单链表,函数Reverse要返回被逆转后的链表。实现:ListNode* ReverseList(ListNode* pHead) { ...原创 2018-07-26 22:16:24 · 646 阅读 · 0 评论 -
非递归二叉树先序遍历、中序遍历及后序遍历
数据结构定义:struct Node { char val; pNode lchild, rchild;};二叉树形态: A / \ B C / \ / \ D E F G / \ H I前序遍历:先判断节点的指针是否为空,不为空就先访问该结点,然后直接进栈,接着遍历左子树...原创 2018-07-26 21:59:41 · 485 阅读 · 0 评论 -
哈希表冲突及处理冲突的方法
一、哈希函数和哈希冲突的基本概念1.哈希函数:哈希法又称散列法、杂凑法以及关键字地址计算法等,相应的表成为哈希表。基本思想:首先在元素的关键字K和元素的位置P之间建立一个对应关系f,使得P=f(K),其中f成为哈希函数。创建哈希表时,把关键字K的元素直接存入地址为f(K)的单元;查找关键字K的元素时利用哈希函数计算出该元素的存储位置P=f(K).2.哈希冲突:当关键字集...原创 2018-07-06 20:31:30 · 19472 阅读 · 2 评论 -
二叉树排序算法
二叉树排序的基本原理:先构建一颗空树,使用第一个元素作为根节点,如果之后的元素比第一个小,则放到左子树,否则放到右子树,之后按中序遍历。时间复杂度:nlog2(n)空间复杂度:中序遍历时,需要构建栈,为logn.#include "StdAfx.h"#include<stdio.h>#include<malloc.h>#define STACK_INCREMENT ...原创 2018-07-06 19:42:09 · 18936 阅读 · 0 评论 -
最长公共连续子串输出其长度
DP问题,利用空间换时间,时间复杂度O(NM),空间O(NM)思想:创建一张二维表,本来这张表是用来存储字符A[i]和B[j]是否相等然后将表中(i,j)位置置为1。遍历结束后,计算所有的对角线上连续1的个数,取最大值就是结果。但是现在,换种方法,遍历的同时,计算当前斜对角的值,然后用一个变量res记录最大的值即可。它的公式为:如果A[i - 1] == B[j - 1],那么dp[i]...原创 2018-07-02 19:05:53 · 1265 阅读 · 0 评论 -
小端字节序与大端字节序
在各种计算机体系结构中,对于字节、字等的存储机制有所不同,因而引发了计算机通信领域中一个很重要的问题,即通信双方交流的信息单元(比特、字节、字、双字等等)应该以什么样的顺序进行传送。如果不达成一致的规则,通信双方将无法进行正确的编/译码从而导致通信失败。目前在各种体系的计算机中通常采用的字节存储机制主要有两种:Big-Endian 和 Little-Endian,下面先从字节序说起。1、什么是字节...原创 2018-06-10 17:17:29 · 533 阅读 · 0 评论 -
十大经典排序算法详解及优化
算法概述0.1 算法分类十种常见排序算法可以分为两大类:非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。包括:交换排序(冒泡、快速排序)插入排序(简单插入排序、希尔排序)选择排序(简单选择排序、堆排序)归并排序(二路,多路)线性时间非比较类排序:不通过比较来决定元素间的相对次序,可以突破基于比...原创 2018-06-10 17:13:52 · 7109 阅读 · 5 评论 -
旋转数组的最小数字
题目:旋转数组的最小数字描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路:二分查找的变形题目。旋转之后的数组实际上可以划分成两个有...原创 2018-06-02 16:10:22 · 144 阅读 · 0 评论 -
B树、B+树的总结
B树为什么要B树磁盘中有两个机械运动的部分,分别是盘片旋转和磁臂移动。盘片旋转就是我们市面上所提到的多少转每分钟,而磁盘移动则是在盘片旋转到指定位置以后,移动磁臂后开始进行数据的读写。那么这就存在一个定位到磁盘中的块的过程,而定位是磁盘的存取中花费时间比较大的一块,毕竟机械运动花费的时候要远远大于电子运动的时间。当大规模数据存储到磁盘中的时候,显然定位是一个非常花费时间的过程,但是我们可以通过B树...原创 2018-05-16 20:46:01 · 297 阅读 · 0 评论 -
红黑树:特点及如何调整
一、概述红黑树是自平衡的二叉搜索树,是计算机科学中的一种数据结构。平衡是指所有叶子的深度基本相同(完全相等的情况并不多见,所以只能趋向于相等) 。二叉搜索树是指,节点最多有两个儿子,且左子树中所有节点都小于右子树。树中节点有改动时,通过调整节点顺序(旋转),重新给节点染色,使节点满足某种特殊的性质来保持平衡。旋转和染色过程肯定经过特殊设计可以高效的完成。它不是完全平衡的二叉树,但能保证搜索操作在O...原创 2018-05-16 20:12:30 · 4308 阅读 · 0 评论 -
数据结构常见的八大排序算法
数据结构常见的八大排序算法前言八大排序,三大查找是《数据结构》当中非常基础的知识点,在这里为了复习顺带总结了一下常见的八种排序算法。常见的八大排序算法,他们之间关系如下:排序算法.png他们的性能比较:性能比较.png下面,利用Python分别将他们进行实现。直接插入排序算法思想:直接插入排序.gif直接插入排序的核心思想就是:将数组中的所有元素依次跟前面已经排好的元素相比较,如果选择的元素比已排...转载 2018-04-14 14:09:54 · 192 阅读 · 0 评论