数据结构初阶
文章平均质量分 74
介绍初阶数据结构
核动力C++选手
优秀的猎手要耐心等待机会!
展开
-
数据结构-排序
(适应性强)。原创 2024-01-16 09:00:55 · 1079 阅读 · 14 评论 -
数据结构-二叉树
这个接口中,除了最后三行外,上面的几行都是用来判断堆容量是否充足,如果不充足,那么扩充空间。层序遍历的思想是,先把二叉树第一层结点的指针压入栈中,用front记录栈顶元素,然后pop出栈顶元素,再用之前记录的front打印出第一层结点元素,接下来把第一层结点的左右结点压栈,再次用front记录栈顶元素,然后pop出栈顶元素,依次类推。设二叉树的根节点所在层数为1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第二层上的节点,接着是第三层的节点,以此类推,原创 2023-12-21 10:44:58 · 1716 阅读 · 3 评论 -
数据结构-栈和队列
所谓栈,是一种特殊的线性表,只允许在固定的一端进行插入删除操作。进行数据插入删除的一端叫做栈顶,另一端叫做栈底,栈中的数据遵循先入后出的原则。压栈:栈的数据插入操作叫做压栈,压栈是在栈顶插入数据。出栈:栈的数据删除操作叫做出栈。出栈是在栈顶删除数据。所谓队列,只允许在一端插入数据,在另一端删除数据,并且具有先进先出的特点。入队列:进行插入数据的一端称为队尾出队列:进行删除数据的一端称为队头。原创 2023-11-15 16:41:45 · 188 阅读 · 8 评论 -
数据结构-链表
在上面,链表的指针plist刚开始为NULL,即没有一个结点,这就叫不带哨兵位;当初始链表中带有一个结点,并且这个结点不存储有效数据,而是用来存储即将插入的第一个结点的地址,这就叫哨兵位。再来实现尾删,尾删时要分为链表中有1个结点和大于等于2个结点这两种情况,如果链表中只有一个结点,那么除了删除掉这个结点外,还要让plist指向NULL;在这个结构体中,有两个成员,第一个是val,第二个是结构体类型的指针next,并将这个结构体类型重命名为SLNode;、非顺序的存储结构,数据元素的。原创 2023-11-08 16:30:03 · 225 阅读 · 0 评论 -
链表的中间结点
具体来说就是定义两个指针,一快一慢,快指针一次走两步,慢指针一次走一步,当快指针走到末尾时,慢指针所指向的结点即为中间结点。因此,综合以上两种情况,当fast指向结点的val==NULL或者fast==NULL时,这时的slow即为所求中间结点。,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。原创 2023-11-02 16:36:10 · 89 阅读 · 0 评论 -
移除链表元素
这道题的思路是,设置prev和cur两个结构体指针,prev初始化为空,cur指向链表的第一个元素,接下来分两种情况讨论:1.如果cur->val == val,那么我们要把这个元素从链表中删除掉,并待删除的元素的前一个元素指向待删除的元素的后一个元素,以此删除元素;,在cur->val=val这种情况下,如果prev==NULL,这说明prev一直没动,那么就不能完成上述1中的操作(因为1中的操作需要对prev解引用),此时需要让head=next;=NULL,才可以完成上述1中的操作。原创 2023-11-02 16:17:21 · 72 阅读 · 0 评论 -
数据结构——顺序表
顺序表是用一段的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。原创 2023-10-30 16:39:07 · 213 阅读 · 0 评论 -
算法的时间复杂度和空间复杂度
这个代码和上面的例8完全一样,执行过程也完全一样,但是求得时空间复杂度,在递归时,函数先往深调用,最多创建N个函数栈帧,但最后的Fib(2)调用结束后,Fib(2)函数栈帧销毁,开辟和其同一深度的函数栈帧Fib(1),此时还是N个函数栈帧,然后销毁Fib(1)的函数栈帧,创建上一深度Fib(3)的函数栈帧,再销毁,。该程序的执行次数为N-1 N-2 ...1这样的等差数列,求和(N-1)*N/2,最高阶数为1/2*N^2,因此,省略前面的相乘系数1/2,算法的复杂度是O(N^2)。得到的结果就是大O阶。原创 2023-10-22 21:39:46 · 245 阅读 · 0 评论