
编程
文章平均质量分 77
来学习的小张
加油学习,努力进步
展开
-
搜索树与哈希表详解
目录一、搜索树1.1 概念1.2 查找1.3 插入1.4 删除1.5 性能分析1.6 与java集类的关系二、哈希表2.1 概念总结一、搜索树1.1 概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值;若它的右子树不为空,则右子树上所有节点的值都大于根节点的值;它的左右子树也分别为二叉搜索树。如:1.2 查找若根节点不为空:如果根节点==查找key 返回当前节点;如果根节点 >查找key在原创 2022-02-27 17:24:49 · 1302 阅读 · 20 评论 -
面试相关高频算法考点4
目录一、求二叉树深度二、异或理解,求数组中只出现一次的两个数三、滑动窗口,求和为S的连续正数序列总结一、求二叉树深度牛客链接描述:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度,根节点的深度视为 1 。方法一:使用递归方式分别遍历根的左和根的右,然后取两边中较大的一边,最后再加上有根节点的那一层就是整棵树的深度。public class Solution { public int TreeDepth(TreeNod原创 2022-02-15 20:26:38 · 754 阅读 · 15 评论 -
面试相关高频算法考点3
目录一、字符串的排列二、使用步骤一、字符串的排列牛客链接描述:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串 abc,acb,bac,bca,cab 和 cba 。import java.util.ArrayList;import java.util.*;public class Solution { //交换字符 public void Swap(char[] str,int i,int j){原创 2022-02-12 23:24:14 · 519 阅读 · 13 评论 -
面试相关高频算法考点2
目录一、替换空格二、从尾到头打印链表一、替换空格牛客链接描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解题思路:根据题目描述中将一个字符串中的每个空格替换成“%20”,则相比于原字符串长度每出现一个空格进行替换时都会增加2个位置的长度,因此我们可以先计算出整个字符串中增加的长度,然后用一个指针指向原来字符串长度的结尾位置,另一个指针指向增加长度之后其字符串长度结尾的位置,依次从后往原创 2022-02-07 20:02:17 · 620 阅读 · 5 评论 -
数组相关高频算法考点
文章目录一、调整数组顺序使奇数位于偶数前面二、判断二维数组中是否包含某数三、旋转数组的最小数字四、数组中出现次数超过一半的数字一、调整数组顺序使奇数位于偶数前面牛客链接描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解题思路:此题要求奇数与偶数的相对位置不发生改变,并且奇数要位于偶数的前面,此时我们可以利用插入排序的思想:让奇数插入到数组的前面,偶数统一往后移动,以此达原创 2022-01-30 22:05:19 · 1257 阅读 · 9 评论 -
Java常见的排序算法详解
目录一、直接插入排序二、使用步骤1.引入库一、直接插入排序 public static void insertSort(int[] arr){ for (int i = 1; i < arr.length; i++) { int tmp = arr[i]; int j = i - 1; for ( ; j >= 0 ; j--) { if (arr[j] >原创 2022-01-25 22:49:26 · 991 阅读 · 12 评论 -
Java关于二叉树的16个经典例题
目录一、二叉树的前序遍历二、二叉树的中序遍历三、二叉树的后序遍历四、判断两棵树是否相同五、判断一棵树是否是另一棵树的子树六、判断一棵树是否为平衡二叉树(AVL树)七、判断一棵树是否为对称二叉树一、二叉树的前序遍历144.二叉树的前序遍历方法一:class Solution { List <Integer> tmp = new ArrayList<>(); public List<Integer> preorderTraversal(Tree原创 2022-01-22 19:49:39 · 1932 阅读 · 7 评论 -
Java中关于二叉树详解
目录一、树形结构1.1 相关概念1.2树的表示形式1.3树的应用:文件系统管理(目录和文件)二、二叉树2.1相关概念2.2 二叉树的基本形态2.3 两种特殊的二叉树2.4 二叉树的性质2.5 二叉树的存储2.6 二叉树的基本操作2.6.1二叉树的遍历2.6.2 二叉树的基本操作总结一、树形结构树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:有一个特殊的节点,称为根节点,原创 2022-01-10 20:49:30 · 3225 阅读 · 14 评论 -
Java中栈和队列的模拟实现及经典例题
文章目录一、栈Stack1.栈的基本概念2.栈的基本操作3.利用顺序表模拟栈的实现二、队列Queue1.队列基本概念2.队列的基本操作3.利用链表模拟队列的实现总结一、栈Stack1.栈的基本概念栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈原创 2022-01-06 20:58:38 · 936 阅读 · 4 评论 -
Java集合框架中Collection及Map接口与Set介绍
目录一、类和接口总览二、Collection接口常用方法说明2.1将元素放到集合中add2.2 删除集合中的所有元素clear()2.3判断集合是否没有任何元素isEmpty()2.4 删除集合中元素remove()2.5 判断集合中元素个数size()2.6 返回一个装有所有集合中元素的数组三、Map接口常用方法说明3.1 根据指定的k查找对应的v(get)3.2 将指定的 k-v 放入Map(put)3.3 判断是否包含key(containskey)3.4 判断是否包含value(containsva原创 2021-12-02 15:36:09 · 808 阅读 · 12 评论 -
Java中关于异常的基本用法介绍
目录前言一、常见的异常1.1算数异常1.2数组下标越界异常1.3空指针异常1.4克隆异常1.5 输入不匹配异常二、防御式编程三、异常的基本用法3.1捕获异常关于异常的处理方式关于 "调用栈"finally 表示最后的善后工作, 例如释放资源总结前言所谓异常指的就是程序在运行时出现错误时通知调用者的一种机制。有些错误是这样的, 例如将 System.out.println 拼写错了, 写成了system.out.println. 此时编译过程中就会出错, 这是 “编译期” 出错。而运行时指的是程序已经编原创 2021-11-25 11:20:31 · 653 阅读 · 17 评论 -
Java中关于String类详解
目录一、创建字符串二、字符串常量池总结一、创建字符串常见的创建字符串的三种方式:public class test01 { public static void main(String[] args) { //方式一 String s = "zbd"; System.out.println(s); //方式二 String str = new String("hello"); System.ou原创 2021-11-20 12:02:39 · 1583 阅读 · 10 评论 -
Java面向对象编程详解
目录一、包1.1静态导入1.2将类放到包中1.3包的访问权限控制二、继承2.1 super关键字super与this的区别2.2 protected 关键字Java 中对于字段和方法共有四种访问权限2.3 final 关键字三、组合四、多态4.1向上转型4.2 动态绑定重载和重写的区别4.3 向下转型4.4 理解多态五、抽象类六、接口实现多个接口三个常用的接口`Comparable``Comparator``Cloneable`一、包包(package) 是组织类的一种方式,使用包的主要目的是保证类的原创 2021-11-13 21:48:38 · 1546 阅读 · 13 评论 -
Java中顺序表及链表详解
目录一、线性表二、顺序表应用示例:实现一个动态顺序表1.打印顺序表2.获取顺序表长度3.在 pos 位置新增元素4.判定是否包含某个元素5.查找某个元素对应的位置6.获取pos位置的元素7.给 pos 位置的元素设为/更新 value8.删除第一次出现的关键字key9.清空顺序表总结一、线性表线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…线性表在逻辑上是线性结构,也就说是连续的一条直线。但原创 2021-11-03 17:22:35 · 1955 阅读 · 17 评论 -
JAVA中对类和对象的认识
目录一、面向对象二、类和类的实例化2.1类2.2类的实例化2.3类的成员2.3.1 字段/属性/成员变量认识 null2.3.2 方法 (method)2.3.3 static 关键字a.修饰属性b.修饰方法c.代码块d.修饰类三、封装3.1 private实现封装3.2 getter和setter方法四、构造方法this关键字五、代码块匿名对象toString方法一、面向对象面向对象(OOP)的程序是由对象组成的,每个对象包含对用户公开的特定功能部分。程序中的很多对象来自标准库,还有一些是自定义的。究原创 2021-10-30 22:00:03 · 1361 阅读 · 23 评论 -
JAVA中对数组的理解及数组经典例题详解
文章目录前言一、创建数组创建数组的三种方式二、 数组的使用1.获取长度 & 访问元素2.遍历数组2.1使用for循环2.2使用for each循环2.3Arrays类的toString 方法三、数组作为方法的参数3.1打印数组的内容3.2理解引用类型3.3认识null3.4 初识 JVM 内存区域划分四、数组作为方法的返回值五、数组练习5.1 数组转字符串5.2 找数组中的最大元素5.3 求数组中元素的平均值5.4 查找数组中指定元素(顺序查找)5.5 查找数组中指定元素(二分查找)5.6检查数组的原创 2021-10-27 11:14:08 · 1697 阅读 · 11 评论 -
Java数据类型及运算符详解
目录一、变量和类型1.1整型变量二、使用步骤1.引入库一、变量和类型变量指的是程序运行时可变的量, 相当于开辟一块内存空间来保存一些数据。类型则是对变量的种类进行了划分, 不同类型的变量具有不同的特性。1.1整型变量语法格式:int 变量名 = 初始值;二、使用步骤1.引入库...原创 2021-10-18 21:31:54 · 506 阅读 · 11 评论 -
标识符的命名规则及命名规范
标识符可以标识:类名、接口名、变量名、常量名。标识符的命名规则:1:标识符只能由数字、字母(包括中文)、下划线_、美元符号$组成,不能含有其他符号。2:标识符不能以数字开头。标识符中不能有空格。 3:关键字不能做标识符。例如: public/class/static/void4:标识符是严格区分大小写的。5:标识符理论上是没有长度限制的。标识符的命名规范:1:见名知意2:遵循驼峰命名方式。(就是一高一低,一高一低…)驼峰有原创 2021-01-30 21:16:34 · 9541 阅读 · 0 评论 -
关于Java程序的组成结构及注释
/*1、在Java中任何有效的代码必须写到“类体”当中,最外层必须是一个类的定义。2、public表示公开的,class表示定义一个类,Test是一个类名,类名后面必须是 一对大括号被称为“类体”*/public class Test{ //声明/定义是一个公开的类,起名叫Test//类体//整个这一块的代码被称为:main代码(程序的入口,SUN公司java语言规定的)//main方法也可以叫做主方法。注意:方法必须放到“类体”中,不能放到类体外面。public static voi原创 2021-01-29 21:44:09 · 382 阅读 · 0 评论 -
Java语言特性及运行规则
1、Java语言特性1.1、简单性在JAVA语言中真正操作内存的是:JVM(Java虚拟机)所以Java程序都是运行在Java虚拟机中的。而Java虚拟机执行过程中再去操作内存。对于C或者C++语言来说程序员都是可以直接通过指针来操作内存的,JAVA语言屏蔽了指针概念,程序员不能直接操作指针,或者说是程序员不能直接操作内存,这种方法有优点也有缺点: 优点:不容易导致内存泄露(简单了。) 缺点:效率问题,包括驾驭感比较差。内存是什么? 对于计算机来说,最重要的几个部件是:CPU原创 2021-01-28 16:29:43 · 380 阅读 · 10 评论 -
【C语言】实现通讯录的增删改查、动态扩容及将信息保存到文件中
目录一、test.c二、头文件声明三、通讯录实现的功能模块介绍1.初始化通讯录静态版本:动态版本:加载文件信息到通讯录2.添加联系人静态版本:动态版本:核查通讯录容量3.销毁通讯录4.显示所有的联系人5.删除指定联系人6.查找指定联系人7.修改指定联系人8.保存信息到通讯录中总结本工程项目总共分为3部分,分别是:头文件部分,测试部分及通讯录具体实现部分。接下来分块来进行介绍:一、test.c首先是测试部分,这部分主要完成通讯录各个功能的入口,及一个菜单显示页面。具体实现程序如下:#define _C原创 2021-10-07 17:06:52 · 969 阅读 · 14 评论 -
程序的编译、链接及预处理详解
目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言程序在从test.c文件变成可执行的test.exe文件一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsimport warnin原创 2021-10-03 16:25:52 · 369 阅读 · 16 评论 -
【C语言】文件操作
目录前言一、文件1.程序文件2.数据文件3.文件名二、文件的打开和关闭1. 文件指针2 .文件的打开和关闭打开方式:三、文件的顺序读写1.fputc 和 fgetc2.fgets和fputs3.fprintf和fscanf4.fread和fwrite5.sprintf和sscanf四、文件的随机读写1.fseek2.ftell3 rewind五、文本文件和二进制文件六、文件读取结束的判定七、文件缓冲区前言当我们写了一段代码需要对数据进行处理的时候,此时数据是存放在内存中,当程序退出的时候,数据就不存在原创 2021-09-28 16:26:04 · 222 阅读 · 18 评论 -
动态内存(malloc、calloc、realloc)详解
目录前言一、动态内存函数的介绍1.1 malloc和free1.2 calloc1.3 realloc二、常见的动态内存错误2.1对NULL指针的解引用操作2.2对动态开辟空间的越界访问2.3 对非动态开辟内存使用free释放2.4 使用free释放一块动态开辟内存的一部分2.5 对同一块动态内存多次释放2.6 动态开辟内存忘记释放(内存泄漏)三、关于动态内存的经典例题例题一例题二例题三例题四四、柔性数组4.1 柔性数组的特点4.2 柔性数组的使用应用特点1、2应用特点1、2、3一般方法前言我们在以前原创 2021-09-25 20:53:20 · 1003 阅读 · 16 评论 -
【C语言】指针详解
目录前言指针概念一、字符指针例题一二、指针数组例题一例题二例题三三、数组指针3.1数组指针的定义例题一例题二3.2 &数组名VS数组名3.3数组指针的使用例题一例题二例题三四、 数组参数、指针参数4.1 一维数组传参4.2 二维数组传参4.3 一级指针传参4.4 二级指针传参五、函数指针例题一例题二六、函数指针数组七、指向函数指针数组的指针八、回调函数使用回调函数,模拟实现qsort(采用冒泡的方式)前言指针概念指针就是个变量,用来存放地址,地址唯一标识一块内存空间。指针的大小是固定的4/原创 2021-09-22 17:06:43 · 357 阅读 · 18 评论 -
C语言中对自定义类型(结构体、枚举、联合)的深度剖析
目录一、结构体1.1结构的概念1.2结构的声明1.3 特殊的声明1.4 结构的自引用1.5 结构体变量的定义和初始化1.6 结构体内存对齐例题一例题二例题三1.7 修改默认对齐数1.8 结构体传参二、位段2.1 什么是位段2.2 位段的内存分配2.3 位段的跨平台问题三、枚举3.1 枚举类型的定义3.2 枚举的优点四. 联合(共用体)4.1 联合类型的定义4.2 联合的特点4.3 联合大小的计算常见的自定义类型(构造类型)都有:结构体、枚举、联合体,接下来我们一个一个来看,首先,我们先看结构体:一、原创 2021-09-18 20:41:19 · 342 阅读 · 24 评论 -
C语言中常见字符串库函数的模拟实现(超详细)
本文主要介绍一些常用的字符串库函数的模拟实现,首先,我们来看一下都有哪些函数:字符串说明字符串类型求字符串长度strlen长度不受限制的字符串函数strcpy、strcat、strcmp长度受限制的字符串函数strncpy、strncat、strncmp字符串查找strstr、strtok错误信息报告strerror内存操作函数memcpy、memmove、memset、memcmp接下来,我们就一个一个来进行分析,并模拟实现。在这里,原创 2021-09-15 18:08:59 · 526 阅读 · 16 评论 -
关于指针的一些经典例题详解
指针学完之后,对指针是否深刻理解,以下是一些关于指针的经典例题,通过例题可以回顾一下指针的相关内容:代码示例1:int main(){int a[5] = { 1, 2, 3, 4, 5 };int *ptr = (int *)(&a + 1);printf( "%d,%d", *(a + 1), *(ptr - 1));//2,5return 0;}代码详解1:首先,&a表示的是整个数组的地址,其类型是int*[5],(&a+1)表示跳过整个数组的地址,(in原创 2021-09-12 00:31:10 · 1453 阅读 · 17 评论 -
从例题中深入理解数组名的含义
首先,我们先要了解数组名的意义:数组名的意义:sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。&数组名,这里的数组名表示整个数组,取出的是整个数组的地址。除此之外所有的数组名都表示首元素的地址在此再说明一点:strlen-是库函数,求的是字符串长度sizeof-是操作符,单位是字节,是求变量所占空间的大小,或者是求类型创建的变量所占空间的大小。首先来看一维数组:#include <stdio.h> int main(){ int a[]原创 2021-09-03 14:43:51 · 362 阅读 · 7 评论 -
用递归和非递归(图解)两种方式实现字符串的逆序
注意:这里是将参数字符串中的字符反向排列,不是逆序打印。首先,用的是非递归的方法:#include <stdio.h>#include <string.h>void reverse_string(char * str){ int left = 0; int right = strlen(str) - 1; while (left <= right) { char temp = str[left]; str[left] = str[right];原创 2021-08-17 21:15:25 · 433 阅读 · 1 评论 -
深度剖析数据(整形、浮点型)在内存中的存储
1.数据的类型介绍我们在C语言的初级阶段已经了解到数据基本的内置类型都有:char //字符数据类型short //短整型int //整形long //长整型long long //更长的整形float //单精度浮点数double //双精度浮点数 //注意:C语言是没有字符串类型的数据类型的意义是:使用这个类型开辟内存空间的大小(大小决定了使用范围)。如何看待内存空间的视角。1.1 类型的基本归类:整形家族:charunsigned charsigned cha原创 2021-08-13 17:39:24 · 286 阅读 · 2 评论 -
一张图带你深入理解函数栈帧的创建与销毁
当我们在刚开始接触C语言的时候,都会有很多困惑,比如说局部变量是怎么创建的?为什么局部变量的只是随机的?函数是怎么传参的?传参的顺序又是怎么样的?形参和实参是什么关系?函数调用是怎么做的?函数调用结束后又是怎么返回的?......等等问题。 其实,这些问题都与函数栈帧的创建与销毁有关,我们理解了函数栈帧的创建与销毁也就明白了上述的问题。原创 2021-08-06 20:01:46 · 195 阅读 · 2 评论 -
C语言写一个函数,可以逆序一个字符串的内容。
void reverse(char* ps){ if (ps == NULL) { return ; } char *head =ps; char *end = ps + strlen(ps) - 1; while (head < end) { char temp = *head; *head = *end; *end = temp; head++; end--; }}int main(){ char s[] = "helloWorld"; p原创 2021-08-02 18:30:09 · 318 阅读 · 0 评论 -
求两个数的最大公约数与最小公倍数之和
最小公倍数等于两数之和除以最大公约数#include <stdio.h>#define MAX (m > n) ? n : m;;#define MIN (m > n) ? m : n;int main(){ int m, n,a,b,c=0; scanf("%d %d", &m, &n); a = MAX(m, n); b = MIN(m, n); //求最大公约数b while (c=a%b) { a = b; b原创 2021-07-31 08:59:38 · 477 阅读 · 0 评论 -
用C语言实现将数组A中的内容和数组B中的内容进行交换。(数组一样大)
void exchange(int a[], int b[], int sz){ int i = 0; for ( i = 0; i <sz; i++) { int temp = a[i]; a[i] = b[i]; b[i] = temp; } for ( i = 0; i < sz; i++) { printf("%d ", a[i]); } printf("\n"); for (i = 0; i < sz; i++) { printf(原创 2021-07-30 15:24:59 · 181 阅读 · 0 评论 -
C语言初学者就可以实现的简单扫雷游戏
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码原创 2021-07-29 19:39:28 · 244 阅读 · 1 评论 -
关于接口的应用例题
设计一个笔记本电脑类,属性随意,并且进行属性私有化,对外提供公开的set和get方法。设计一个可插拔的接口:InsertDrawable,该接口有什么方法自行定义。设计一个鼠标类,实现InsertDrawable接口,并实现方法。设计一个键盘类,实现InsertDrawable接口,并实现方法。设计一个显示器类,实现InsertDrawable接口,并实现方法。设计一个打印机类,实现InsertDrawable接口,并实现方法。在“笔记本电脑类”中有一个InsertDrawable接口属性,原创 2021-03-25 19:02:16 · 257 阅读 · 0 评论 -
常用的DOS命令
常用的DOS命令DOS命令:DOS窗口打开:windows键+R:可以打开运行窗口,在窗口中输入cmdmkdir abc:创建一个目录,起名abc(make directory)常见的DOS命令:退出:exit清屏:cls复制DOS窗口内内容:在DOS窗口任意位置点击右键,选择标记,接下来选中要复制的内容,在DOS窗口任意位置点击鼠标右键此时被复制的内容已经到复制板了。在需要粘贴的位置上,dir:列出当前目录下所有子文件/子目录cd:change directory 改变目录cd 目录原创 2021-01-27 18:05:48 · 213 阅读 · 0 评论