
数据结构与算法
数据结构与算法
纸短勤常在
萌新一枚,请多指教!
展开
-
数据结构-十大经典排序算法之插入排序
数据结构-十大经典排序算法之插入排序算法思想算法步骤算法动态演示部分代码实现第一部分:算法思想插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。第二部分:算法步骤从第一个元素开始,该元素认为已经被排序;取下一个元素,在已经排序的元素序列中从后向前扫描;如果已排序元素大于新元素,将已排序元素移到下一位置;重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;将新元素插入到该位置后;重复步骤2~5。第三部分:算法动态演示转载 2020-05-17 09:55:23 · 808 阅读 · 0 评论 -
数据结构-十大经典排序算法之快速排序
数据结构-十大经典排序算法之快速排序算法思想算法步骤算法动态演示部分代码实现第一部分:算法思想快速排序是最常用的一种排序算法,它的特点是速度快、效率高。快速排序的基本思想:选择一个关键值作为基准值。比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的)。一般选择序列的第一个元素作为基准值。第二部分:算法步骤从数列中挑出一个元素,称为基准pivot;分区partition操作:比基准值小的元素放在左边,比基准值大的元素放在右边;递归recursive:把小于基准原创 2020-05-24 22:48:47 · 698 阅读 · 0 评论 -
数据结构-十大经典排序算法之希尔排序
数据结构-十大经典算法之希尔排序算法思想算法步骤算法动态演示部分代码实现第一部分:算法思想希尔排序由Shell在1959年发明,又叫缩小增量排序,是第一个突破O(n^2)的排序算法,属于简单插入排序的改进版,会优先比较距离较远的元素。第二部分:算法步骤选择一个增量序列;每趟排序,根据对应的增量,将待排序列分割成若干子序列,分别对各子序列进行直接插入排序;按增量序列个数,对序列进行趟排序。第三部分:算法动态演示下图的增量序列为:5,2,1,第一趟排序将增量为5的子序列进行插入排序,第二原创 2020-05-18 09:17:15 · 1400 阅读 · 1 评论 -
二叉树递归(含非递归)遍历方式的流程图!
时间紧迫,画的有点粗糙,请见谅!创建递归前序遍历递归中序遍历递归后序遍历非递归前序+度为2、1叶子结点等求法原创 2020-05-01 14:24:29 · 6399 阅读 · 2 评论 -
数据结构-十大经典排序算法之冒泡排序
算法思想:冒泡排序重复地遍历待排序的数列,每次比较两个相邻元素,如果它们的顺序错误就把它们交换。重复地进行遍历直到没有再需要交换时表示数列已经排序完成。算法步骤:比较相邻的元素:若第一个比第二个大,则交换;遍历开始第一对到结尾最后一对,执行步骤1;重复步骤1~2,直到排序完成。可改进的冒泡排序:第一趟排序之后最后一个元素是最大的,因此下一趟遍历只需执行到倒数第二对。算法动态演示:C++部分代码实现:void sort(int *arr, int n)// 将乱序序列arr转化为升序序原创 2020-05-13 17:12:38 · 1354 阅读 · 0 评论 -
最新出炉的二叉树的递归与非递归6种遍历方式,你都明白了吗?
二叉树的基本概念:在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。一棵深度为k,且有2^k-1个结点的二叉树,称为满二叉树。这种树的特点是每一层上的结点数都是最大结点数。而在一棵二叉树中,除最后一层外,若其余层都是满的,并且或者最后一层是满的,或者是在右...原创 2020-04-23 15:50:32 · 289 阅读 · 0 评论 -
编写算法,将A表和B表归并成一个按元素值递增有序排列的线性表C,并要求利用原表(即A表和B表的)结点空间存放表C
代码如下(希望对大家有帮助)#include <iostream>using namespace std ;class Node{ public: int data ; Node *next ;};Node * createNode(int n ){ Node *head = new Node ; Node *pre = head ; for(int i = ...原创 2020-03-22 16:22:38 · 1679 阅读 · 0 评论 -
二叉树交换左右子树的递归与非递归算法
在学习二叉树的相关基本操作时,很多时候都需要运用递归,递归在学习的数据结构与算法中显得非常重要。递归算法 recursion algorithm在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。其核心是将原始问题转化为子问题。递归:BiTreeNode* BiTreeChange(BiTreeNode* root)// 实现二叉树左右子树的交换(递归法)// 参数...原创 2020-05-04 23:32:36 · 11240 阅读 · 6 评论 -
哈夫曼树与哈夫曼编码(C++实现)
哈夫曼树与哈夫曼编码(C++实现)哈夫曼树的构造方法1、**对给定的n个权值{W1,W2,W3,…,Wi,…,Wn}构成n棵二叉树的初始集合F={T1,T2,T3,…,Ti,…, Tn},其中每棵二叉树Ti中只有一个权值为Wi的根结点,它的左右子树均为空。2、在F中选取两棵根结点权值最小的树作为新构造的二叉树的左右子树,新二叉树的根结点的权值为其左右子树的根结点的权值之和。3、从F中删除这两棵树,并把这棵新的二叉树同样以升序排列加入到集合F中。4、重复2)和3),直到集合F中只有一棵二叉树为原创 2020-05-16 15:46:22 · 2752 阅读 · 5 评论 -
最新出炉的C++二叉树的构建与三种递归遍历方式,等你来看!!!
二叉树的相关基本概念:在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。一棵深度为k,且有2^k-1个结点的二叉树,称为满二叉树。这种树的特点是每一层上的结点数都是最大结点数。而在一棵二叉树中,除最后一层外,若其余层都是满的,并且或者最后一层是满的,或者是...原创 2020-04-23 10:04:23 · 347 阅读 · 1 评论 -
数据结构-十大经典排序算法之归并排序
文章目录图示过程排序流程合并数组动图演示代码演示复杂度分析时间复杂度空间复杂度稳定性图示过程排序流程合并数组动图演示代码演示public static void mergeSort(int[] arr) { sort(arr, 0, arr.length - 1);}public static void sort(int[] arr, int L, int R) { if(L == R) { return; } int mid = L转载 2020-06-29 14:24:19 · 817 阅读 · 0 评论 -
数据结构-十大经典排序算法之选择排序
数据结构-十大经典排序算法之选择排序算法思想算法步骤算法动态演示部分代码实现第一部分:算法思想选择排序是一种简单直观的排序算法,首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。**第二部分:**算法步骤初始状态:无序序列为R[0,n-1],长度n,有序区为空;第i=1,…,n-1趟排序从当前无序区R[i-1,n-1]中选出最小的元素R[k],并将它与无序区的第1个记录R[i原创 2020-05-16 09:19:05 · 2045 阅读 · 1 评论 -
数据结构-二叉树-树的构建+7种遍历方式+求度为1、2以及叶子结点的个数+树中最值!!
以二叉链表作存储结构,编写程序,实现如下的功能:(将近400行代码,觉得挺好的给个关注给个赞吧!谢谢)1、根据输入的数据建立一个二叉树;2、分别采用前序、中序、后序的遍历方式显示输出二叉树的遍历结果3、采用非递归的编程方法,分别统计二叉树的节点个数、度为1、度为2和叶子节点的个数,以及数据值的最大值和最小值。4.7种递归方式:递归前序、递归中序、递归后序、层序、非递归前序、非递归后序...原创 2020-04-27 22:54:54 · 1631 阅读 · 0 评论