自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

大桔骑士的学习笔记

bilibili:大桔骑士v

  • 博客(680)
  • 资源 (5)
  • 收藏
  • 关注

原创 【算法学习笔记】33:快速幂的递归及循环实现

要计算ababmodp,可以考虑用折半的方式缩小计算量。例如要计算213,只要计算26乘以自己,再乘以一个多出来的2。而要计算26,只要计算23乘以自己。而要计算23,只要计算21乘以自己,再乘以一个多出来的2。也就是每次把b折半下取整,当baba2b​⋅a2b​当b是奇数时只要多乘以一个aaba2b​⋅a2b​⋅a如果需要对p取模,只要在每一步乘法之后取模就可以了。

2025-01-18 00:15:17 1019

原创 【算法学习笔记】32:筛法求解欧拉函数

上节学习的是求一个数n的欧拉函数,因为用的试除法,所以时间复杂度是On​,如果要求m个数的欧拉函数,那么就会花Omn​的时间。如果是求连续一批数的欧拉函数,可以用筛法进行优化。

2025-01-15 21:54:42 998

原创 【算法学习笔记】31:试除法分解质因数及求解欧拉函数

欧拉函数ϕn\phi(n)ϕn表示从1到n中和n互质的数字的个数,两个数字除了1没有其它公因数就是互质。比如从1到6之间和6互质的数字只有1和5,所以phy62phy(6) = 2phy62。设nnnnp1α1p2α2pkαknp1α1​​p2α2​​..pkαk​​ϕnn⋅1−1p1⋅1−1p2⋅⋅1−1pkϕnn⋅1−p1​1​⋅。

2025-01-15 01:27:25 796

原创 【算法学习笔记】30:埃氏筛(Sieve of Eratosthenes)和线性筛(Linear Sieve)

也叫欧拉筛,在埃氏筛的思想下,想办法让每个合数只被筛出去一次,消除重复筛选,这样时间复杂度就能降低到。写法上应该注意,线性筛不是像埃氏筛那样,只在发现质数的轮次筛合数,而是在每个轮次。只被筛出去一次,由于我们是从小到大筛选质数的,因此可以考虑让这个合数。的因数就可以了,因为我们是从小到大遍历质数。,不论是质数或者合数,其最小质因数如果是。的倍数都筛掉,存在重复筛选,时间复杂度。的质数都已经被筛好了,我们可以对于每个。的最小质因数,这时候就可以停止筛了。,如果没有停下来,又取了下一个质数。

2025-01-13 23:16:33 859

原创 【数据结构学习笔记】19:跳表(Skip List)

跳表是一个能在Onlogn时间完成查找、插入、删除的数据结构,相比于树形结构优点就是很好写(所以也用于实现Redis ZSet)。其核心思想就是维护一个元素有序的,能随机提升索引层数的链表。最下面一层就是一个普通的链表,存了所有的元素,而每次提升索引高度都一定会,因此从最上面的层到最下面的层,索引一定是,所以在查询的时候就能从上层开始,很快的跳过一些元素,再向下一层走,逐渐定位到元素的位置。

2025-01-12 01:58:38 550

原创 【RDMA学习笔记】1:RDMA(Remote Direct Memory Access)介绍

Remote Direct Memory Access,也就是Remote的DMA,是一种硬件机制,能直接访问远端结点的内存,而不需要处理器介入。Remote:跨node进行数据传输Direct:不需要CPU或者OS kernel介入Memory:从两个node各自app的虚拟地址空间直接传输数据Access:支持send、receive、read、write、atomic operation。

2025-01-12 00:32:08 909

原创 【Windows学习笔记】2:Process、Thread、Fiber、UMS、Job

Windows API指那些Windows暴露给调用方的documented的subroutine,一般都可以在MSDN上直接搜到,比如CreateFile等。System Call或者叫Native System Service,指那些undocumented,从user-mode调用OS服务的接口,比如就是这个Windows API下游调的系统调用。

2024-09-08 20:23:23 1169

原创 【Windows学习笔记】1:OneCore和Windows API

主流Windows跑在PC上,Xbox跑的是从Windows 2000分支出来的版本,Windows Phone跑的是基于Windows CE(实时操作系统)的版本。为了维护和扩展这些code方便,微软将kernels和base platform集成在一起叫OneCore,这个共享平台给所有的Windows版本使用。

2024-08-31 19:41:50 1200

原创 【算法学习笔记】29:动态规划中可丢弃状态的维度压缩

