
数据结构与算法
writeone
这个作者很懒,什么都没留下…
展开
-
4-9记录(散列查找收尾及排序开头)
不需要把数据删除,只需要标记“已删除”即可。往右移就是加一,往左就是减一。原创 2025-04-09 15:07:03 · 79 阅读 · 0 评论 -
4-1记录(查找方法和平衡二叉树)
关于为什么是两个n:看了豆包但是不太懂,大致意思就是说比结点小的数到左边进行对比,比结点大的数去右边进行对比,简单的将上图左右划一刀斜线,正好比较2n次。成功的ASL和失败的ASL算法不太一样,失败就是遍历所有,答案是固定的,成功的概率是不一定的,从第一个到最后一个都有可能。由此,折半查找比顺序查找时间复杂度少,但并不是谁一定比谁更优秀。折半查找失败的标志是,low指的比high指的位序大。让要删除的结点的右子树的左孩子顶替这个位置。上面说的是成功的和失败的平均查找长度。顺序查找的时间复杂度就是O(n)原创 2025-04-01 20:41:05 · 192 阅读 · 0 评论 -
3-31记录(行主序,列主序回顾,KMP的next数组以及中缀转后缀)
对于A[i][j],假设数组维度为,基地址为Base,元素大小为sizeA[1][1]在A[2][3]。i*列数对于A[i][j]A[1][1]在A[2][3]。j*行数。原创 2025-03-31 21:52:10 · 204 阅读 · 0 评论 -
3-27记录(图和图的存储)
所有节点 入度之和等于出度之和且数值上等于弧。生成子图:包含所有顶点但是边是边集的子边。有向图:某节点:出度+入度=度。无向图:节点个数=度*2。有向完全图中,n个顶点。原创 2025-03-27 07:43:03 · 141 阅读 · 0 评论 -
3-26记录(树的存储结构及树,森林,二叉树的转换)
双亲表示法优点找 父节点很方便 缺点:找孩子不方便,需要遍历。因此适用于找父节点多 找孩子少的情景,比如并查集。树的先根遍历序列和这棵树的二叉树的先序遍历相同。上述几幅图也可以转化成二叉树再进行相对应的遍历。优点:找孩子很方便,因为直接通过链表就能找到。适用于找孩子比找父节点多的情节。缺点:找父节点很不方便。原创 2025-03-26 14:45:29 · 193 阅读 · 0 评论 -
3-24(由遍历序列构造二叉树及线索二叉树)
线索二叉树原创 2025-03-24 18:56:34 · 140 阅读 · 0 评论 -
3-17记录(树的顺序存储和链式存储即先后中序遍历算法)
树原创 2025-03-17 12:57:49 · 71 阅读 · 0 评论 -
3-10记录(串)
比的不是ascii,谁在字母表中出现的早谁最小。原创 2025-03-10 20:58:54 · 124 阅读 · 0 评论 -
2-21记录
是一个常见的初始化语句,表示将指针。2.每次娶一个数据元素插入到表头/表尾。是链表的起始节点,它的类型是。单链表不带头结点情况按位序插入。原创 2025-02-22 10:25:19 · 121 阅读 · 0 评论 -
2-20记录
倒数二三行顺序不能颠倒,如果颠倒后s指向的结点是自己,数据丢失。1.带头结点(按位序插入 )注意:头结点是不存储数据的。原创 2025-02-20 21:47:30 · 179 阅读 · 0 评论 -
2-19记录
*顺序表删除数据,必须先设置一个int e=-1;将要删除的数据存到e中,数据并没有消失。2.顺序表插入:必须先将最后一个数据先后移,从后往前(for循环中--)3.顺序表删除:必须先将前面的数往前移,从前往后(for循环中++)用bool类型返回false /true提高代码健壮性。1.顺序表先声明后初始化。原创 2025-02-19 19:36:19 · 148 阅读 · 0 评论 -
3-5记录
在上述代码中,想要判断队列是否为空,只需要判断front和rear是否指向同一个节点,也可以通过判断头结点的next指针是否指向NULL。栈的应用,括号匹配问题。原创 2025-03-07 12:51:20 · 127 阅读 · 0 评论 -
3-10记录(前缀中缀后缀互相转化及计算方法以及特殊矩阵压缩存储)
根据上述图片,数组大小该设置成n*(n+1)/2,所以最后一个数组元素下标应该是n*(n+1)/2-1。策略:只存储下三角和主对角线,按照行优先原则将各个元素存在一维数组。存储策略:按照行优先或者列有优先只存储带状部分。元素移到一维数组,并在最后一个位置存储常量c。aij之前的行有多少个元素。原创 2025-03-10 20:04:00 · 128 阅读 · 0 评论 -
3-4记录(顺序栈和顺序队列增删改查)
每一次出队的都是front指针所指向的元素,并且队头指针会每次往后移一位,当队头指针和队尾指针再次指向同一个位置的时候此时就说明这个队列已经被取空了。同理,如果上述两句顺序颠倒,简化后的代码为x=S.data[--S.top];当栈中没有元素的时候,top栈顶指针为-1,因此可以通过这个来判断栈是否为空。如果上述两句顺序颠倒,简化后的代码则变为S.data[S.top++]=x;同时判断栈满的条件也不一样,在这种情况下栈满的条件为top==MaxSize。//声明栈时分配内存。原创 2025-03-04 21:26:03 · 233 阅读 · 0 评论 -
2-27记录
顺序存储结构可以通过变量length来求表长,定位操作也可以直接索引来查找,时间复杂度为O(1),链式存储求表长需要遍历整个链表,时间复杂度为O(n),定位操作也需要遍历整个链表,时间复杂度是O(n)。顺序存储的内存一开始是分配好的,想要改变需要重新分配内存并且复制数据,链式存储可以动态分配,不需要连续的内存空间,所以顺序存储在存储上不够灵活。由于数据存储在连续的内存中,可以通过索引直接访问任意位置的元素,可以随机存取,链式存储无法随机存取,只能遍历。,实现创建一个顺序表,并实现打印顺序表的功能。原创 2025-02-27 20:28:40 · 481 阅读 · 0 评论 -
2-26记录
1.数据结构的逻辑结构被形式化地定义为一个二元组(D,S),其中D是(① )的有限集合,S是D上( ② )的有限集合。数据元素;关系2.以下说法正确的是( )A数据项是数据最小单位B数据元素是数据基本单位C数据元素的集合3.在存储数据时,通常不仅要存储各数据元素的值,而且还要存储( D )。4.算法的时间复杂度取决于( D )。A. 问题的规模B. 待处理数据的初态C. 计算机的配置D. A和B5.原创 2025-02-26 20:54:05 · 795 阅读 · 0 评论 -
2-25记录
按最坏情况考虑,第一趟要进行n次排序,第二趟进行n-1次排序,直到最后一趟只需要一次排序。冒泡排序法只需要一个tmp来交换两个数,所以空间复杂度为O(1)1)从内循环到外循环写,从右往左写,从右往左脱去。动态开辟n+1个内存,O(n+1)=O(n)2 见到for 求和(方法:1 见到while循环设t次求解。折纸,一半再一半,逐渐缩小查找范围。递归调用n次,O(n)原创 2025-02-25 21:24:17 · 159 阅读 · 0 评论 -
2-22记录
如果带头结点,要判断双链表是否为空 ,只需要判断这个头结点的next指针是否等于NULL。原创 2025-02-23 21:20:50 · 101 阅读 · 0 评论