- 博客(13)
- 收藏
- 关注
原创 java线程状态
状态变化简易图实例化│▼NEW (新建)│▼│ (可运行) │ ││ │ ││ │ 竞争锁失败 ││ ▼ ││ BLOCKED (阻塞) ││ │ ││ │ 获取到锁 ││ ▼ │▼ │ │WAITING (无限等待) ││ │ │▼ ▼ │TIMED_WAITING (超时等待) ││ │ ││ │ 超时/被唤醒 │││ 执行完成▼TERMINATED (终止)
2025-05-08 16:15:48
576
原创 Thread类的基本用法
每个Thread对象,只能start一次,因此上每次想创建一个新线程必须创建一个新的Thread类1.1继承Thread类@Overridet.start();// 注意是调用start()而不是run()*必须重写run()方法;通过start()方法启动新线程;不能直接调用run()方法,这样不会创建新线程1.2、实现 Runnable 接口@Overridet.start();1.3、使用Lambda 表达式});t.start();
2025-05-04 22:39:00
619
原创 栈和队列相关实现
思路:入栈:1、普通栈一定要放,最小栈放的原则是,如果最小栈为空,则放;模拟出队:判断第二个栈是不是空的,如果是,直接取出栈顶元素,如果不为空,将栈1中元素全部放到栈2,取出栈顶元素。模拟出栈:把不为空的队列中size-1个元素放到另一个队列中,最后剩下的这个就是我们模拟出栈的元素。如果采用尾插法入栈:入栈时间复杂度O(n),如有last,为O(1),但是出栈一定是O(n)(1)队列实现栈:两个队列,模拟入栈:放到不为空的队列当中;(2)用栈实现队列:两个栈,模拟入队:放到第一个栈;
2025-05-01 20:07:32
448
原创 进程与线程
总结:进程是资源分配的单元,线程是CPU调度的单元;3、eg浏览器的一个标签页可能用一个线程加载页面,另一个线程播放视频,共享浏览器的内存空间。1、性能:线程切换比进程切换快得多,适合高并发任务(如Web服务器处理大量请求)。3、eg同时运行的浏览器和音乐播放器是两个独立的进程,它们的内存和资源完全隔离。1、多进程:需要高稳定性(如浏览器每个标签页独立进程)、隔离性(如安全沙箱)。2、多线程:需要高效协作(如游戏渲染+逻辑线程)、高并发(如数据库连接池)。:一个进程崩溃通常不会影响其他进程(稳定性高);
2025-05-01 19:33:24
361
原创 数据结构第六章 树和二叉树
1、定义:给定n个结点的集合,结点编号为1~n,再给定一个等价关系,由等价关系产生所有结点的一个划分,每个结点属于一个等价类,所有等价类是不相交的。若它有左孩子结点,将左孩子结点进队。(2)在森林T中选取两棵根结点权值最小的子树作为左、右子树构造一棵新的二叉树,且置新的二叉树的根结点的权值为其左、右子树上根的权值之和。度为1的结点称为单分支结点,度为2的结点称为双分支结点,依次类推。(1)、满二叉树:所有分支结点都有左孩子结点和右孩子结点,并且叶子结点都集中在二叉树的最下一层,这样的二叉树称为满二叉树。
2024-05-04 19:32:13
715
1
原创 第五章 递归(数据结构)
(2)执行pow(x,10)的递归调用顺序是: pow(x,10) → pow(x,5) → pow(x,2) → pow(x,1) 共发生4次递归调用。设大问题Hanoi(n,x,y,z)的执行时间为T(n),则小问题Hanoi(n-1,x,y,z)的执行时间为T(n-1)。设大问题Hanoi(n,x,y,z)的占用空间为S(n),则小问题Hanoi(n-1,x,y,z)的占用空间为S(n-1)。(2)每次执行递归调用之前,把递归函数的值参和局部变量的当前值以及调用后的返回地址进栈。
2024-04-22 23:10:06
2620
原创 指针的相关实现
回调函数就是一个通过函数指针调用的函数。如果把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,被调用的函数就是回调函数例如:使用函数指针实现计算器:首先我们需要定义四个运算函数:返回两个整数的和。:返回两个整数的差。:返回两个整数的乘积。:返回两个整数的商。menu():打印出计算器的菜单选项。:接受一个函数指针作为参数,然后提示用户输入两个操作数,并调用该函数指针指向的函数来计算结果,最后打印结果。定义一个整型变量input,用于存储用户的选择。
2024-04-19 21:09:16
324
1
原创 第四章 串和数组(数据结构python)
an-1),其中,A是数组名,ai(0≤i≤n-1)是数组A中序号为i的元素。,a0,n-1],…KMP算法的下一次比较si/tnext[1],而next[1]=0,并且t0=t1,说明一定有si≠tnext[1] nextval[j]=nextval[next[j]]=-1。(1)如果有tj=tk成立,可以直接推出si≠tk成立,没有必要再做si/tk的比较,直接置nextval[j]=nextval[k](nextval[next[j]]),即下一步做si/tnextval[j]的比较。
2024-04-16 16:39:42
552
1
原创 第三章 栈和队列
1.1、栈(stack)是一种只能在同一端进行插入或删除操作的线性表。表中允许进行插入、删除操作的一端称为栈顶(top),表的另一端称为栈底(bottom)。栈的插入操作通常称为进栈或入栈(push),栈的删除操作通常称为退栈或出栈(pop)。1.2、主要特点① 后进先出,即后进栈的元素先出栈。② 每次进栈的元素都作为新栈顶元素,每次出栈的元素只能是当前栈顶元素。③ 栈也称为后进先出表或者先进后出表。
2024-04-02 15:08:42
780
1
原创 深入理解指针
数组传参的本质是传递了数组首元素的地址,所以形参访问的数组和实参访问的数组是同一个数组的,函数形参的部分理论上应该是使用指针变量来接收首元素的地址,在函数内部sizeof(arr)计算的是一个地址的大小,而不是数组的大小,正是因为函数的参数部分的本质是指针,所以函数内部是没办法求数组元素个数的。函数指针变量应该是存放函数地址的,未来通过地址能够调用函数的,函数名就是函数的地址,当然也可以通过&函数名来获得函数的地址,如果要将函数的地址存放起来,就得创建函数指针变量,函数指针变量的写法和数组指针非常类似。
2024-03-28 16:36:24
740
1
原创 第二章 线性表
线性表是具有相同特性的数据元素的一个有限序列。特征:所有数据元素类型相同。线性表是有限个数据元素构成的。线性表中数据元素与位置相关,即每个数据元素有唯一的序号。
2024-03-25 21:40:00
1492
原创 数据结构第一章
所涉及的数据元素的集合以及数据元素之间的关系,由数据元素之间的关系构成结构*算法是对特定问题的求解步骤的一种描述1、数值类型:int ,float,bool,complex*python内置的type()函数可以用来查询变量所指的对象类型*数值类型是不可变的数据类型2、字符串类型(1)字符串运算符+:字符串连接,a+b:"HelloPython"*:重复输出字符串,a*2:"HelloHello"[ ]:通过索引获取字符串中的字符,a[1]=e。
2024-03-18 16:17:50
1995
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人