![](https://img-blog.csdnimg.cn/20190927151132530.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java/C 编程语言
代码练习
Josvin
这个作者很懒,什么都没留下…
展开
-
C语言基于柔性数组实现通讯录(变长版本)
基础背景基于上次定长版本对通讯录升级(可参考下边博客):C语言实现通讯录(定长版本)C语言:动态内存管理代码不是特别细节,有些部分没有写,可参考定长版本完善main.c#include "contact.h"static void Menu() { printf("###############################\n"); printf("# 1. add 2. del 3. search #\n"); printf("# 4. mod 5. show原创 2020-12-20 21:29:43 · 389 阅读 · 0 评论 -
【每日一题】力扣316.去除重复字母
题目描述(传送门)给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。示例示例 1:输入:s = "bcabc"输出:"abc"示例 2:输入:s = "cbacdcbc"输出:"acdb"思路这里首先来看看代码import java.util.ArrayDeque;import java.util.Deque;/** * @ClassName Demo * @Description $原创 2020-12-20 20:11:24 · 455 阅读 · 0 评论 -
atoi介绍及C语言实现atoi
atoi先来看看官方文档(传送门)接口int atoi (const char * str);Convert string to integerParses the C-string str interpreting its content as an integralnumber, which is returned as a value of type int.The function first discards as many whitespace characters (as i原创 2020-12-20 12:17:01 · 766 阅读 · 1 评论 -
C语言:动态内存管理
动态内存管理为什么存在动态内存管理动态内存函数的介绍malloc](http://www.cplusplus.com/reference/cstdlib/malloc/?kw=malloc)和[freecallocrealloc常见的动态内存错误几个经典的笔试题C/C++程序的内存开辟柔性数组柔性数组的特点:柔性数组的使用柔性数组的优势为什么存在动态内存管理内存开辟的方式有:int val = 20;//在栈空间上开辟四个字节char arr[10] = {0};//在栈空间上开辟10字节连续空间原创 2020-12-19 20:42:25 · 298 阅读 · 1 评论 -
自定义类型:结构体,枚举,联合详细介绍
文章目录结构体结构体的声明结构体的基础知识结构的声明特殊声明结构体的自引用结构体变量的定义和初始化结构体的内存对齐为什么存在内存对齐?修改默认对齐数结构体传参位段什么是位段呢位段内存分配位段的跨平台问题位段的应用枚举枚举类型的定义枚举的优点枚举的使用联合(共用体)联合类型的定义联合的特点联合大小的计算结构体结构体的声明结构体的基础知识结构是一些值的集合,这些值成为成员变量。结构的每个成员可以是不同类型的变量。结构的声明struct tag { member-list;}variable-li原创 2020-12-16 16:04:10 · 279 阅读 · 0 评论 -
C语言实现通讯录(定长版本)
实现目标我们将实现一个定长版本的通讯录,定长指的是通讯录的最大存储为一个固定值,在这里设置为1000.具体实现功能有:添加联系人信息删除指定联系人信息查找指定联系人信息修改指定联系人信息显示所有联系人信息清空所有联系人以名字排序所有联系人main函数main.c主要实现显示一个功能界面,调用各个功能的接口,实现之间的逻辑功能。#include "contact.h"// 添加联系人信息//删除指定联系人信息//查找指定联系人信息//修改指定联系人信息//显示所有联系人原创 2020-12-16 11:27:59 · 324 阅读 · 0 评论 -
字符函数和字符串函数详解
文章目录前言函数介绍strlen介绍strlen实现strcpy介绍strcpy实现strcat介绍strcat实现strcmp介绍strcmp实现继续更新中。。。前言C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串类型通常放在 – 常量字符串 – 中或者–字符数组–中。字符串常量适用于那些对它不做修改的字符串函数。函数介绍strlen介绍size_t strlen ( const char * str );字符串已经’\0’ 作为结束标志,strlen函原创 2020-12-05 23:55:44 · 1303 阅读 · 2 评论 -
qsort函数用法及实现
qsort函数介绍我们可以先看看官网:qsort函数头文件为:stdlib.h实现接口:void qsort (void* base, size_t num, size_t size, int (compar)(const void,const void*));用法:对数组元素排序排序NUM通过指向的数组base,数组元素数量 num,元素大小,使用COMPAR函数来确定的顺序。此函数使用的排序算法(官方底层是基于快排实现的,这个如果自己实现各种排序都是可以的,后边我用最简单的冒泡排序来自己实原创 2020-11-29 23:08:57 · 232 阅读 · 0 评论 -
C语言进阶:深度剖析数据在内存中的存储
[@TOC]1、数据类型介绍C语言的基本内置类型有:char //字符数据类型short //短整型int //整形long //长整型long long //更长的整形float //单精度浮点数double //双精度浮点数//C语言有没有字符串类型?类型的意义:使用这个类型开辟内存空间的大小(大小决定了使用范围)如何看待内存空间的视角类型的基本归类整形家族:char unsigned char signed charshort unsigned short原创 2020-11-28 23:42:03 · 292 阅读 · 2 评论 -
C语言结构体初阶
文章目录结构体类型的声明结构体的基础知识结构的声明结构成员的类型结构体变量的定义和初始化结构体成员的访问结构体传参结构体类型的声明结构体的基础知识结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。结构的声明struct tag{member-list;}variable-list;例如描述一个学生:typedef struct Stu{char name[20];//名字int age;//年龄char sex[5];//性别char id[20];原创 2020-11-12 22:38:19 · 113 阅读 · 0 评论 -
C语言指针初阶
文章目录1、指针是什么?2、指针和指针的类型2.1 指针 + - 整数补充:大端存储&小端存储2.2 指针的解引用3、野指针3.1 野指针的成因3.2 如何规避野指针4、指针运算4.1 指针 + - 整数4.2 指针-指针4.3 指针的关系运算5、指针和数组6、二级指针7、指针数组1、指针是什么?在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。原创 2020-11-10 13:06:40 · 282 阅读 · 0 评论 -
表达式(整形提升)详解
表达式求值表达式求值的顺序一部分是由操作符的优先级和结合性决定。同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型。隐式类型转换C的整型算术运算总是至少以缺省整型类型的精度来进行的。为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。整形提升的意义表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度一般就是int的字节长度,同时也是CPU的通用寄存器的长度。因此,即使两个char类型的相加,在C原创 2020-11-05 10:52:39 · 1171 阅读 · 0 评论 -
操作符详解
操作符和表达式各种操作符的介绍表达式求值操作符分类:算术操作符移位操作符位操作符赋值操作符单目操作符关系操作符逻辑操作符条件操作符逗号表达式下标引用、函数调用和结构成员算术操作符+ - * / %除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。% 操作符的两个操作数必须为整数。返回的是整除之后的余数。移位操作符<< 左移操作符>原创 2020-11-05 10:31:39 · 1745 阅读 · 2 评论 -
C语言数组应用实例2: 扫雷游戏
实现示例实现代码game.h#ifndef _GAME_H_#define _GAME_H_#include<stdio.h>#include<string.h>#include<time.h>#include<windows.h>#define ROW 12#define COL 12#define NUMS 20 //设置雷的个数,可以用来控制游戏的难度#pragma warning(disable:4996)voi原创 2020-11-03 22:19:09 · 227 阅读 · 0 评论 -
C语言数组应用实例1:三子棋
实现结果实现代码总共分为三个文件:1、main.c#include "game.h"// 主函数int main() { int quit = 0; while (!quit) { Menu(); int select = 0; scanf("%d", &select); // 1 开始游戏 // 2 退出游戏 switch (select) { case 1: Game(); break; case 2: printf("quit原创 2020-10-30 21:03:08 · 314 阅读 · 2 评论 -
C语言函数基础
函数主要掌握函数的基本使用和递归函数是什么库函数自定义函数函数参数函数调用函数的嵌套调用和链式访问函数的声明和定义函数递归地址空间函数是什么?数学中我们常见到函数的概念。但是你了解C语言中的函数吗? 百度百科中对函数的定义:函数在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method,subprogram, callable unit),是一个大型程序中的某部分代码, 由一个或多个语句块组成。它负责完成某项原创 2020-10-24 17:20:20 · 377 阅读 · 0 评论 -
C语言中void 和 void * 的区别
1、void 不能用来定义变量,因为void 大小不明确,但是 void *可以,因为是指针类型他的大小总是 4 个字节。win 32 下为0,Linux下为12、void * 不能被直接解引用。3、void * 可以接收任意类型,常用于指针场景。...原创 2020-10-17 23:38:42 · 599 阅读 · 0 评论 -
C语言goto语句简单使用
简单介绍C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程,例如一次跳出两层或多层循环。这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。示例对比#include<stdio.h>int main() { int c = 1; if (c) { goto star原创 2020-10-16 23:12:54 · 24142 阅读 · 7 评论 -
看看HashMap源码理解HashMap的put 方法的执行过程
那我们来看一下源码是怎样实现的public static void main(String[] args) { HashMap<String, Integer> hashMap = new HashMap<>(); hashMap.put("aaaaa", 10); }Ctrl + B 快捷键跳转先计算key 的 hash 值hash(key)hash 本质是个数组,为了把元素存进去,就需要把key 值转成数组下标。我们再看源码原创 2020-08-04 01:10:25 · 416 阅读 · 0 评论 -
华为面试自守数的个数计算(Java实现)
题目描述自守数是指一个数的平方的尾数等于该数自身的自然数。例如:25^2 = 625,76^2 = 5776,9376^2 = 87909376。请求出n以内的自守数的个数代码实现import java.util.Scanner;/** * @ Created with IntelliJ IDEA. * @ClassName TestCalcAutomorphicNumbers * @Description 功能: 求出n以内的自守数的个数 * @Author by * @Date 2原创 2020-05-23 23:25:22 · 664 阅读 · 0 评论 -
Lambda表达式详解
1 背景Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。 Lambda 表达式(Lambda expression)可以看作是一个匿名函数,基于数学中的λ演算得名,也可称为闭包(Closure) 。1.1 Lambda表达式的语法基本语法: (parameters) -> expression 或 (param原创 2020-05-23 00:07:12 · 1524 阅读 · 0 评论 -
Java反射详解
获取类对象的方式1、Class.forName(全限定类名)2、通过实例的getClass方法3、类的.class属性来获取。注:类对象是一个单例对象。class Cat { private String name; public void eat(String food) { System.out.println(name + " 正在吃 " + food); } public Cat(String name) { this.n原创 2020-05-21 23:31:31 · 188 阅读 · 0 评论 -
插入排序 && 希尔排序
插入排序原理整个区间被分为有序区间无序区间每次选择无序区间的第一个元素(bound位置),在有序区间内选择合适的位置插入实现// 以升序排序为例 public static void insertSort(int[] array) { // 有序区间: [0, bound) // 无序区间: [bound, size) for (int bound = 1; bound < array.length; bound++) {原创 2020-05-21 00:36:49 · 142 阅读 · 0 评论 -
Map和Set的使用
搜索搜索,查找,也可称检索,是在大量的数据元素中找到某个特定的数据元素而进行的工作。一般把搜索的数据称为关键字(Key),和关键字对应的称为值(Value),所以模型会有两种:纯 key 模型,即我们 Set 要解决的事情,只需要判断关键字在不在集合中即可,没有关联的 value;Key-Value 模型,即我们 Map 要解决的事情,需要根据指定 Key 找到关联的 Value。Map的使用-- 统计Map.Entry<K, V> 即 Map 中定义的 K 类型的 ke原创 2020-05-12 23:20:53 · 180 阅读 · 0 评论 -
冒泡排序以及优化
#我们看一下比较普遍的代码:public static void bubbleSort(int[] array) {//第一层for循环控制排序的趟数,比如[1,2,3,4],排序这个数组我们要循环3趟,所以结束条件是len-1; for (int i = 0; i < array.length-1; i++) { //第二层for循环是每一趟的交换,比...原创 2020-03-15 19:35:47 · 115 阅读 · 0 评论 -
进制转换
#十进制转二进制方法1:对十进制数不断除2取余,直到商为零为止,逆序排列。 例如: 54 /2 = 27 /2--------0 = 13 /2--------1 = 6 /2---------1 = 3/2 ---------0 = 1 /2---------1 ...原创 2020-02-28 20:11:59 · 564 阅读 · 0 评论 -
变量和运算符
一、变量1.1变量的概念变量指的是程序运行时可以变的量,相当于开辟了一块内存空间来保存一些数据。1.2变量的分类a)整型变量(整型变量由int来定义,在java中一个int占4个字节)b) 长整型变量(长整型变量由long来定义,在java中long占8个字节)c)双精度浮点型变量(双精度浮点型变量由double来定义,在java中double中占8个字节)d)字符类型变量(字符类型...原创 2020-02-26 23:57:43 · 260 阅读 · 1 评论 -
位运算-计算十进制数字转为二进制1的个数
#方法一:类比 a%10 a%2 a/10 a/2 import java.util.Scanner; public class Test9 { public static void main(String[] args) { Scanner scan =new Scanner(System.in); int n=scan...原创 2020-03-07 21:40:42 · 279 阅读 · 0 评论 -
斐波那契(Fibonacci)数列递归算法与非递归算法
#递归算法: 递推方程: f(n) = f(n-1) + f(n-2) ; 递归出口: f(0) = 0, f(1) = 1 ; 时间复杂度O(n^2), 包含大量重复计算复杂度是n方级 空间复杂度O(n), 递归调用栈消耗了一些空间,最大空间与递归深度有线性关系int fib(int n) { if (n < 1) return n? 1: 0 ;...原创 2020-03-17 21:41:26 · 1171 阅读 · 0 评论 -
类和对象的初步认识
#Java是面向对象的语言,简言之,面向对象就是用代码(类)来描述客观世界的事物的一种方式. 一个类主要包含一个事物的属性和行为类# 1、 类就是一类对象的统称。对象就是这一类具体化的一个实例。 2、用类类型创建对象的过程,称为类的实例化 3、 类的成员可以包含以下:字段、方法、代码块、内部类和接口等。 我们通过下边代码来学习: /** * @ Created w...原创 2020-03-20 20:45:14 · 202 阅读 · 3 评论 -
Cloneable接口
Cloneable接口Java 中内置了一些很有用的接口, Clonable 就是其中之一.Object 类中存在一个 clone 方法, 调用这个方法可以创建一个对象的 “深拷贝”. 但是要想合法调用 clone 方法, 必须要先实现 Clonable 接口, 否则就会抛出 CloneNotSupportedException 异常.package com.bit.src1;/** ...原创 2020-04-05 23:02:05 · 230 阅读 · 0 评论 -
面向对象编程--------抽象类和接口
抽象类package com.bit.src2;/** * @ Created with IntelliJ IDEA. * @ClassName TestDemo * @Description 抽象类 * @Author by房 * @Date 2020/4/4 21:43 *//** * 抽象类:包含抽象方法的类,我们把它叫做 抽象类 * 1、用关键字abstract...原创 2020-04-04 23:44:24 · 211 阅读 · 1 评论 -
面向对象编程--------理解多态
理解多态有了面的向上转型, 动态绑定, 方法重写之后, 我们就可以使用 多态(polypeptide) 的形式来设计程序了.我们可以写一些只关注父类的代码, 就能够同时兼容各种子类的情况.代码示例:package com.bit.scr1;/** * @ Created with IntelliJ IDEA. * @ClassName TestDemo2 * @Description...原创 2020-04-04 23:30:20 · 197 阅读 · 1 评论 -
面向对象编程-------多态
多态向上转型通过父类 的引用, 指向一个子类 的实例. 这种写法称为 向上转型#向上转型这样的写法可以结合 is - a 语义来理解.向上转型发生的时机:直接赋值、方法传参、方法返回直接赋值:Animal bird2 = new Bird("圆圆");方法传参:public class Test {public static void main(String[] args)...原创 2020-04-04 00:08:03 · 194 阅读 · 0 评论 -
面向对象编程 -------继承
为什么引入继承代码中创建的类, 主要是为了抽象现实中的一些事物(包含属性和方法).有的时候客观事物之间就存在一些关联关系, 那么在表示成类和对象的时候也会存在一定的关联.例如, 设计一个类表示动物#注意:我们可以给每个类创建一个单独的 java 文件. 类名必须和 .java 文件名匹配(大小写敏感).// Animal.javapublic class Animal { pub...原创 2020-04-03 23:21:10 · 146 阅读 · 3 评论 -
面向对象编程 ------包
包包 (package) 是组织类的一种方式,使用包的主要目的是保证类的唯一性.例如, 你在代码中写了一个 Test 类. 然后你的同事也可能写一个 Test 类. 如果出现两个同名的类, 就会冲突, 导致代码不能编译通过.导入包中的类可以使用 java.util.Date 这种方式引入 java.util 这个包中的 Date 类.public class Test { pu...原创 2020-04-03 22:46:57 · 116 阅读 · 0 评论 -
Java中交换两个数的值
class fun { public int var;}public class TestDemo1 { public static void swap(fun num,fun num1) { int tmp=num.var; num.var=num1.var; num1.var=tmp; } public sta...原创 2020-03-22 22:18:29 · 778 阅读 · 0 评论 -
Java中数组的拷贝方法
#for循环实现数组的拷贝```javaimport java.util.Arrays;/** * @ Created with IntelliJ IDEA. * @ClassName TestDemo6 * @Description * @Author by房文辉 * @Date 2020/3/15 20:02 */public class TestDemo6 { ...原创 2020-03-15 22:01:04 · 124 阅读 · 0 评论 -
C/java中交换两个数的值,引用
#两个数的交换首先我们先来看这样一个代码public static void main(String[] args) { int a = 10; int b = 20; System.out.println("交换前"+a+" "+b); System.out.println("===================="); int tmp=a; ...原创 2020-03-14 19:54:31 · 463 阅读 · 0 评论 -
对于Java中方法、方法重载、方法递归的理解
#什么是方法方法就是一个代码片段. 类似于 C 语言中的 "函数".#方法存在的意义:1.是能够模块化的组织代码(当代码规模比较复杂的时候).2.做到代码被重复使用, 一份代码可以在多个位置使用.3.让代码更好理解更简单.4.直接调用现有方法开发, 不必重复造轮子#方法的语法结构 // 方法定义public static 方法返回值 方法名称([参数类型 形参 ...]){...原创 2020-03-13 13:08:47 · 151 阅读 · 0 评论