当状态i只依赖于前置状态i−1,并且在计算出状态i之后就可以丢弃状态i−1时的解时,i−1就成为一个可丢弃的状态,因此就可以将i这个维度直接压缩(省略)掉,用一个变量不停的更新自己就可以了,可以直接节省一个维度的空间占用。

2024-08-25 15:59:03 1114

原创 【算法学习笔记】28:Meet In The Middle优化

当一个问题使用时间复杂度为Oexprn))会超时或者爆内存时,如果它存在这样的性质,可以分别对折半后的前后两个2n​的子问题进行搜索,并能根据这两个子问题的解,在Oexprn))的时间内得到原问题的解时,就可以分别处理两个折半后的子问题,然后用两个子问题计算原问题的结果,称为Meet In The Middle。这样就把时间复杂度从Oexprn))变成了O2⋅expr2n​))

2024-08-25 01:25:21 1194

原创 【存储学习笔记】4:快照(Snapshot)技术的实现方式

在上一篇《备份》里提到,热备份就是在执行操作时,服务器需要正常处理来自用户或应用对数据的更新,这样能够保证数据7*24小时可用(在很多服务里这是必要的)。而热备份的困难就是如何保证数据的一致性,比如有两个数据块,在第一个时刻,他们是A1​B1​,此时备份了数据块A1​,在下一个时刻,它们被修改成了下一个版本A2​B2​,此时备份了下一个数据块B2​,得到的备份数据就是A1​B2​,并不能组成一个一致的数据。就是出于动机3被引入的,通过对一个数据对象进行。

2024-08-18 00:54:27 1384

原创 【存储学习笔记】3:备份(Backup)技术分类

备份:出于数据恢复的目的而创建一份额外的数据副本。

2024-08-13 23:25:27 816

原创 【存储学习笔记】2:磁盘柜(Disk Enclosure)模式

硬盘柜(Disk Enclosure)可以组织多块硬盘。由于只有背板是只有一个的,别的是冗余的,所以背板容易有单点故障问题,为了减少背板故障概率,一般使用无源背板。

2024-07-28 17:41:11 1067

原创 【存储学习笔记】1:机械硬盘(Hard Drive Disk)结构和寻址方式

例如,7200转/分钟的HDD,转换一周的时间是60(秒)×1000(转换毫秒)÷7200(转)=8.33毫秒,平均情况下认为每次寻址需要转换半圈,则平均旋转延迟时间为8.33÷2=4.17ms。Heads:磁头编号,比如双面磁盘,磁盘正反面各有一个磁头,所以用磁头编号就能表示数据在哪个磁面上。Sectors:扇区编号,因为已经定位到了唯一Track,所以用Sectors就能找到唯一的扇区。对于等密度结构磁盘,内外层的扇区不能组成一个扇形(外磁道的扇区更多),所以没法使用CHS寻址方式。

2024-07-21 17:56:59 1404

原创 【数据结构学习笔记】18:线段树(建树、单点修改、区间查询)

单点modify的线段树,不带懒标记push down

2022-11-26 03:33:33 1096 1

原创 【Redis学习笔记】5:Redis常见数据结构实际应用场景

Redis为什么快?1. 内存操作、2. 多路复用、3. 高效数据结构,这节学习的就是Redis底层的数据结构应用场景。1 全局哈希表在Redis里set一个key-value时,会存储到Redis里的全局哈希表里。Redis的key一定是一个字符串,使用哈希函数对这个key取一个哈希值,然后对哈希表的长度取模,然后就能分到哈希表的一个表项(桶)里。Redis底层有渐进式的rehash和动态扩容机制,把发生哈希碰撞的概率降得很低,所以Redis的全局哈希表性能很高。key都是字符串,但是value

2021-05-29 16:31:39 844

原创 【Redis学习笔记】4:Redis缓存数据库双写不一致问题

1 问题描述如果有两个线程都要给某个字段落盘(先写数据库再写缓存),按照下面的顺序执行不会有问题:但是如果按照下面的顺序就会出现数据库中的数据和缓存中的数据不一致的情况:这就是缓存数据库双写不一致问题。在更多时候,真实场景下,写入数据库之后往往不会直接去写缓存(浪费资源),而是会去把缓存删除掉,而是当另一个线程读数据库之后顺便把读的数据写入到缓存里。在这种情况下,如果“查数据库”和“更新缓存”这两个操作之间有延时,那么也会出现缓存数据库双写不一致问题:因此这个问题本质上是对数据库的操作和其

