
数据结构与算法
数据结构和算法
风兮w
始终
展开
-
用Promise实现前端并发请求
【代码】用Promise实现前端并发请求。原创 2024-09-27 15:59:35 · 412 阅读 · 0 评论 -
详细图解B树的删除操作(转载)
转载自博客转载 2020-12-20 22:09:19 · 707 阅读 · 0 评论 -
折半查找的判定树
转载自博客首先折半查找的判定树一定是一颗AVL平衡树其次折半查找过程中mid=(low+high)/2向上取整或向下取整是不能改变的,所以在当查找序列中节点总数是偶数时,必然有一侧比另一侧少一个节点...转载 2020-12-20 20:27:31 · 3403 阅读 · 0 评论 -
用一个高效的算法将一个单链表 L = (a1,a2,.. an-1,an)变换成L=(a1,an,a2,an-1,....)
基本思路:该变换将L的后半部分倒插进前半部分,为了实现高效,可以将链表后半部分倒置后插入前半部分找到后半部分的开头指针:设置两个指针slow和fast,slow增加一步,fast增加两步,则fast到达表尾时slow刚好为中间的位置。倒置后半部分:可以用头插法或者设置prev,cur,next三个指针直接修改指针指向使用c语言实现:void main(){ pList head,tail,slow,fast; buildListWithHead(&head,12);原创 2020-12-08 17:36:45 · 2356 阅读 · 2 评论 -
判断单链表是否有环
找到带环的单链表的入口点:基本思路:设置slow和fast指针,分别从head处开始移动,slow移动1步,fast移动2步直到两个指针相遇(如果不能相遇就是没有没有环),如图所示,x为相遇点到环的入口的距离,a为单链表长度如上图,在slow指针到达x处时fast已经围绕环移动了n圈(设每圈周长为r)则fast移动的距离为a+n*r+x,此时slow一定还在第一圈的范围内(证:如果两者同时从环入口处出发,fast的速度是slow的二倍,则fast和slow第一次会在fast经过两圈,slow完成原创 2020-12-08 16:21:45 · 189 阅读 · 0 评论 -
寻找两个单链表的公共节点算法
两个链表有公共节点,表示从某个节点之后所有的节点都相同(共享节点),即两个链表一起呈现Y型暴力遍历将两个链表倒置,然后遍历两个新链表,即相当于从原来的链表的尾部开始向前遍历,直到两个链表分叉的地方结束,只是此时遍历出来的是倒序的节点最普遍的解法:先把较长的链表多余长度的部分遍历完,然后再从两个链表相同长度的节点位置开始同时遍历直到共享的位置(如下图)图片来自博客C语言 寻找两个单链表的公共节点实现与原理...原创 2020-12-07 11:46:34 · 1124 阅读 · 0 评论 -
主元素算法
参考文章转载 2020-12-06 15:49:53 · 485 阅读 · 0 评论 -
数组篇——JavaScript数组深浅拷贝
对于基本数据类型,存储的方式是键—值存在栈中,对于引用数据类型,存储的方式是键—引用地址存在栈中,引用地址对应的值存在堆中,所以直接使用=赋值引用数据类型只是统一两个变量的引用地址,属于浅拷贝。该原理参见博客JavaScript中数组深拷贝的方法: var arr=[1,2,3,4,5];1. var copy=arr.slice(0);2. var copy=arr.concat();3. 使用for循环4. var copy=[...arr]; //es6特性,只能深拷贝一层参见博.原创 2020-06-17 11:09:36 · 270 阅读 · 0 评论 -
数组篇——生成一定长度的含有默认值的数组
生成长度为length,默认值为0的一维数组:Array.apply(null, Array(length)).map(()=>0)或者 […Array(length)].map(()=>0)使用 new Array(length)得到的数组无法用遍历的方式赋值,关于其原因,参见博客,总的来说就是数组是键为数值的对象,但Array方法生成的对象没有0…length这些键…args是es6的特性,目的是将参数展开,…Array()可以将数组展开...原创 2020-06-17 10:52:26 · 1034 阅读 · 0 评论