数据结构与算法
文章平均质量分 63
I_love_blog
这个作者很懒,什么都没留下…
展开
-
栈的入栈和出栈操作
栈是个好东西,后进先出是其精髓,今天就来点比较基础的东西,先来解决入栈和出栈问题#include #include using namespace std;//重中之重,先定义一个类class Stack{public: void push(int x);//入栈需要参数,不要忘了 int pop();//出栈不需要参数 //还要对栈进行初始化 void init();原创 2017-03-03 15:49:44 · 3675 阅读 · 0 评论 -
图的遍历之 深度优先搜索和广度优先搜索
深度优先搜索的图文介绍1. 深度优先搜索介绍图的深度优先搜索(Depth First Search),和树的先序遍历比较类似。它的思想:假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径相通的顶点都被访问到。 若此时尚有其他顶点未被访问到,则另选一个未被访问的顶点作起始点原创 2017-06-24 23:56:58 · 336 阅读 · 0 评论 -
环形单链表的约瑟夫问题
题目: 约瑟夫环(约瑟夫问题)是一个数学的应用问题: 已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌只剩一个人。解题思路: 1、如果链表为空,或者链表节点数为1,return head; 2、环形链表中循环遍历每个节点,不断转圈,不断让原创 2017-07-05 09:03:29 · 351 阅读 · 0 评论 -
将搜索二叉树转换成双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路:用队列等容器收集二叉树中序遍历结果的方法,时间复杂度为O(N),额外空间复杂度为O(N)1.生成一个队列,记为qu,按照二叉树中序遍历的顺序,将每个节点放入qu中,2.从qu中依次弹出节点,并按照弹出的顺序重连所有的节点即可原创 2017-07-07 09:14:04 · 399 阅读 · 0 评论 -
C++ 计数排序实例详解
这篇文章主要介绍了C++ 计数排序实例详解的相关资料,需要的朋友可以参考下计数排序 计数排序是一种非比较的排序算法优势: 计数排序在对于一定范围内的整数排序时,时间复杂度为O(N+K) (K为整数在范围)快于任何比较排序算法,因为基于比较的排序时间复杂度在理论上的上下限是O(N*log(N))。原创 2017-08-31 16:00:02 · 705 阅读 · 0 评论 -
C++ 基数排序的实现实例代码
这篇文章主要介绍了C++ 基数排序的实现实例代码的相关资料,这里附有实例代码,帮助大家学习理解,需要的朋友可以参考下C++ 基数排序 大家好,今天带来的是自己实现的用C++完成基数排序.在数据结构,算法分析和程序设计的学习过程中,我们经常也无法避免的要学到排序的算法.排序算法是程序设计过程中使用频率极高的算法之一,其输入是一组无序的序列,要求以升序或者降序的方式输出原创 2017-08-31 16:34:04 · 2132 阅读 · 1 评论 -
C++ 直接选择排序的实现实例代码
直接选择排序和直接插入排序类似,都将数据分为有序区和无序区,所不同的是直接播放排序是将无序区的第一个元素直接插入到有序区以形成一个更大的有序区,而直接选择排序是从无序区选一个最小的元素直接放到有序区的最后。 设数组为a[0…n-1]。1. 初始时,数组全为无序区为a[0..n-1]。令i=02. 在无序区a[i…n-1]中选取一个最小的元素,将其原创 2017-08-31 18:41:22 · 562 阅读 · 0 评论 -
C++ 直接选择排序的实现实例代码
直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。 设数组为a[0…n-1]。1. 初始时,a[0]自成1个有序区,无序区为a[1..n-1]。令i=12. 将a[i]并入当前的有序区a[0…i-1]中形成a[0…i]的有序区间。原创 2017-08-31 19:00:34 · 695 阅读 · 0 评论 -
C++ 归并排序的实现实例代码
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序,其的基本思路就是将数组分成二组A,B,如果这二组组内的数据都是有序的,那么就可以很方便的将这二组数据进行排序。如何让这二组组内数据有序了?可以将A,B组各自再分成二组。依次类推,当分出来的小组只有一个数据时,可以认为这个小组组内已经达到了原创 2017-08-31 19:24:51 · 766 阅读 · 0 评论 -
堆与堆排序
出处:http://blog.csdn.net/morewindows/article/details/6709644 堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点转载 2017-06-02 12:42:30 · 289 阅读 · 0 评论 -
插入排序和希尔排序
插入排序排序思路:每次将一个待排序的元素与已排序的元素进行逐一比较,直到找到合适的位置按大小插入。第一趟比较示图:实现:#include #include using namespace std;//插入排序void InsertionSort(int a[], int n){ int i, j; int temp; for (i = 1; i < n;原创 2017-05-31 14:46:41 · 262 阅读 · 0 评论 -
二叉树的搜索和插入操作
今天接触了二叉查找树,万恶的算法导论,老是伪代码,看了好像懂了,实际自己用源代码,困难重重?纠结了一个晚上总算是略懂了一点二叉树;首先还是来定义原创 2017-03-04 19:35:27 · 1785 阅读 · 0 评论 -
继续二叉树之旅,没错,这次是二叉树之————前驱后继
二叉查找树的前驱后继结点:首先得说明一下什么是前驱?什么是后继前驱结点:结点值value小于查找结点值search_value的集合中最大值的结点后继结点:结点值value大于查找结点值search_value的集合中最小值的结点首先开始定义树结点:struct TreeNode { int val; TreeNode *lef原创 2017-03-04 20:35:30 · 1858 阅读 · 0 评论 -
二叉查找树又来了,该死而复杂的删除操作
二叉查找树的删除操作很复杂,而且要考虑的情况较多,在算法导论这本书上分为三种情况来讨论:首先根据给定的val值找到相对应的节点:1.如果该节点既没有左子树,也没有右子树,直接进行删除操作就好,(三种情况中最为简单的一种)2.如果该节点只有左子树或者右子树,则可以通过其子节点和父节点间建立一条链来删除该节点3.如果该节点既有左子树又有右子树,首先要删除当前节点的后继节点m(大于当前节原创 2017-03-06 15:43:42 · 419 阅读 · 0 评论 -
向TREE—INSERT的一个递归版本致敬
递归尽管效率不高,耗内存,但是对于程序猿来说,写少很多代码,初学者会很喜欢的下面来看一下实现的过程:void TREE_INSERT(struct *x, struct *z){ static struct Tree *y = NULL;//一直是指向x的父节点,由于x为根节点,所以根节点 //的父节点为NULL; static struct Tree *root = x; //原创 2017-03-06 16:12:40 · 469 阅读 · 0 评论 -
红黑树之旋转操作,棒棒的注释
红黑树其旋转操作不易理解,今天就和大家深究深究struct Tree* root = NULL; //根节点设置为空void LEFT_ROTATE(struct Tree* T, struct Tree* x)//左旋{ //左旋转: 分三个步骤来叙述旋转代码 struct Tree* y = x->right; //设置y节点 x->right = y->left; //把y的左原创 2017-03-07 16:19:39 · 282 阅读 · 0 评论 -
二叉树递归调用过程
二叉树是最常见最重要的数据结构之一,它的定义如下: 二叉树(binary tree)是有限多个节点的集合,这个结合或者是空集,或者由一个根节点和两颗互不相交的、分别称为左子树和右子树的二叉树组成。 二叉树最基本的操作是遍历:一般约定遍历时左节点优先于右节点,这样根据根节点的遍历顺序可分为三种遍历操作:前序-先遍历根节点,再处理左右节点;中序-先遍历左节点,然后处理根节点,最后处原创 2017-03-27 14:48:10 · 9198 阅读 · 8 评论 -
后缀表达式的计算思路,过程以及算法的实现
计算这个问题最容易的方法是使用一个栈。当见到一个数时就把它推入栈中,在遇到一个运算符时该运算符就作用于从该栈弹出的两个数(符号)上,将所得结果推入栈中,例如后缀表达式6523 + 8 * + 3 + *代码如下:#include #include #define StackSize 30typedef struct stack{ int a[StackSize]; i原创 2017-05-16 14:44:23 · 1215 阅读 · 0 评论 -
堆与堆排序
转自:http://blog.csdn.net/morewindows/article/details/6709644 堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.转载 2017-09-01 09:24:12 · 339 阅读 · 0 评论