2021-05-29 11:18:50 1287 1

原创 【Redis学习笔记】3:Redis主从架构的分布式锁失效问题 & 高并发量下性能优化

1 Redis主从架构的分布式锁失效问题1.1 问题描述在Redis主从架构中,写入都是写入主Redis实例,主实例会向从实例同步key。一个业务线程A通过向主Redis实例中写入来实现加分布式锁,加锁后开始执行业务代码。这时如果主Redis实例挂掉了,会选举出一个从Redis实例成为主的,如果刚刚加锁的key还没有来得及同步到从Redis中,那么选举出来的新的主Redis实例中就没有这个key,这个时候业务线程B就能加锁来获取分布式锁,执行业务代码了,而这个时候A还没有执行结束,所以就会出现并发安全

2021-05-28 22:19:18 5082 2

原创 【Redis学习笔记】2:认识Redisson及其分布式锁RLock.lock()

Redisson和Jedis类似,都是用Java实现的操作Redis的客户端,但是使用场景不同。Redisson更多用在分布式场景下(功能可以看wiki),Jedis更多用在单机场景下。1 Java接入Redisson以Spring Boot为例,接入Redisson的依赖:和使用Jedis类似,需要初始化一个Redisson客户端,使用提供的API来创建Redisson对象(指定了配置,以及要操作的是哪个Redis实例),然后注入到容器中:上面的代码里是单机模式,也支持其他的配置方法,如集群、

2021-05-28 16:39:31 1746 1

原创 【Java学习笔记】70:借助Redis实现分布式锁

这节学习Java用Redis做分布式锁,来做秒杀场景卖货减库存的案例。最原始的减库存写法这里库存也存Redis里面,调减库存接口的时候判断一下大于0(还有库存)就拿出来减1。这里StringRedisTemplate是Spring Boot对Redis的封装,27行和30行的写法就等同于注释里面的用Jedis的写法,就是去调Redis的GET和SET命令。这样的代码中存在并发问题,在高并发的场景下,只要多个线程都执行读库存的操作,那么读出来的库存数目就是一样多的。比如三个线程都读出来200,然后都

2021-05-28 13:25:53 393

原创 【ProVerif学习笔记】8:更多密码学特性

1 扩展的destructor将解构器的能力扩展,现在它可以被定义为:相当于有一系列的重写规则(rewrite rule),对于实际拿到的一个析构操作,到析构器里从上到下看,如果某一条重写规则是可应用的(applied,其实就是命中了这条规则,就是所有的项都能正确的match上),那么就用这条规则。如果所有的重写规则都遍历完一遍没有能应用上的,那么这个destructor就失败(fail)了。比如对于:在这个定义下,eq(M, N)都是string并且是同一个东西的时候被规约成true,都是st

2021-05-16 19:32:39 1168

原创 【ProVerif学习笔记】7:基本建模特性

1 constants常量(constant)可以用参数量为0的函数(fun关键字声明的,在ProVerif里其实应该叫constructor )来表示,也就是有一个类型名有一个返回值类型(就是常量的类型),也可以直接用const关键字来描绘常量。const c1, ... , ck : t.2 data constructors和type conversion2.1 [data]constructor就是用fun声明的函数,用来对一系列数据做构造。data constructor是一种将构造器

2021-05-06 00:24:31 1365 1

原创 【ProVerif学习笔记】6:握手协议(handshake protocol)建模

