数据结构
KrMzyc
去码头整点薯条
展开
-
二叉树操作(2)—— 进阶部分
二叉树进阶操作统计度数为1的节点的个数叶子节点到根节点的路径交换左右节点广度优先遍历广度优先遍历所谓广度,即是按照树的横向来遍历,遵循按顺序输出,所以引入队列,进行先入先出。(直接用STL容器了,自己写队列操作,不可能,绝对不可能????)测试实例:int Count_Grade_1(Bitree T) //统计度数为1的节点个数{ if (T == NULL) return 0; else if ((!T->leftchild) &am原创 2021-03-13 12:29:41 · 101 阅读 · 0 评论 -
二叉树操作(1)—— 基础部分
二叉树基础操作建立二叉树(这里用先序)二叉树的先序遍历二叉树的中序遍历二叉树的后序遍历测量二叉树深度统计二叉树的节点个数统计二叉树的叶子节点个数所有操作均以递归形式(非递归的太麻烦了???? )测试用例:#include <iostream>#include <stack>#include <algorithm>using namespace std;typedef struct Node原创 2021-03-13 10:50:04 · 98 阅读 · 0 评论 -
排序(七): 堆排序 - Heap_Sort
堆排序听到这个就又开始头痛了。堆排序,顾名思义,用堆进行的排序。但实际上,只要知道了具体的做法,堆排序并不难。堆排序的困难在于建立最大堆(这里用最大堆为例)直接上图5比自己的子节点要小,故要移位又发现5还是比字节点要小,所以接着换像这样逐步得到最大堆最大堆设置完毕,就要开始进行堆排序。1. 将堆的顶部,与最后一个元素交换。2. 再将剩下的元素进行上述操作,调整为最大堆。3. 调整完毕,继续将最大元素与最后一个元素交换。4. 如此类推,直至排序完成上代码#include &原创 2021-01-25 15:21:18 · 130 阅读 · 0 评论 -
排序(六): 归并排序 - Merge_Sort
什么是归并排序归并排序讲究一个分割包围,统一歼灭的战略思想先将原数组中的数根据与指针数的大小进行比较,从而得到不同的数组,此为分割包围。再将数组进行归并,整合,排序,此为统一歼灭。语言难懂,直接上图这里,我将左指针数直接定义为第一个数,右指针定义为位于数组中间的数上代码#include <iostream>using namespace std;void merge(int a[], int l, int r, int mid){ int* aux = new int[r原创 2021-01-24 15:01:49 · 173 阅读 · 1 评论 -
排序(五): 希尔排序 - shell_sort
当我第一次听到希尔排序时,我的心里第一个蹦出来的印象是这样的当然没有我想得那么扯。希尔排序是以其发明者Donald Shell的名字命名的。希尔排序简单来说就是插入排序的升级版。插入排序是一个一个的比较插入,而希尔排序则规定了一个步长gap,将a[i]与a[i+gap](或a[i-gap])相比较进行插入排序。如下图所示第一遍排序可得以上结果,此时将gap减小,在进行排序,直到gap=1时为止(此时就是直接插入排序)。#include <iostream>#define N 1原创 2020-07-04 21:42:45 · 232 阅读 · 0 评论 -
排序(四): 插入排序 - insert_sort
插入排序。顾名思义,排序的过程通过插入来实现。为了能够更加直观地展现其过程,请看下图第一次,有序的数组只有一个元素{5},从第二个元素开始,向前比较,可得2<5,则将2插入第一个有序数组里,得到第二个有序数组{2,5}再从第三个元素依次使用插入排序可得...原创 2020-07-04 17:55:11 · 258 阅读 · 0 评论 -
排序(三): 快速排序 - Quick_sort
快速排序。顾名思义,该排序算法的特点就是快。相较于冒泡与选择排序,快速排序的时间复杂度小很多(特别是在数据量大的情况下)为O(nlogn),所以其优势很明显。个人感觉在一般的题目或oj中,快速排序是非常实用的工具。(C++的sort函数嘛。。。能偷懒就偷懒呗)当然,具体情况具体对待。排序的方法有很多,不愁没方法做。书归正传。快速排序的思路与选择排序些许相似。快速排序要先指定一个关键字(通常是区间的第一个元素),分别从起点和终点相向而行,并与关键字比较。以升序为例,我们总希望后面的数比前面的数大,所以当后原创 2020-06-29 12:35:59 · 287 阅读 · 0 评论 -
排序(二): 选择排序 - select_sort
选择排序。个人觉得与冒泡排序区别不大。冒泡排序是将第i个元素与其后的所有元素相比较,从而得出结果。而选择排序是将第i个元素假定为最大/最小元素,再进行比较,找出比其更大/更小的元素,并将其对换顺序,以此循环。二者时间复杂度皆为O(n^2),故在时间限制与比较个数多的情况之下不用。下面是选择排序(以升为例)using namespace std;void select_sort (int* a, int len){ int i,j,min,temp; for (i=0; i<len-1; i原创 2020-06-28 16:31:10 · 295 阅读 · 0 评论 -
排序(一): 冒泡排序-Bubble_sort
冒泡排序。刚接触时对这个名字一直觉得新奇,当然,如果让我现在去解释,我只能与网上的解释大同小异。所以对于名字就不做解释。下面直接进入正题。冒泡排序是一种比较简单,时间复杂度较高的排序,再没有时间限制和排序数的个数不大数为情况之下,还是很实用的一种排序方法。以升序为例:using namespace std;void Bubble_sort_up (int *a, int n){ int i,j,temp; for (i=0; i<n; i++) { for (j=i+1; j&l原创 2020-06-28 13:27:25 · 537 阅读 · 0 评论