数据结构与算法
文章平均质量分 89
主要更新数据结构与算法
接受平凡 努力出众
执行力,就是生命力!
展开
-
【数据结构初阶】第七篇——二叉树的顺序结构及实现(堆的向下,向上调整算法)
2.若目标结点的值比其父节点的值小,则交换目标节点与其父节点的位置,并将原目标节点的父节点当作新的目标节点继续进行向上调整。堆的删除,删除的是堆顶的元素,但是这个删除过程可并不是直接删除堆顶的数据,而是先将堆顶的数据与最后一个结点的位置交换,然后再删除最后一个节点,再对堆进行一次向下调整。数据插入时是插入到数组的末尾,即树形结构的最后一层的最后一个结点,所以插入数据后我们需要运用堆的向上调整算法对堆进行调整,使其在插入数据后仍然保持堆的结构。若小的孩子比父亲大,则不需处理了,调整完成,整个树已经是小堆了。原创 2023-02-01 18:56:24 · 6787 阅读 · 3 评论 -
【数据结构初阶】第六篇——二叉树的重要性质
假设该完全二叉树的层数为K,则该完全二叉树的前K-1层的结点总数为2K-1-1,若该完全二叉树是满二叉树,则该满二叉树的结点总数为2K-1,所以深度为K的完全二叉树的结点总数范围为:2K-1-1 < N原创 2023-02-01 12:48:32 · 4455 阅读 · 3 评论 -
【数据结构初阶】第五篇——栈和队列
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO入队列:进行插入操作的一端称为队尾,出队列:进行删除操作的一端称为对头。出队列,即释放队头指针指向的结点并改变队头指针的指向即可。队列中的每一个结点所占用的内存空间都是动态开辟的,当我们使用完队列后需要及时释放队列中的每一个结点。进行入栈操作前,我们需要检测栈的当前状态,若已满,则需要先对其进行增容,然后才能进行入栈操作。首先,我们需要用结构体创建一个栈,这个结构体需要包括栈的基本内容(栈,栈顶,栈的容量)。原创 2023-01-31 12:31:55 · 4074 阅读 · 2 评论 -
【数据结构初阶】第四篇——双向链表
本章讲的是带头双向链表。这里的头不存放任何数据,就是一个哨兵卫的头结点。//存储的数据类型//数据域//前驱指针//后继指针}ListNode;原创 2023-01-31 09:27:56 · 4033 阅读 · 2 评论 -
【数据结构初阶】第三篇——单链表
2.若只有一个结点,释放其结点,让其链表为空;2.判断第一个是否是其指定的位置3.如果是再来个头插,否则,找到pos的前一个位置posPrev;3.找出pos的前一个prev 4.将prev的next指向pos的next;创建新结点 2.新结点指向原链表 3.头指针指向新结点;1.创建新结点2.判断链表是否为空3.为空则让头指针指向新结点4.否则找到最后一个指针,指向新结点;链表打印就是遍历一遍链表,只不过这里的遍历和数组有点不一样,链表的遍历是判断当前位置是不是为。2.头指针指向第一个结点的next;原创 2023-01-30 17:11:50 · 3912 阅读 · 4 评论 -
【数据结构初阶】第二篇——顺序表
这样有一点好处就是,在静态分配时,当我想要存放顺序表的数据元素超过100时候则会产生错误溢出,而动态分配时,如果一旦超过了分配的空间大小,可以再重新分配一块内存空间,把旧的空间和所增加的数据元素转移到新申请的空间上,这样就不会产生溢出的问题了。静态顺序表的定长数组导致N定长,空间开少了不够用,开多了浪费,所以现实中都是使用动态顺序表,使用。因为顺序表所用的内存空间是动态开辟在堆区的,所以我们在使用完后需要及时对其进行释放,的办法来支持动态扩容,将顺序表变成了"可变长度"的,下面我将实现动态顺序表;原创 2023-01-29 23:06:20 · 1722 阅读 · 2 评论 -
【数据结构初阶】第一篇——算法性能分析
这里的大O是指什么?说到时间复杂度,大家都知道O(n),O(n^2),却说不清什么是大O.算法导论中说道:大O是用来表示上界的,当用它作为算法的最坏情况运行时间的上界,就是对任意数据输入的运行时间的上界。同样算法导论中给出了例子:拿插入排序来说,插入排序的时间复杂度为O(n^2).原创 2023-01-28 16:01:20 · 2075 阅读 · 3 评论