这节先不继续往下看,巩固一下对ProVerif建模握手协议的理解。握手协议的流程如下:ex_handshake.pv(只验证保密性)手册里在引入security性质之前,握手协议的模型如下:(* ------------------------对称加密相关------------------------ *)(* 对称密钥 *)type key.(* 对称加密:传入要加密的内容和密钥,返回加密结果 *)fun senc(bitstring, key): bitstring.(* 对称解密

2021-05-04 13:26:26 2082 5

原创 【算法学习笔记】27:区间DP

1 区间DP区间DP指的是状态表示是某个区间的DP问题。在区间DP里循环的顺序不太好写,因为要在计算时确保所需要的状态都计算过了,顺序一般可以先按区间长度从小到大来枚举。2 模板题:石子合并分析如下图。只要考虑最后一步,合并的是左右的哪两个区间,也就是枚举分界点kkk,最后一步合并的就是区间[i,k][i, k][i,k]和[k+1,r][k + 1, r][k+1,r]。不管分界点kkk怎么选,合并代价都是区间[i,j][i, j][i,j]的区间和,这里用前缀和来维护,所以就是s[j]−s[

2021-02-17 17:27:48 477

原创 【算法学习笔记】26:匈牙利算法(二分图最大匹配)

1 简述给定一个二分图,例如:匈牙利算法能够快速的计算出一种匹配方式,使得匹配的数量最多。注意,一个成功的匹配方式中,没有两条边是共用了同一个点的。形象的说,这个问题可以理解成二分图两边分别是男生和女生,有连线的表示可以凑成一对,匈牙利算法就是用来计算最多能够凑成多少对(不存在脚踏多条船的情况)。例如左边是男生,右边是女生,可以任选一方为主动方,比如是男生方,那么流程如下。对于每个男生结点,对所有与之有连线的女生结点,检查对应的女生是不是单身,如果是就直接凑成一对。那么在上图的例子中,前两个男

2021-02-16 16:07:30 465

原创 【算法学习笔记】25:染色法(判定二分图)

1 简述要判断一个图是不是二分图,可以用两种颜色对图上的所有结点进行染色。染色法的基本思路是,如果一个图是二分图,那么一个结点所连接的所有结点都一定和这个结点属于不同侧,也就应该染上不同的颜色。所以只要先将一个结点染成颜色111,然后检查它的所有邻接结点jjj。如果jjj已经染过颜色了,而且和本结点的颜色一样,那么就发生了冲突,说明不能形成二分图。如果jjj结点没有染过颜色,就将其染成和自己这个结点颜色不一样的(比如自己是111,那么就把jjj结点染色成222),这是一个递归的过程,如果这个过程

2021-02-14 00:24:59 2259

原创 【算法学习笔记】24:Prim算法与Kruskal算法(最小生成树)

Prim算法和Dijkstra算法很相似,而且也按照是不是稀疏图分成了两种:对于稠密图,用朴素版的Prim算法,时间复杂度O(n2)O(n^2)O(n2)对于稀疏图,用堆优化版的Prim算法,时间复杂度O(mlogn)O(mlogn)O(mlogn)Kruskal算法的时间瓶颈在于它需要对所有边从小到大排序,所以时间复杂度是O(mlogm)O(mlogm)O(mlogm),由于m<n2m < n^2m<n2,所以mlogm<mlog(n2)=2mlognmlogm <

2021-02-13 00:15:33 1159

原创 【算法学习笔记】23:Floyd算法(多源汇最短路)

1 简述Floyd算法用于求多源汇最短路,时间复杂度O(n^3)。首先用邻接矩阵里的d[i,j]d[i, j]d[i,j]存储所有的边(重边的时候取minminmin),然后就是三重循环,思路也是如果从iii到kkk,再从kkk到jjj,这个距离能比d[i,j]d[i, j]d[i,j]小,就更新一下:d[i,j]=min(d[i,j],d[i,k]+d[k,j])d[i, j] = min(d[i, j], d[i, k] + d[k, j])d[i,j]=min(d[i,j

2021-02-10 14:23:10 390

原创 【算法学习笔记】22:SPFA算法(带负权边单源点最短路、检测负权回路)

1 简述SPFA算法是对Bellman-Ford算法的优化,也是用于在存在负权边的图上,求单源点最短路,一般情况下时间复杂度可以看作O(m)O(m)O(m)的,最坏情况下时间复杂度是O(nm)O(nm)O(nm)。虽然SPFA算法是对Bellman-Ford算法的优化,但是不是所有用Bellman-Ford算法的问题都能用SPFA来代替。例如,对最短路经过的边数做一个限制,要求经过的边数≤k\leq k≤k的最短路,这个时候能用Bellman-Ford算法,但是不能用SPFA算法来做。SPFA算法是单

2021-02-10 00:21:12 1817

原创 【算法学习笔记】21:Bellman-Ford算法(有边数限制的单源点最短路)

1 应用:计算有边数限制的单源点最短路Bellman-Ford算法用于在存在负权边的图上,求单源点最短路,时间复杂度O(nm)O(nm)O(nm)。但是因为该算法的改进版SPFA,在求单源点最短路的问题上几乎总是优于Bellman-Ford算法,所以Bellman-Ford算法一般只应用在对边的数量有限制的最短路问题,即限制经过边的数量不超过kkk。Bellman-Ford算法属于动态规划算法。Bellman-Ford算法的基本思想是,如果要求最短路的长度最多为kkk(如果不限制,那其实就是k=n−1

2021-02-08 17:26:10 619

原创 【算法学习笔记】20:朴素Dijkstra与堆优化Dijkstra(无负权边单源点最短路)

Dijkstra算法用于在所有边权都非负的图上,求单源点最短路。设nnn是图上结点的数量,mmm是边的数量。则朴素Dijkstra算法的时间复杂度是O(n2)O(n^2)O(n2),适合稠密图(点少边多);堆优化版的Dijkstra算法的时间复杂度是O(mlogn)O(mlogn)O(mlogn),适合稀疏图(点多边少)。如果是稠密图,那么边的数量mmm和点数的平方n2n^2n2基本是一个规模的。如果用堆优化版的Dijkstra,那么复杂度就可以视为O(n2logn)O(n^2logn)O(n2logn

2021-02-08 00:17:08 2400

原创 【算法学习笔记】19:拓扑排序

1 简述计算拓扑序列的一个方式是,用BFS来尝试访问所有的节点,但是有一个约束就是只有入度为000的节点才能被加入到扩展队列里。每次从队列里取出一个节点,也就同时在图中将这个节点拆除,所以它的所有后继的节点都减少111,如果已经减少到000,那么就可以加入到队列中。在上面的例子中,一开始只有aaa的入度是000,所以先把aaa加入到队列中,队列中:aaa然后取出队头aaa并在图中拆除,然后它的后继ccc的入度变成111,bbb的入度变成000,把bbb加入到队列里,队列中:bbb然后取出队头b

2021-02-06 18:07:47 415

原创 【算法学习笔记】18:树与图的DFS与BFS

1 邻接表树和图的DFS和BFS,可以将树也看成图来存储,存储图的一个常用的存储结构就是邻接表。对于有向图而言,只存这个方向的边,对于无向图而言,存两个方向的边。在邻接表的实现中,用数组h来记录每个节点向外的边的链表头指针,初始时都是空(即-1)。用idx来表示链表节点的分配位置。数组e表示节点的值,即是目标节点的编号。数组ne表示节点的nextnextnext指针,也就是链表节点的下一节点被分配的下标。注意,当用邻接表去存无向图(或者树)的时候,因为a→ba \to ba→b和b→ab \to ab

2021-02-06 17:23:50 579

原创 【算法学习笔记】17:DFS与BFS

1 DFS深度优先搜索常用于解决需要给出所有方案的问题,因为它的搜索顺序就是能够得到一个完整的搜索路径(方案)后回退再去搜索其它的方案。1.1 例题:排列数字由于要求所有排列的方案,可以每次从1..n1..n1..n里拿一个数字,然后记录一下这个数拿过了,再递归地搜索下一个数字,当所有数字都取完之后,就得到了一种方案,将这种方案输出,回退之后去搜下一个方案。“回退之后去搜下一个方案”,其实就是在每层DFS的时候遍历一下所有的允许使用的数字,作为下一个位置的数字。需要注意的是在进入下一层DFS之前要把

2021-02-06 00:21:47 371

原创 【数据结构学习笔记】17:模拟散列表

哈希表通过空间换时间的方式,能够实现平均在O(1)O(1)O(1)的时间里插入和删除元素,它能够将较大的空间的数据映射到一个小范围里。手写哈希表的时候,哈希函数一般就是将数值关键字对一个数取模,由于取模的结果就是000到这个数,所以这个模数其实就是数组哈希表的长度NNN,取模结果对应到数组模拟哈希表中从零开始的一个下标。为了处理数值关键字是负数的情况,xxx对NNN的取模运算(计算哈希值kkk)是:k=(x%N+N)%Nk = (x \% N + N) \% Nk=(x%N+N)%N在这种方式中,

2021-02-05 21:16:07 344

原创 【数据结构学习笔记】16:模拟堆与堆排序

1 简述1.1 堆的性质与操作大根堆(小根堆)是一棵完全二叉树,其性质是每一个结点都是≥\geq≥(≤\leq≤)左右儿子结点的,因此满足每棵子树都是一个大根堆(小根堆)。特别要注意这里加粗的地方才是根本性质,即大根堆每个结点≥\geq≥左右儿子,小根堆每个结点≤\leq≤左右儿子,绝对不是“最大(最小)元素在根节点”这种导出性质。由于这个特性的存在,堆顶元素就是整个大根堆(小根堆)中的最大(最小)元素,可以快速取出。朴素的堆至少要支持:获取堆顶元素取出堆顶元素,然后在log(n)log

2021-02-05 00:58:24 366

原创 【数据结构学习笔记】15:并查集

1 简述并查集可以用来描述集合,能够做集合合并操作,检查两个元素是否属于同一个集合等。并查集用森林中的每棵多叉树来表达一个集合,初始时,每个元素单独在一个集合,也就是自己是一棵树:合并两个集合时,只要把一个集合的树根挂到另一个集合的根上。例如,合并元素111所在的集合和元素222所在的集合(图中以黄色结点为树根,绿色为非根):以一个更加一般的例子来说明合并的过程,例如这样两棵树(代表两个集合):合并时,把一棵树的树根挂到另一棵树上:并查集几乎都是用树的数组表示来实现,用一个int型数组p

2021-02-04 22:29:50 342

原创 【数据结构学习笔记】14:Trie树

1 简述Trie树是能够高效存储和查找字符串集合的数据结构,比较适合字符种类较少的问题,例如如果字符串中只可能出现262626种小写字符,那么Trie树长成这样:也就是说Trie树的树根是一个虚拟结点,然后它会分叉出262626个结点,分别对应每个小写字母,每个结点又分叉出262626个结点,这样往下不断展开。这样看起来Trie树的空间是指数级别的,非常大,但是实际上Trie树一开始只需要有一个虚拟的根节点,然后每次插入字符串只需要把字符串上的每个字符对应的结点创建好就行了,实际的空间占用很小。例

2021-02-04 16:35:14 215

原创 【算法学习笔记】16:单调栈与单调队列

单调栈和单调队列都是一类算法思想,是栈和队列在算法里很常见的应用。单调栈算法一般用模拟栈或者程序语言给实现的栈都可以,因为只要求在栈顶入栈和退栈,以及取栈顶元素。单调队列算法很多时候用手写的模拟队列比较方便,因为很多时候需要双口出队的队列,主要是在队尾也有删除元素的需求。而模拟队列都是游标移动来限定队列中的所有元素,所以用模拟队列很自然的可以做到双端队列的操作。1 单调栈单调栈是栈中的元素按照一个单调性来排列,每次入栈一个元素xxx时,如果加入这个元素会使得单调性被破坏,就不停的弹出栈顶元素,直到可

2021-02-03 23:42:54 485

原创 【数据结构学习笔记】13:模拟栈与模拟队列

这节学习用数组模拟栈和队列,这种方法相比内置的栈和队列,一方面比较通用,不受语言限制,另一方面速度也比较快。而且因为是用数组模拟的,所以可以对任意位置进行修改(如果有办法知道要修改的位置的下标的话)。1 模拟栈模拟栈比较简单, 将数组的扩展方向作为栈的入栈扩展方向,并记录一下栈中的元素数量(其实也就是当前栈顶的位置),每次入栈的时候,先将栈顶位置+1+1+1,然后在这个位置填入要入栈的数据即可。需要注意数组的长度至少需要开到栈最大容量+1+1+1的大小,因为000位置是不存数据的,用来标识栈是否是空的

2021-02-03 20:11:22 317

算符优先分析法

设有文法G[S]:S→SaF | F F→FbP | P P→c | d (1) 构造G[S]的算符优先关系表 (2) 分别给出cadbdac# 和 dbcabc# 的分析过程

2018-05-22

已经整合好的小型S2SH框架(完全注释+依赖jar包)

已经将Struts2和Hibernate与Spring整合,测试可用。含三个框架的核心依赖jar包,不含JDBC驱动,测试例子是用MySQL作为数据库的。请自行更换数据库,添加驱动,修改Hibernate设置和数据库配置。 含有大量注释,适合学生立即上手开发课程项目。

2018-05-13

举例说明汇编语言子程序递归调用过程中堆栈内容的变化过程

上海大学课程研讨,题目是举例说明汇编语言子程序递归调用过程中堆栈内容的变化过程。上海大学课程研讨,题目是举例说明汇编语言子程序递归调用过程中堆栈内容的变化过程。

2017-12-03

有关ADSL与调制技术

有关ADSL和相关的调制技术,计算机网络研讨课演讲PPT。

2017-10-04

有关Linux进程家族树

操作系统课程研讨PPT,有关Linux进程家族树的形成,服务的自动开启。操作系统课程研讨PPT,有关Linux进程家族树的形成,服务的自动开启。操作系统课程研讨PPT,有关Linux进程家族树的形成,服务的自动开启。

2017-10-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除