- 博客(26)
- 收藏
- 关注
原创 基于比较的常见排序方式
几种常见的基于比较的排序方式排序简介交换排序1.冒泡排序思想:两个相邻元素两两比较,依次向后,一趟确定一个元素位置。说明:冒泡排序有两层循环,第一层循坏是确定比较趟数,第二层循环确定元素位置,每确定一个元素的位置,检索数组长度减少一位。实例:这个数组其实第六趟已经有序了,但是程序还是会继续比较下去,因而可以设置一个状态值来判断数组是否已经有序,读者可以自行编写代码,这里不再展开。代码:public void bubbleSort(int[] array){ for (int
2021-09-20 12:05:50
1858
3
原创 验证尼科彻斯定理
验证尼科彻斯定理尼科彻斯定理:任何一个整数 m 的立方都可以写成 m 个连续奇数之和。例如:1^3=12^3=3+53^3=7+9+114^3=13+15+17+195^3=21+23+25+27+296^3=31+33+35+37+39+41通过观察我们不难发现:最中间的数总是 m 的平方,只不过是偶数的话,就向两边取值。奇数的数量等于 m 的值。思路:想到这里,问题就好解决了,就只有一个难点,那就是怎么得到 m 的值,注意由于通过Math类的pow方法,返回的是浮点数,且由
2021-08-30 13:36:26
734
原创 图书管理系统
图书管理系统这里我们主要是了解面向对象的思想,功能方面可能不那么如尽人意(如果想要更全面的功能,可自行优化)。这里实现的图书管理系统分为管理用户端和普通用户端。下面是他们的操作。管理用户端:查阅书籍增加书籍删除书籍打印书籍列表退出普通用户端:查询书籍借阅书籍归还书籍退出图书管理系统要有书,那么我们首先创建一个 Book 类,它存储着一本书的基本信息。代码如下:package book;public class Book { private String n
2021-06-20 15:18:37
530
原创 面向对象的三大特性之一:多态
多态多态: 一个对象可以指向多种实际类型,同一个事件发生在不同的对象上会产生不同的结果。动态绑定: 对象在运行时能够认知自己的本质类型。例:Animal类public class Animal { protected String name; public Animal(String name) { this.name = name; } public void eat() { System.out.println(this.na
2021-05-30 20:13:51
246
原创 对面对象的三大特性之一:继承
继承继承: 子类继承父类,使得子类拥有父类中的成员变量与方法的属性的行为。例如动物(Animal)都有名字,都会吃饭。而猫(Cat)不仅有名字,还有颜色,会吃饭,它还会跑;而鸭子(Duck)不仅有名字,会吃饭,还会游泳和飞。那么此时动物与猫和鸭子就达到了继承的关系。此时,Animal 这样被继承的类,我们称为 父类 , 基类 或 超类, 对于像 Cat 和 Duck 这样的类,,我们称为 子类,子类会继承父类的字段和方法,,以达到代码重用的效果。语法:class 子类 extends 父类 {
2021-05-26 17:18:02
122
原创 面对对象的三大特性之一:封装
封装封装:将一些需要的字段或方法,使用private关键字进行修饰,同时提供对应的get方法和set方法来提供给外部。封装的意义:数据的安全性。类的调用者对类的使用成本降低了,相应的开发效率更高。我们先看一个不进行封装的代码:Person类class Person { public String name; public int age; public Person(String name, int age) { this.name = name;
2021-05-26 15:21:18
94
原创 双链表
双链表双链表无非就是在单链表上加了一个尾指针,操作过程与单链表类似,在这里将不再赘述,如果需要可以查看上篇单链表的博文,。Node类public class Node { public int value; public Node prev; public Node next; public Node(int value) { this.value = value; }}LinkedList类public class LinkedLis
2021-05-13 19:24:23
91
原创 顺序表
顺序表的原理:我们操作顺序表时,无非就是对顺序表的长度进行操作,例如我们删除顺序表一个元素时,要将顺序表长度 - 1,然而数组的真实长度并没有改变。又例如当我们打印顺序表时,必须是以顺序表的长度size操作,而不是以数组本身长度data.length操作,我们要牢记要拿着顺序表的长度size操作一切。我们在MyArrayList类中存放顺序表的内容public class MyArrayList { public int[] data; //用数组存放数据 public int
2021-05-09 15:37:57
175
原创 单链表
我们在Node类中实现单链表的每个节点的内容public class Node { public int value; //节点的数据 public Node next; //节点的引用 //导入节点数据,next不需要初始化,默认为null public Node(int value) { this.value = value; }}为了只有一个头结点,我们在另外一个MylinkedList类中创建一个头结点public clas
2021-05-09 14:48:56
175
原创 汉诺塔
汉诺塔问题1. 我们先在hanoi方法里实现汉诺塔的基本移动逻辑2. 再在hanoiMove方法里实现具体的移动过程import java.util.Scanner;public class test{ //移动过程 public static void hanoiMove(char pos1,char pos2){ System.out.print(pos1+" -> "+pos2+" "); } //汉诺塔基本实现逻辑 publi
2021-04-12 20:02:36
106
原创 通讯录小程序
用C语言实现通讯录首先利用结构体创建人员的基本信息代码如下struct PeoInfor{ char name[20]; //姓名 int age; //年龄 char sex[10]; //性别 char telephone[15]; //电话号码 char address[20]; //居住地址};再用一个结构体来创建通讯录代码如下struct Contact{ struct PeoInfor* data
2021-04-07 19:44:26
4385
原创 结构体大小的计算
结构体大小的计算在计算结构体大小我们知道一个概念,那就是对齐数。几乎每个编译器都有一个对齐数,不同的编译器默认的对齐数不同,VS中的对齐数默认为8。规则第一个成员在与结构体变量偏移量为0的地址处其他成员变量要对齐到某个数字(自己的对齐数)的整数倍的地址处结构体总大小为最大对齐数(每个成员都有一个对齐数)的整数倍如果嵌套了结构体,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小为所有最大对齐数(含嵌套结构体的对齐数)的整数倍...
2021-04-05 15:13:43
166
原创 库函数memmove的模拟实现
库函数memmove的模拟实现值得注意的地方就是由于memmove函数继承了memcpy函数的功能,可以交换任意数据类型,其实就是拿到要拷贝的数据首地址的每个字节依次向后拷贝到目标数据,所以拷贝时要强制转换成char类型。拷贝前要保存目标数据的地址,以防后续操作改变地址位置。注意由于memmove实现了memcpy函数不能实现的重叠拷贝,但我们实现memmove函数时,重叠拷贝如果没有处理好会造成数据覆盖的问题。例如:char arr[] = “abcdefg”;my_memmove(arr+
2021-03-30 19:32:05
123
原创 库函数memcpy的模拟实现
库函数memcpy的模拟实现值得注意的地方就是由于memcpy函数可以交换任意数据,其实就是拿到要拷贝的数据首地址的每个字节依次向后拷贝到目标数据,所以拷贝时要强制转换成char类型。拷贝前要保存目标数据的地址,以防后续操作改变地址位置。#include<stdio.h>#include<string.h>#include<assert.h>void* my_memcpy(void* dest, const void* src,size_t size){
2021-03-30 18:57:31
127
原创 库函数strstr的模拟实现
库函数strstr的模拟实现注意strstr函数在从父串中找子串时,可能会遇到一开始字符串相同而后续不同的情况,比如在ababcefg中寻找子串abc,第一次比对后没有找到,比对后父串的指针指在第四个元素,而子串的指针是回到首地址,我们下次就要从父串的第二个元素开始寻找,这时我们可以在寻找过程的外面保存父串的地址,没有找到,指针就加一,子串指针就重新从首地址开始,两个指针重新开始比对。strstr函数没有在父串中找到子串,返回空指针NULL。#include<stdio.h>#inc
2021-03-30 15:45:50
89
原创 库函数strcmp的模拟实现
库函数strcmp的模拟实现注意strcmp函数比较字符串大小是按着两个地址的首元素往后一个一个的比,如果不相等就直接输出结果,与字符串长度无关。字符串比较的是字符对应的ASCLL值。#include<stdio.h>#include<string.h>#include<assert.h>int my_strcmp(const char* str1, const char* str2){ assert(str1 && str2); w
2021-03-30 15:11:31
174
原创 库函数strcat的模拟实现
库函数strcat的模拟实现因为我们字符串连接之后,连接目标的地址并没有发生变化,这里只要注意函数的返回值是我们连接的目标首地址就好了,因此我们一开始要保存连接目标的地址,以防后续计算地址发生变化而无法对应输出。#include<stdio.h>#include<string.h>#include<assert.h>char* my_strcat(char* dest, const char* src){ assert(dest && s
2021-03-30 15:01:09
251
原创 库函数strcpy的模拟实现
库函数strcpy的模拟实现这里只要注意函数的返回值是我们拷贝的目标首地址就好了,因此我们一开始要保存拷贝目标的地址,以防后续计算地址发生变化而无法对应输出。#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<assert.h>char* my_strcpy(char* dest, const char* src){ assert(dest &&
2021-03-30 14:51:00
109
原创 库函数strlen的模拟实现
库函数strlen函数的模拟实现这里我们用三种方法实现一般而言都定义一个计数器来计算字符串长度,如果不是’\0’,就加一。我们也可以用递归的方式来计算,如果第一个字符不是’\0’,就用一加上后面再调用函数,直到遇到’\0’为止。我们也可以用指针独特的计算方式来计算,也就是指向同一块内存的两个指针相见,就可以得到元素的个数。#include<stdio.h>#include<string.h>#include<assert.h>//指针size_t m
2021-03-30 14:39:01
207
4
原创 sublime执行java程序
sublime上的java程序通过电脑命令执行我们安装好JDK和基本配置后,我们首先在sublime中写好java程序。假如我们写的是一个HelloWorld.java的文本文档如图我们用sublime打开 并写入以下代码public class HelloWrold{ public static void main(String[] args){ System.out.println("HelloWrold!"); }}然后我们让电脑执行相应的命令即可执行代码我们先输入WIN+R
2021-03-28 15:49:32
1807
2
原创 用编程来做逻辑题
用编程来做逻辑题怎样用程序来实现编程题呢?最暴力的方法当然是穷举了,我们可以利用计算机超快的计算能力来实现。下面是两个例子第一题5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。代码如下#include<stdio.h>int main(){ int A = 0; int
2021-03-28 14:47:22
810
原创 库函数sqort的模拟实现
库函数sqort的模拟实现库函数sqort的原型void my_sqort(void* base, size_t num, size_t width, int(*compare)(const void* e1,const void* e2))该函数返回类型是void,我们只需要在sqort函数中排好序打印即可。第一个参数base是需要排序的数据的首地址,因为该函数本身并不知道需要排什么类型的数据,所以类型是void,以便后续的强制类型转换。第二个参数num需是要排序数据元素的个数,类型是无符号
2021-03-25 20:59:18
310
原创 扫雷小游戏
用C语言实现扫雷小游##用C语言实现扫雷我们有两个难点怎么布置棋盘怎么扫雷第一个问题我们可以用数组来存放棋盘的信息,这里我们要在棋盘上放置雷的信息和玩家排查出雷的信息。假如我在原棋盘上布置10个雷,因为棋盘打印使用空字符来初始化,这里我们用字符‘1’来表示雷,为了后面方便计算雷的剩余数量,我们将不是雷的地方布置‘0’。我们排雷时随机点击一位置,如果该位置不是雷,我们就要计算这个位置周围雷的数量,如果这个位置周围只有1个雷,那后续显示的话,那到底是雷呢还是雷的数量呢?为了更好的为后续操作,我们这
2021-01-30 15:12:51
247
原创 三字棋小游戏
用C语言来实现三字棋小游戏我们可以分为如下几个步骤:创建数组,用来保存棋盘打印棋盘下棋(玩家和电脑)判断输赢首先,我们为了方便代码的优化,先创建个test函数来放置大致轮廓。代码如下int main(){ test(); return 0;}我们在test函数中实现大致轮廓代码如下void test(){ int input = 0; //这里srand函数是为了后面的电脑随机下棋用的 srand((unsigned int)time(NULL)); do {
2021-01-27 18:56:55
256
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人