数据结构
文章平均质量分 96
笨笨胡小巴
小小怪
展开
-
【探索排序算法的魅力:优化、性能与实用技巧】
1. 元素集合越接近有序,直接插入排序算法的时间效率越高2. 时间复杂度:O(N^2)3. 空间复杂度:O(1),它是一种稳定的排序算法4. 稳定性:稳定。原创 2023-10-01 12:37:12 · 1396 阅读 · 81 评论 -
【二叉树魔法:链式结构与递归的纠缠】
很明显,不是,所以上面的思路是错误的。不行,层序遍历没有先访问左子树和右子树的关系,层序遍历是一层一层访问的,递归的思想不符合层序遍历,这里我们可以使用队列,先把根节点入队列,然后当根节点出队列的时候,再把根节点的左右孩子入队列,特点是上一层带下一层,由于队列是先进先出的特点,刚好符合层序遍历。设二叉树的根节点所在层数为1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第2层 上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。原创 2023-09-22 21:41:55 · 1054 阅读 · 78 评论 -
【完全二叉树魔法:顺序结构实现堆的奇象】
去调整堆,然后在缩小下次向下调整的范围,也就是把最大的那个数不算做堆的范围了,这样最大的数据就保存在了下标最大的位置处,满足了升序的要求。此时就要重新建堆,然后再取堆顶数据,再建堆...每次建堆的时间复杂度N*logN,一共有N个数据,所以总的排序时间复杂度就是N * logN * N,那还不如直接遍历一遍排序来的快呢!这里不能用大堆,如果第一个数据就是最大的,放在堆顶,其余数据就无法入堆,所以要用小堆,最大的前k个数肯定比堆顶大,此时该数替换堆顶的数入堆,入完k个后就找到前k个最大的元素。原创 2023-09-20 18:33:02 · 815 阅读 · 84 评论 -
【生命的分支:揭秘二叉树的神奇编码】
下标随机访问数据,排序,二分查找效率高。CPU高速缓存命中率比较高。原创 2023-09-15 17:40:58 · 262 阅读 · 52 评论 -
【函数栈帧解析:代码的迷人堆积和无限嵌套】
函数栈帧通过call指令先1. 压入返回地址 ,也就是调用完函数后要执行的下一条指令,然后call通过jump转入目标函数,待函数使用完,ret指令会找到call指令压入的地址值,通过这个值返回到main函数的栈帧,即调用完函数要执行的下一条指令。但是实参的地址和形参的地址是不同的,所以形参只是实参的一份临时拷贝,修改形参是不能改变实参的。函数传参的过程,形参的实例化并不在新的函数栈帧内,而是在调用一方函数栈帧内实例化的,当该函数要使用该形参的时候,是通过地址的方法去寻找该形参变量,传参的顺序是从右到左。原创 2023-08-31 11:44:50 · 676 阅读 · 85 评论 -
【排排站:探索数据结构中的队列奇象】
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out)原创 2023-08-20 17:21:26 · 436 阅读 · 57 评论 -
【深入解析:数据结构栈的魅力与应用】
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,。出栈:栈的删除操作叫做出栈。。原创 2023-08-21 18:11:07 · 744 阅读 · 84 评论 -
【编织时空四:探究顺序表与链表的数据之旅】
注意这里求链表长度不需要求带头结点,我们有时也经常看到由于带头结点的数据没有使用,就有的书上会把该数据存储上链表的长度size=phead->data,然后插入数据phead->data++,删除phead->--,但是这有个限制,这种写法只适合int类型,如果我们写出char类型的数据,存储几个数据char就保存不了,char类型的phead->data一直++最后就会溢出,所以不建议这种写法。此外,由于顺序表的元素是连续存储的,通过数组索引可以直接计算出元素的地址,避免了链表节点的跳转操作。原创 2023-08-19 11:08:38 · 892 阅读 · 32 评论 -
【编织时空三:探究顺序表与链表的数据之旅】
思路一:删除头结点时另做考虑(由于头结点没有前一个结点)思路二:添加一个虚拟头结点,删除头结点就不用另做考虑。原创 2023-08-18 22:11:42 · 675 阅读 · 13 评论 -
【编织时空二:探究顺序表与链表的数据之旅】
思考:如何解决以上问题呢?下面给出了链表的结构来看看。原创 2023-08-15 21:43:37 · 204 阅读 · 7 评论 -
【编织时空一:探究顺序表与链表的数据之旅】
具体步骤是:最后面的那个人后退一个位置,倒数第二个人后退到原来最后一个人的位置,这样子后面的每个人依次后退,最后就空出来了一个位置,这个人就插队进去了。顺序表初始化的时候是用malloc函数向系统申请的空间,malloc函数申请的空间是在内存的堆区,堆区的空间不会被系统自动回收,还需要用free函数释放空间。静态顺序表在初始化时需要分配固定大小的内存空间,而如果无法预估元素的最终数量,就需要进行适当的空间规划,这可能增加设计和开发的成本。的值时,实际上只是修改了传递进来的副本,而不会影响原始的。原创 2023-08-13 17:03:42 · 225 阅读 · 4 评论 -
【解密算法:时间与空间的博弈】
算法(Algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果。比如:查找、排序等等。原创 2023-08-11 20:58:35 · 290 阅读 · 3 评论