top
友情提示
测试消息
确定
友情提示

处理中,请稍后...

二叉树非递归遍历
上一篇文章说到了二叉树,简单实现了一下二叉树的基本操作,用常规的递归思想测试了二叉树的遍历。本篇文章我们来探讨一下二叉树的非递归遍历。【提示:请忽略文章中 “结点”“节点”的混用,懒得改了,输入法承担一半责任】 二叉树的非递归遍历除了前、中、后序遍历外,还有一个层序遍历。前三者常用堆栈辅助完成遍历过程,层序遍历则借助队列完成。本篇文章只探讨前中后三种遍历算法的非递归实现。 在此之前,我们需要准备一个可用的“堆栈”。堆栈不...
2017/11/20
分类:C/C++
评论:0
经典数据结构之二叉树
数据结构可分为线性结构和非线性结构两大类。本篇文章讨论的二叉树属于树形结构之一, 树形结构属于非线性结构。注意:树 和 二叉树 不是包含关系。二叉树不是树的特例,二者是树形结构的两种不同类型,不存在包含关系。之所以在此总结二叉树,是因为堆排序等等常用算法涉及到二叉树,并且二叉树也是一个必备的数据结构基础知识。 在树形结构中,每个节点允许有一个直接前驱节点,但允许有一个以上的直接后继节点。树的存储结构和操作实现都比较复杂,但可以将其转化为二叉树处理。 常用术语 (1)满二叉树:在二叉树中,若所...
2017/11/16
分类:C/C++
评论:1
排序算法:交换排序之快速排序
快速排序是一种二叉树结构的交换排序算法。 快速排序的基本思想:取数据集中的一个元素作为比较标准(一般取第一个元素),调整数据集合中元素的位置,使排在标准元素之前的元素都小于标准元素,排在标准元素之后的元素都大于标准元素。这样一次之后,数据集合被分为了以标准元素为中心的两个子集,左边的子集关键字值都小于标准元素,位于标准元素右边的子集则大于标准元素。之后对分出来的子集采样同样的算法进行处理。递归算法的结束条件是集合上界小标大于或等于集合下界下标,也是就下述算法中的 low >= high。...
2017/11/11
分类:C/C++
评论:0
排序算法:交换排序之冒泡排序
利用交换数据元素的位置进行排序的方法称作交换排序。常用的交换排序方法有冒泡排序和快速排序。 冒泡排序不用多说,其本身的名称也很适合这个算法的描述。每次循环都将未处理的元素中最大(或最小)的元素移到未处理元素的末端,或者说排列数据的开端,随便怎么说。这个算法和直接选择排序有相同的地方,都是每次寻找未处理元素集中的最大(或最小)元素,然后再处理已排列元素集。不同的是二者对于已经找到的元素的处理方式(或者说查找符合条件的元素的方式不同),即交换和插入的区别,这个也是最主要区别, 另外,冒泡排序是稳定...
2017/11/08
分类:C/C++
评论:0
排序算法:选择排序之直接选择排序
直接选择排序是选择排序算法的基本实现,也是一种经典的排序算法,理解起来也简单。 选择排序基本思想:每次从待排序的数据元素中选取关键字最小(或最大)的元素放到数据元素集合的最前面(或最后面),数据元素集合不断缩小,当数据元素集合为空时,排序完成。常用的选择排序算法有直接选择排序和堆排序两种。【堆排序是一种基于完全二叉树的排序】 直接选择排序的基本思想:从待排序的数据元素集合中选取关键字最小的元素并将其与原始数据集合中的第一个元素互换;然后从不包括第一个元素的数据集中选取关键字最小的数据元素,将...
2017/11/05
分类:C/C++
评论:0
排序算法:插入排序之希尔排序
希尔排序是插入排序之一,可以说其是直接插入排序的一个进一步实现,在其中你会发现直接插入排序的存在。 希尔排序基本思想:把待排序的数据元素分为若干个组,对同一个小组内的数据元素运用直接插入排序;小组的个数逐渐减少;当完成了所有元素都在一个组内的排序后,排序过程结束。【其实最后就是进行了一个增量为1的直接插入排序,只不此时集合元素顺序已经快接近排序完成的状态,也就是直接插入排序运行效率较高的状态】。由于每一次分组数都是减少的,即过程中直接插入排序的增量是减少的,所以希尔排序又称缩小增量排序。 C...
2017/11/04
分类:C/C++
评论:0
排序算法:插入排序之直接插入排序
排序算法是一个合格的猿必须掌握的基本算法之一。在程序设计中,排序是最常遇到的问题之一。排序算法有很多种,不同的算法有着不同的特性。今天的主角是直接插入排序,其属于插入排序算法之一,是一个比较经典的算法。 插入排序的基本思想:从初始有序的子集开始,不断地把新的数据元素插入到一排列有序集合的合适位置,使子集中的元素不断增多,当子集元素个数等于集合元素个数时,排序结束。 直接插入排序是插入排序的一种,其基本思想:顺序地把待排序的数据元素按其关键字值得大小插入到已排序已排序元素子集合的适当位置。子集...
2017/11/02
分类:C/C++
评论:0
指针操作时得注意的一些要点
通俗点讲,指针是内存地址的一个形象化描述,通过其本身可以访问以它自身为地址的内存单元。为方便理解,你可以将指针简单理解为指向某个内存空间的对象。那么,既然指针指向的是某个内存单元,通过它能够访问该内存空间也是自然的。 下面说一下几个与指针相关的值得注意的点 (1)指针的大小 (2)指针的自加和自减 (3)指针大小和一块内存的大小 指针的大小 指针的大小对于刚接触指针的人来说是一个很容易令人困惑的问题,其实指针的大小很容易理解。上面已经说过,指针及内存地址,那么容易想到在32位运行环境(32位...
2017/06/18
分类:C/C++
评论:0
一个久远的项目:基于Qt的简单计算器
以前刚接触QT时做的一个计算器程序,只是实现了一些基本的运算,由于是初期摸索着做的,代码结构很混乱,后期也没有继续维护,但这是我的第一个QT项目,还是放到这里做个纪念吧。也可以给初入Qt的朋友做个参考。 这里提供一下源码及可执行文件: 工程下载(开发工具VS 2015):点击下载 可执行文件(安装即可运行):点击下载 当然,你也可以在github上下载源码:点击跳转(请无视我空白的github提交记录, 尴尬。。。) 效果展示 功能一:基本计算 功能二:学分绩点计算(请无视,计算方法...
2017/06/13
分类:C/C++
评论:0
实现安全的strcmp函数:secure_strcmp
最近看到一个题,题目大概意思是这样的,在不考虑外界因素的条件下,strcmp函数在比较相同长度相同内容的执行时间是相同的,但是同等长度不同内容的比较所花的时间有可能不一样,这可能会成为安全攻击的切入点。要求我们实现安全的strcmp函数,保证每次比较相同长度不同内容字符串时所花的时间是相同的。 下面谈谈我的见解,我是这样想的,既然比较花的时间不一样,那可能是考虑到性能,没有做完全的比较(惭愧,没看过strcmp源码),发现存在不同字符就返回比较结果。 所以要实现安全的strcmp函数,我们很...
2017/05/23
分类:C/C++
评论:0
格雷码递归生成的简单实现
一个c++递归生成格雷码的简单算法。 #include <iostream> #include <string> #include <vector> using namespace std; /***************************/ /* 0 1 00 01 11 10 000 001 011 010 110 111 101 100 0000 0001 0011 0010 0110 0111 0101 0100 1100 1...
2017/05/02
分类:C/C++
评论:0
上一页1下一页
热门标签
今日倒计时
小时 分钟
年少不识曲中意,再听已是曲中人
加油吧骚年
文章分类
最新文章
浏览排行
分享

关于友情链接

友情链接申请请到留言板块留言。注明网站名称及网址。期待您的友链,欢迎留言。
最新留言
[2018/04/07]太难找了,找到了
[2018/03/20]Entry fileTemplates//Singleton.java.ft not found in C:/Dev/android-studio/lib/resources_en.jar 该错误对我们使用AS没有影响吗?为什么复制保存后重新创建一个新的之后这个错误又出现了?
[2018/01/23]815cce30b85eb6b7ee7930c09135fcf7好漂亮的博客空间啊
[2018/01/06]好漂亮的博客.......
[2017/12/26]试试水
[2017/12/20] 博主可以分享一下这个源码不, 很喜欢这个博客
[2017/11/19]你加我友链了????
[2017/11/19]你的alert 很不友好哈
[2017/11/19]友链已添加
[2017/11/19]路过帮踩。
Copyright © 2018 DevSONG . All rights reserved. 有疑问或者建议? 留言给我或者E-mail me
滇ICP备17002307号-3