- 博客(40)
- 收藏
- 关注
原创 (Java)队列
只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(FirstIn First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列:进行删除操作的一端称为。
2024-04-25 12:24:17
792
原创 进程和线程之间的区别和联系
线程是指进程内的一个执行单元,也是进程内的可调度实体.进程和线程的主要差别在于它们是不同的操作系统资源管理方式。而线程只是一个进程中的不同执行路径,线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间, 一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。6.系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销(线程比进程更轻量,不仅创建快,其销毁也快)。(1)二者均可并发执行.
2024-04-02 15:41:37
639
原创 如何创建线程
4.实现runnable,重写run,匿名内部类。3.继承Thread,重写run,匿名内部类。2.实现Runnable,重写run。1.继承Thread,重写run。5.lambda 表达式[推荐]
2024-03-27 11:24:08
223
1
原创 (Java)栈
进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,出栈:栈的删除操作叫做出栈。一种特殊的线性表,其。
2024-01-02 19:21:50
409
原创 LinkedList的模拟实现
所以,这里直接让cur走两步,走到2号节点位置,然后让cur.prev.next=node(node是0x123),这里要注意以下, 因为在单向链表中,我们说过在这种情况下进行插入的时候要先绑定后面,在看前面,所以这里也是同样的道理,这里不能先让前面的cur.prev.next=node,而是先让node.next=cur,这就把0x123的next修改成了0x78,然后再让cur.prev.next=node,紧接着让node.prev=cur.prev,然后让cur.prev=node即可。
2023-12-06 16:31:23
57
原创 链表面试题
1. 删除链表中等于给定值 val 的所有节点。OJ链接这个就相当于removeAllKey./** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, Lis
2023-11-16 14:27:30
95
原创 扑克牌游戏(数据结构(顺序表))
而通过上面的打印结果,我们知道,此时的牌是有顺序的,而我们要把它洗乱。这里我们定义一个i下标,让他从后往前走(如果从前往后走就比较麻烦,因为不知道传几合适,当i=0下标时时,如果传51,生成0-50,包含0自己了...所以让他从后往前走,每次生成一个随机数跟i交换就可以了),当=51时,就生成0-50的随机数,让其i=50,就生成0-49的随机数。现在本质上来说,相当于我们所有的牌都在如下这个数组里面。1.生成一副扑克牌(问题:放到哪里?(问题:怎么抓牌,抓的牌放到哪里?
2023-10-25 09:27:07
185
原创 杨辉三角(数据结构(顺序表))
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。提示:1 <= numRows <= 30。输入: numRows = 5。输入: numRows = 1。
2023-10-25 09:26:49
48
原创 ArrayList简介
在这个代码中int minCapacity就是10,在if语句中minCapacity为10,因为根本没有分配内存,所以数组elementData.length的长度为0,这里10减0一定是大于0的,所以它又调用了grow方法,grow是成长的意思,所以它就是一个扩容方法。ArrayList是一个数组列表,他的底层实现是Object数组 ,但与Java中数组相比,它相当于一个动态扩容的数组,但我们实例化他时,并没有为这个数组申请空间,只是在添加数据时,为其开辟一个数组长度为10的数组。
2023-10-18 22:54:03
77
原创 顺序表(原理)
这里肯定会有人脱口而出,三个。这个是要分情况的,对于当前这里面如果放的是基本数据类型,直接将usedSize置为i0,如上图,如果usedSize为0,再来一个新的数据也没关系,因为新数据会把 21盖掉,因为他每次都在往usedSize位置放,所以对于当前代码,直接将usedSize=0就好,不管它里面有些撒数据,没关系。这里我们要知道,不合法要返回一个值,接收一下返回值,返回,然后结束这个方法,不能再继续往下执行了,而且如上,打印一个不合法这件事情,当打印的比较多的时候,可能会找不到,那应该怎么办呢?
2023-10-17 22:22:11
95
原创 包装类&简单认识泛型
就是说如果i在[-128,127]这个范围里面,可直接去某个下标拿(如上图红色框里面的值),因为都在这个数组中,所以相等,如果不在这个数组范围中,就去new,而每次new就会产生新的对象,新的对象会产生新的地址,所以a1和b1的地址不一样,他们就不想等。所以,我们当前这样写有一个不好的地方,虽然它什么类型都可以放,但是他放的太乱了,而且每次取的时候都要强转。为什么学包装类,是因为如上代码过程中不能放基本类型,不然会报错,所以这个过程中只能放包装类或引用类型,这就叫泛型,所以什么是泛型呢?
2023-10-07 23:38:24
37
原创 Comparable和Comparator区别
Comparable和Comparator都可以用来进行比较、排序。Comparable可以直接在需要进行排序的类中实现,重写compateTo(To)方法;而Comparator需要另外顶一个实现Comparator接口的实现类来作为“比较器”。二者各有优缺点,用Comparable简单,只要实现Comparable 接口的对象直接就成为一个可以比较的对象,但是需要修改源代码。
2023-09-20 23:49:19
44
原创 认识异常(Java)
Java 中虽然已经内置了丰富的异常类, 但是并不能完全表示实际开发中所遇到的一些异常,此时就需要维护符合我们实际情况的异常结构.例如, 我们实现一个用户登陆功能.if (!if (!System.out.println("登陆成功");此时我们在处理用户名密码错误的时候可能就需要抛出两种异常. 我们可以基于已有的异常类进行扩展(继承), 创建和我们业务相关的异常类.具体方式:1. 自定义异常类,然后继承自Exception 或者 RunTimeException。
2023-08-14 10:53:48
34
原创 String 类(Java)
由于String的不可更改特性,为了方便字符串的修改,Java中又提供StringBuilder和StringBuffer类。这两个类大部分功能是相同的,这里介绍 StringBuilder常用的一些方法,其它需要用到了大家可参阅/追加:即尾插-->字符、字符串、整形数字/ hello/true/ 获取0号位上的字符 h/ 获取字符串的有效长度14/ 获取底层数组的总大小/ 设置任意位置的字符 Hello world123!!");!!/ 获取Hello第一次出现的位置。
2023-08-14 09:54:48
31
原创 继承和多态(Java)
Java中使用类对现实世界中实体来进行描述,类经过实例化之后的产物对象,则可以用来表示现实中的实体,但是现实世界错综复杂,事物之间可能会存在一些关联,那在设计程序是就需要考虑。比如:狗和猫,它们都是一个动物。通过观察上述代码会发现,猫和狗的类中存在大量重复,如下所示:那能否将这些共性抽取呢?
2023-08-13 19:53:36
129
原创 类和对象(Java)
面相对象程序设计关注的是对象,而对象是现实生活中的实体,比如:洗衣机。但是洗衣机计算机并不认识,需要开发人员告诉给计算机什么是洗衣机。上图左侧就是对洗衣机简单的描述,该过程称为对洗衣机对象(实体)进行抽象(对一个复杂事物的重新认知),但是这些简化的抽象结果计算机也不能识别,开发人员可以采用某种面相对象的编程语言来进行描述,比如:Java语言。/创建类field;/字段(属性) 或者 成员变量method;/行为 或者 成员方法class为定义类的关键字。
2023-08-13 19:25:23
85
原创 数组的定义与使用(Java)
数组:可以看成是相同类型元素的一个集合。在内存中是一段连续的空间。比如现实中的车库:在java中,包含6个整形类型元素的数组,就相当于上图中连在一起的6个车位,从上图中可以看到:1. 数组中存放的元素其类型相同2. 数组的空间是连在一起的3. 每个空间有自己的编号,其实位置的编号为0,即数组的下标。那在程序中如何创建数组呢?
2023-08-12 18:54:34
363
原创 方法的使用(Java)
方法语法格式// 方法定义修饰符 返回值类型 方法名称([参数类型 形参 ...]){方法体代码;[return 返回值];public static 返回值类型 方法名(形式参数列表) {方法体;(方法名随便取)方法名采用小驼峰(形式参数列表)可能有多个列表,如:sum(int a,int b) 注意:每一个参数都要加类型当public static 返回值类型 方法名(形式参数列表) {中有返回值类型的时候一定要return这个类型,不然就会报错,如:return a+b;
2023-08-12 17:30:17
117
1
原创 运算符(Java)
计算机的最基本的用途之一就是执行数学运算,比如:int a = 10;int b = 20;a + b;a < b;上述和等就是运算符,即:对操作数进行操作时的符号,不同运算符操作的含义不同。作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。Java中运算符可分为以下:算术运算符(+ - */)、关系运算符(< > ==)、逻辑运算符、位运算符、移位运算符以及条件运算符等。
2023-08-09 17:12:43
74
原创 初识Java
在main方法里面要注意几个点:1.类名要大驼峰(就是如果有两个单词,每个单词的首字母大写。2.一个Java文件可以有多个类,只能有一个public修饰的类。(所以 (public class HelloWorld{)中这个public可加可不加。
2023-08-07 10:23:21
27
原创 指针的进阶(c语言)
1. 字符指针2. 数组指针3. 指针数组4. 数组传参和指针传参5. 函数指针6. 函数指针数组7. 指向函数指针数组的指针8. 回调函数9. 指针和数组面试题的解析指针的主题,我们在初级阶段的《指针》章节已经接触过了,我们知道了指针的概念:1. 指针就是个变量,用来存放地址,地址唯一标识一块内存空间。2. 指针的大小是固定的4/8个字节(32位平台/64位平台)。3. 指针是有类型,指针的类型决定了指针的+-整数的步长,指针解引用操作的时候的权限。4. 指针的运算。这个章节,我们
2023-08-06 17:08:34
37
原创 数据在内存中的存储(c语言)
前面我们已经学习了基本的内置类型(内置类型指c语言本身具有的):char//字符数据类型(1个字节)short//短整型(2个字节)int//整形(4个字节)long//长整型(4/8个字节)long long//更长的整形(8个字节)float//单精度浮点数(4个字节)double//双精度浮点数(8个字节)//C语言有没有字符串类型?以及他们所占存储空间的大小。#include/这个头文件就限定了整形能表示的最大值/最小值。
2023-07-26 08:51:47
193
1
原创 详解二进制,八进制,十进制十六进制的相互转换
这个数字代表了200+30+5的和,换种方式就5x10的0次方+3x10的1次方+2x10的二次方。
2023-07-26 08:51:22
316
1
原创 练习(错题)
计算1/1-1/2+1/3-1/4+1/5 ……+ 1/99 - 1/100 的值,打印出结果。将数组A中的内容和数组B中的内容进行交换。【一维数组】交换数组。
2023-07-19 10:23:33
121
原创 函数的栈帧的创建和销毁(c语言)
pop ebp,指弹出一个指令放到ebp里面去,弹出的是如下图红色框,而他存的是main函数的ebp的地址,这个地址存在这,就是当我们函数返回之后随着Add函数栈帧的销毁,我们能很容易找到main函数的栈顶,但是找不到main函数的栈底,所以把栈底存在这里,当esp走到这里的时候,pop一下,把结果弹出,弹到ebp里面去,这个时候,就意味着ebp走了,回到如下图位置。第一段代码中,call(调用的意思),(此时按F11观察),你会发现,call调用的是第二条代码的地址003518F7。
2023-07-09 20:18:41
149
2
原创 实用调试技巧(c语言)
第一次被发现的导致计算机错误的飞蛾,也是第一个计算机程序错误。注:参考资料Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。(在vs左上角,调成Debug就是调试版本,调成Release是发布版本)int main()int i = 0;for (i = 0;i < 10;i < 10;i++)
2023-07-07 11:00:28
106
1
原创 结构体(c语言)
有了结构体类型,那如何定义变量,其实很简单。这里想要创建struct S结构体变量,有三种方式:1struct Sint a;int* p;直接此类型创建,如s1(初始化了)(全局变量)2(全局变量)(初始化了)3int mian()(这样写是错误的,这里无法确定顺序)(这样写,自定义了顺序,以.的方式确定成员,然后把值放进去).是成员访问操作符,顺序自定义return 0;这里要初始化B,先初始化ch,再初始化s,再初始化dstruct Sint a;int* p。
2023-05-24 17:06:48
50
原创 操作符(c语言)
单目操作符只有一个操作数!逻辑反操作- 负值+ 正值& 取地址sizeof 操作数的类型长度(以字节为单位)~ 对一个数的二进制按位取反-- 前置、后置--++ 前置、后置++* 间接访问操作符(解引用操作符)(类型) 强制类型转换!逻辑反操作就是把真变成假,把假变成真应用场景:int main()if (!flag)//flag /为假 打印heheif (flag)
2023-05-15 16:55:37
175
原创 扫雷游戏(c语言)
扫雷》是一款大众类的益智小游戏,于1992年发行。游戏目标是在最短的时间内根据点击格子出现的数字找出所有非地雷的格子,同时避免踩到地雷,踩到一个地雷全盘皆输。
2023-05-09 21:15:16
143
原创 三子棋(c语言)
目录三子棋游戏实现构思:1.游戏不退出,继续玩下一把(循环)2.应用多文件的形式写代码代码的具体实现:1.game.h——游戏函数声明2.game.c——游戏函数的实现3.test.c——游戏的测试前言三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏分为双方对战,双方依次在9宫格棋盘上摆放棋子,率先将自己的三个棋子走成就视为胜利,而对方就算输了,但是三子棋在很多时候会出现和棋的局面。游戏规则:如果两个人都掌握了技巧,那么一般来说就是平棋。
2023-05-08 17:04:23
44
原创 数组(c语言)
1. 一维数组的创建和初始化2. 一维数组的使用3. 一维数组在内存中的存储4. 二维数组的创建和初始化5. 二维数组的使用6. 二维数组在内存中的存储7. 数组越界8. 数组作为函数参数9. 数组的应用实例1:三子棋10. 数组的应用实例2:扫雷游戏数组是一组相同类型元素的集合。数组的创建方式:数组创建的实例:第二个代码中,数组名count是一个变量,在VS2019, VS2022中,这样IDE不支持C99中的变长数组(变长数组是不能初始化的),所以在第二个代码中,数组名应
2023-05-08 11:58:09
1395
1
原创 函数(c语言)
如果库函数能干所有的事情,那还要程序员干什么?所有更加重要的是自定义函数。自定义函数和库函数一样,有函数名,返回值类型和函数参数。但是不一样的是这些都是我们自己来设计。这给程序员一个很大的发挥空间。statement;//语句项ret_type 返回类型fun_name 函数名para1 函数参数我们举一个例子:eg:写一个函数可以找出两个整数中的最大值//get_max函数的设计(x):(y);
2023-05-08 11:56:55
259
1
原创 分支语句和循环语句(c语言)
c语句可分为以下五类:表达式语句函数调用语句控制语句复合语句控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。可分成以下三类:\1. 条件判断语句也叫分支语句:if语句、switch语句;\2. 循环执行语句:do while语句、while语句、for语句;\3. 转向语句:break语句、goto语句、continue语句、return语句。
2023-04-26 06:40:26
390
3
原创 第一篇博客
我认为编程学习应该注重实战,不能只靠一味的听课和眼睛过一遍就感觉自己已经掌握了,这相当于“纸上谈兵”,无法深入了解编程,更无法学好编程。希望自己能端正态度,脚踏实地。我今年大一,是一个特别阳光的女生,喜欢编程,希望以后我们能一起学习,共同进步。2.create的筱的梦最大且希望坚持的梦想:希望在编程方面越来越擅长,参加各种比赛,能拿一些编程相关方面的奖项,能拿到今年的奖学金。因为我现在大一,时间比较充足,我想每天都能去花费一些时间去敲敲代码,让自己慢慢地去了解,慢慢的去深入。短期梦想:坚持,再坚持。
2023-04-02 14:33:50
69
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人