数据结构与算法
interstellar-ai
邮箱:interstellar_ai@foxmail.com
展开
-
数据结构与算法-二叉树中序遍历
二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就 是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历 中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对来说要难一点。包含的头文件:...原创 2018-03-22 16:13:36 · 930 阅读 · 1 评论 -
数据结构与算法-二叉排序树的删除操作
在二叉排序树删去一个结点,分三种情况讨论:若*p结点为叶子结点,即PL(左子树)和PR(右子树)均为空树。由于删去叶子结点不破坏整棵树的结构,则可以直接删除此子结点。若*p结点只有左子树PL或右子树PR,此时只要令PL或PR直接成为其双亲结点*f的左子树(当*p是左子树)或右子树(当*p是右子树)即可,作此修改也不破坏二叉排序树的特性。若*p结点的左子树和右子树均不空。在删去*p之后,为...原创 2018-03-26 20:43:31 · 1911 阅读 · 0 评论 -
数据结构与算法-二叉排序树的插入
二叉排序树的插入思想: 判断被插结点是其父亲结点的左、右儿子。将被插结点作为叶子结点插入。 若二叉树为空。则首先单独生成根结点。 注意:新插入的结点总是叶子结点。节点的构造:struct BinaryTreeNode { int val; BinaryTreeNode *left; BinaryTreeNode *right; BinaryTreeNo...原创 2018-03-26 19:06:03 · 15061 阅读 · 2 评论 -
数据结构与算法-二分查找
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。 二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x < a[n/2],则只要在数组a的左半部分继续搜索x,如果x > a[n/2],则只要在数组a的右半...原创 2018-03-21 19:32:32 · 304 阅读 · 0 评论 -
数据结构与算法-快速排序
设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。在c++中可以用函数qsort()可以直接为数组进行排序。 用 法: void qsort(vo...原创 2018-03-21 16:27:12 · 243 阅读 · 0 评论 -
数据结构与算法-二叉排序树的最大最小值搜索
二叉排序树的最小搜索就是一直往左边找,最左边的节点就是最小值。 二叉排序树的最小搜索: 递归实现:BinaryTreeNode* Find_Min(BinaryTreeNode* BST){ if(!BST) return NULL; else if( !BST->left ) return BST; else ...原创 2018-03-25 10:35:10 · 4638 阅读 · 3 评论 -
数据结构与算法-插入排序
插入排序比较适合序列基本有序,且数据量较少的情况。插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据 时间复杂度:T=O(n^2) 是稳定的排序方法void Insertion_Sort(datatype A[], int N){ int i; for (int P = 1; P < N; P++){ ...原创 2018-03-20 19:26:58 · 146 阅读 · 0 评论 -
数据结构与算法-冒泡排序
冒泡排序算法的运作如下:(从后往前)比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。时间复杂度: 最好情况:顺序, T=O(N); 最坏情况:逆序, T=O(N^...原创 2018-03-20 16:11:34 · 160 阅读 · 0 评论 -
数据结构与算法-简单选择排序
简单选择排序的方法是:设所排序序列的个数为n。每趟选取最小的数字交换到本趟的最前面。执行n-1趟后完成了序列的排序void Select_Sort(datatype R[],int n){ //对排序表R[1].....R[n]进行冒泡排法,n是记录个数 for(int i=0; i<n-1; i++) /*做n-1趟选取*/ { int k=i...原创 2018-03-20 13:16:17 · 246 阅读 · 0 评论 -
数据结构与算法-二叉搜索树的查找
二叉搜索树(BST, Binary Search Tree),也称二叉排序树或二叉查找树二叉搜索树:一颗二叉树,可以为空;如果不为空,满足一下性质:非空左子树的所有键值小于其根节点的键值;非空右子树的所有键值大于其根节点的键值;左右子树都是二叉搜索树。二叉搜索树递归查找实现:// 传入树的根节点,并传入要查找的数字,如果有,返回对应的节点的地址,如果没有,返回空。Bina...原创 2018-03-23 16:57:36 · 273 阅读 · 0 评论 -
数据结构与算法-时间复杂度和空间复杂度
算法复杂度分为时间复杂度和空间复杂度。其作用: 时间复杂度是指执行算法所需要的计算工作量; 而空间复杂度是指执行这个算法所需要的内存空间。 (算法的复杂性体现在运行该算法时的计算机所需资源的多少上,计算机资源最重要的是时间和空间(即寄存器)资源,因此复杂度分为时间和空间复杂度)。简单来说,时间复杂度指的是语句执行次数,空间复杂度指的是算法所占的存储空间一、时间复杂度时间复杂度...转载 2018-03-27 09:35:48 · 558 阅读 · 2 评论