数据结构
文章平均质量分 90
数据结构博文
苏貝貝
勤奋耕耘,收获满满;不辍努力,未来可期。
展开
-
【数据结构】树和二叉树
注意:树形结构中,子树之间不能有交集,否则就不是树形结构。原创 2024-03-15 20:25:41 · 834 阅读 · 2 评论 -
【数据结构】堆的TopK问题
TOP-K问题:即求数据结合中前K个最大的元素或者最小的元素,一般情况下数据量都比较大。比如:专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等。对于Top-K问题,能想到的最简单直接的方式就是排序,但是:如果数据量非常大,排序就不太可取了(可能数据都不能一下子全部加载到内存中)。最佳的方式就是用堆来解决。原创 2024-03-06 21:31:52 · 1193 阅读 · 5 评论 -
【数据结构】实现堆
数据插入完成后,我们还要保证这是一个小堆,所以要对比这个数据和它的双亲结点的值:如果它的值要大于双亲结点的值,那位置就不要动;如果它的值要小于双亲结点的值,为了让这个堆还是小堆,我们要将它和双亲结点互换位置,直到它的值要大于双亲结点的值或者它已经是根节点。的顺序存储方式存储在一个一维数组中,并满足:任意一个双亲结点的值=孩子节点的值),则称为。因为函数的实参是HP类型变量的地址,不可能为空,所以对它断言,下面的接口同理。如果有一个关键码的集合K,把它的所有元素按。原创 2024-03-04 21:42:14 · 1091 阅读 · 1 评论 -
【数据结构】实现队列
assert(pq);8。原创 2024-03-02 11:56:45 · 801 阅读 · 0 评论 -
【数据结构】实现栈
栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些,因为数组在尾上插入数据的代价比较小(数组的尾插、尾删很方便)。删除时我们必须保证栈内有元素,所以要对pst->top>0断言,如果top==0,表示栈内已无元素,返回错误信息,下面的显示栈顶元素同理。注意:在这里我们使用的是动态开辟内存,所以要在销毁时释放掉动态开辟的内存,也就是pst->a指向的那个数组。上面是定长的静态栈的结构,实际中一般不实用,所以我们主要实现下面的支持动态增长的栈。:栈的插入操作叫做进栈/压栈/入栈,原创 2024-03-02 10:48:14 · 1289 阅读 · 37 评论 -
【数据结构】实现顺序表
增容时我们一般将新的容量置为原来容量的2倍,因为我们初始化的时候将初始容量置为0,所以先要对容量判断,如果=0就将新的容量置为4,如果不为0则将新的容量置为原来容量的2倍。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。因为顺序表信息包括一个动态数组、数据个数和数组容量,后两者都是int型,数组的类型不确定,而且它们所占空间大小不同,所以我们想到创建一个顺序表结构体,为了书写方便,我们将struct SeqList重命名为SL。在数组上完成数据的增删查改。原创 2024-02-04 12:43:29 · 1698 阅读 · 59 评论 -
【数据结构】时间复杂度和空间复杂度
计算fib(3)时要计算fib(2)和fib(1),fib(2)先计算,等得到结果后释放fib(2)的空间,再计算fib(1),所以得到了fib(3)的值;N/(2^x)=1,所以x=log2 N,即底数为2,对数为N的计算结果,由于log2 N不好表示又经常会被用到,所以规定logN代表log2 N,将底数为2的底数省略(底数不为2的不能省略),有些地方也会写成lgN(不建议)。F(N)=100,用常数1取代运行时间中的所有加法常数,所以O(1),(O(1)并不是代表1次,而是常数次)原创 2024-01-21 16:54:38 · 1364 阅读 · 28 评论