- 博客(30)
- 收藏
- 关注
原创 数据结构-广义表
⑦表尾:当广义表非空时,其余元素组成的表 getTail(B)=(e) getTail((a))=()⑥表头:当广义表非空时,第1个元素 getHead(B)=d getHead((a))=a。③C=(b,(c,d)),C有两个元素,分别是原子b和广义表(c,d),长度为2,深度为2。④D=(B,C),D的元素全是广义表(B和C),长度为2,深度为3。②B=(d,e),B的元素全是原子(d,e),长度为2,深度为1。⑤E=(a,E),E有2个元素,长度为2,无限深。
2024-09-03 16:26:19
330
原创 数据结构-查找
①目的:提高查找,插入和删除关键字的速度②定义:左(右)子树上的所有节点均小于(大于)根节点的值 (对二叉排序树进行中序遍历,可以得到一个递增的有序序列)①目的:避免树的高度增长过快,降低二叉排序树的性能,适用于以查为主,很少删/插的场景②定义:左子树和右子树的高度之差的绝对值不超过1。
2024-08-15 17:27:34
1056
1
原创 数据结构-图
邻接矩阵邻接表十字链表邻接多重表空间复杂度O(V^2),V为顶点数无向图:O(V+2E),有向图:O(V+E)O(V+E)O(V+E)找相邻边遍历行/列找有向图的入度遍历整个邻接表方便方便删除边或顶点边-方便顶点-移动大量数据都不方便方便方便适用于稠密图稀疏图+其他只能存有向图只能存有向图表示方式唯一不唯一不唯一不唯一①最小生成树:权值之和最小的生成树(一个连通图的生成树包含图的所有顶点,并且只含尽可能少的边)
2024-08-07 10:08:30
305
原创 数据结构-树与二叉树
1.1 树的度:节点的最大度数1.2 节点的深度:节点所在层次1.3 树的高度/深度:节点的最大层数1.4 节点的高度:以该节点为根的子树的高度1.5 节点间路径长度:路径上所经过的边的个数1.6 树的路径长度:从树根到每个节点的路径长度的总和。
2024-08-02 19:39:20
555
原创 数据结构-串
1.如下,当j指向3时,next[3]=1,那么我们找到j=1的字符,发现3所示字符和1所示字符相等,都是a,则把1所示字符的nextval值给3。2.假设当i指向3时,失配,那么我们需要将模式串往后移动,直到3之前的序列时相同的,那么此时j指向的值就是next[j]的值了。next[j]含义:当子串的第j个字符与主串发生失配时,跳到子串的next[j]的位置重新与主串当前位置进行比较。注:若串的位序从1开始,则next数组才需要整体+1,若从0开始,不需要整体+1。最坏时间复杂度:O(n*m)
2024-08-01 16:41:54
357
原创 数据结构-栈、队列、数组
否则,从栈顶开始依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,直到遇到一个优先级低于它或遇到"(",之后将当前运算符入栈。前i-1行有:3(i-1)-1个元素 aij是第i行的第j-i+2个元素 所以aij是第2i+j-2个元素,放在下标为2i+j-3的位置。(n-j+2) + (i-j)+1 (下标从0开始) n+n-1+n-2+…--B的下标从0开始,[0,n(n+1)/2 -1]--B的下标从0开始,[0,3n-1] 总共有3n-2个元素。
2024-07-21 19:20:34
234
原创 数据结构-线性表
/静态:int length;}SqList;//动态:int *data;}SqList;动态分配并不是链式存储,同样属于顺序存储结构,物理结构没有变化,依然是随机存取方式,只是分配的空间大小可以在运行时动态决定。int data;LNode* L == LinkList L 前者强调的是一个结点L,后者强调的是一个单链表int data;
2024-07-16 14:04:13
311
原创 数据结构-绪论
特点:把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。特点:不要求逻辑上相邻的元素在物理位置上也相邻,借助指示元素存储地址的指针来表示元素之间的逻辑关系。缺点:每个元素因存储指针而占用额外的存储空间,且只能实现顺序存取。缺点:只能使用相邻的一整块存储单元,因此可能产生较多的外部碎片。特点:根据元素的关键字直接计算出该元素的存储地址,又称哈希存储。特点:在存储元素信息的同时,还建立附加的索引表。优点:随机存取,每个元素占用最少的存储空间。
2024-07-15 15:57:26
410
原创 数据结构-外部排序
把R1,R2分别读入一个块,分别放在2个输入缓冲区中,在内存中对R1,R2进行归并排序,归并后的对象放在输出缓冲区中,若输出缓冲区满了,就将其顺序写到输出归并(R1`)段中,然后清空输出缓冲区,继续存放后续内容。而文件中记录很多,无法将整个文件复制到内存中进行排序,因此,需要将待排序的记录存储在外存上,排序时再把数据一部分一部分地调入内存进行排序,在排序过程中需要进行多次内存和外存之间的交换。2、对这些归并段进行逐趟归并,使归并段逐渐由小到大,直至得到整个有序文件。对r个初始归并段,做k路平衡归并。
2024-06-10 14:47:06
267
原创 C语言程序设计
1、为什么1个字节的存储空间,对于有符号整数,最小值为-128在计算机中,存储的都是补码。对于有符号整数,计算机用最高位表示正负。第一个位(最高位)就不能算,也就是说只有7位, 即2^7=128 个数字,一共正负各128种状态,共256个状态。如果不采用特殊处理,这时候0占用2个编码(10000000和00000000),数据表示范围为-127到-0及+0到127,这样总体上一个字节只有255种状态,因为其中0具有正0和负0之分,这不符合数学意义也浪费一个编码。
2024-05-29 09:15:13
236
原创 18.最长递增子序列
给你一个整数数组nums,找到其中最长严格递增子序列的长度。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组的子序列。4最长递增子序列是 [2,3,7,101],因此长度为 4。41。
2023-12-06 15:39:15
392
1
原创 18.二叉树的中序遍历
给定一个二叉树的根节点root,返回它的遍历。[1,3,2]root = [][]root = [1][1][0, 100]递归算法很简单,你可以通过迭代算法完成吗?
2023-12-04 14:20:30
353
1
原创 16.爬楼梯
假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?n = 22有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶n = 33有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶。
2023-11-29 18:11:09
402
1
原创 15.x的平方根
给你一个非负整数x,计算并返回x的。由于返回类型是整数,结果只保留,小数部分将被不允许使用任何内置指数函数和算符,例如或者x ** 0.5。x = 42x = 828 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。
2023-11-29 17:42:17
351
1
原创 13.加一
给定一个由组成的数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储数字。你可以假设除了整数 0 之外,这个整数不会以零开头。[1,2,4]输入数组表示数字 123。[4,3,2,2]输入数组表示数字 4321。[1]
2023-11-27 14:53:23
341
1
原创 12.电话号码的字母组合
给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。答案可以按返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
2023-11-22 15:28:59
426
原创 10.搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。时间复杂度:O(logn) 二分算法。请必须使用时间复杂度为。空间复杂度:O(1)
2023-11-21 13:28:26
33
原创 8.移除元素
给你一个数组nums和一个值val,你需要移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用O(1)额外空间并。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下://是以“引用”方式传递的。也就是说,不对实参作任何拷贝// 在函数里修改输入数组对于调用者是可见的。
2023-11-20 19:44:24
24
1
原创 7.删除有序数组中的重复项
给你一个的数组nums,请你删除重复出现的元素,使每个元素,返回删除后数组的新长度。元素的应该保持。然后返回nums中唯一元素的个数。考虑nums的唯一元素的数量为knumsnumsknumsnumsnumsk系统会用下面的代码来测试你的题解:// 输入数组// 长度正确的期望答案// 调用i < k;i++) {如果所有断言都通过,那么您的题解将被。函数应该返回新的长度不需要考虑数组中超出新长度后面的元素。函数应该返回新的长度。
2023-11-20 14:16:52
70
1
原创 3.罗马数字转整数
罗马数字包含以下七种字符:IVXLCD和M。例如, 罗马数字2写做II,即为两个并列的 1。12写做XII,即为XII。27写做XXVII, 即为XXVII。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做IIII,而是IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。同样地,数字 9 表示为IX。IVXXLCCDM给定一个罗马数字,将其转换成整数。
2023-11-16 00:26:50
39
原创 2.回文数
例:1221,当我们反转一半,12 21,与此同时,把21反转到revertednumber中,比较x和revertednumber的大小,若相等,则是回文。1234,当我们反转一半,12 34 ,与此同时,revertednumber为43,与x不相等,则不是回文。而对于奇数,比如12321,3不需要计算,在循环末尾,x为12,revertednumber为123,%10后即可。时间复杂度:O(logn),对于每次迭代,我们会将输入除以 1010,因此时间复杂度为 O(logn)。
2023-11-16 00:14:55
33
1
原创 1. 两数之和
给定一个整数数组nums和一个整数目标值target,请你在该数组中找出target的那整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。[0,1]因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。[1,2][0,1]你可以想出一个时间复杂度小于O(n2)的算法吗?
2023-11-15 00:00:43
25
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人