随笔分类 -  数据结构与算法

摘要:“归并”一词的中文含义就是合并、并入的意思,归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and C 阅读全文
posted @ 2019-03-05 19:53 小林子奋斗的点滴 阅读(227) 评论(0) 推荐(0)
摘要:就如同拿到一摞乱扑克牌时候要在手里将顺序整理好一样,直接插入排序(Straight Insertion Sort)的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。 复杂度分析: 从空间来看,它需要一个记录的辅助空间O(n)(其实不需要也可以,直接在原数组中进行 阅读全文
posted @ 2019-03-05 11:14 小林子奋斗的点滴 阅读(208) 评论(0) 推荐(0)
摘要:冒泡排序的思想就是不停的交换,通过交换完成最终的排序,但是我们可不可以在排序的过程中找到合适的关键字再做交换,并且只移动一次就完成相应关键字的排序定位工作,这就是选择排序的初步思想。 选择排序的基本思想就是(有n个数据,即长度为n)在 n - start +1 个记录中(start为大循环的开始)选 阅读全文
posted @ 2019-03-05 10:00 小林子奋斗的点滴 阅读(217) 评论(0) 推荐(0)
摘要:冒泡排序(Bubble Sort)是一种交换排序,算法执行的过程中,看起来像是小的数往上浮,或者是大的数往下沉,于是称之为冒泡排序; 它的基本思想是:两两比较相邻记录的关键字,如果反序就交换,直到没有反序的记录为止。 第一次循环,外循环中的 start 位于最顶端,此时可以将最小值 1 冒泡到最顶端 阅读全文
posted @ 2019-03-04 17:24 小林子奋斗的点滴 阅读(351) 评论(0) 推荐(0)
摘要:本节作为排序的开场白,先总结一下各种排序的稳定性和时间复杂度。 首先说一下排序稳定性的定义: 假设排序序号是 i 和 j ,且在排序前的序列中 i 领先于 j ,如果排序之后 i 仍然领先于 j ,则称所有的排方法是稳定的;反之,若使得排序后的序列中,j 领先 i ,则称所用的排序算法是不稳定的。 阅读全文
posted @ 2019-03-04 16:15 小林子奋斗的点滴 阅读(212) 评论(0) 推荐(0)
摘要:二叉排序树(Binary Sort Tree),又称为二叉查找树。它或是一棵空树,或者是具有下列性质的二叉树: (1) 若它的左子树不空,则左子树上所有结点的值均小于他的根结点的值; (2) 若它的右子树不空,则右子树上所有结点的值均小于他的根结点的值; (3) 它的左右子树也分别为二叉排序树 下面 阅读全文
posted @ 2018-11-05 23:55 小林子奋斗的点滴 阅读(184) 评论(0) 推荐(0)
摘要:先对线性表进行有序排列,之后进行查找 主要有折半查找,插值查找和斐波那契查找 它们的时间复杂度均是O(logn),显然远远好于顺序查找的O(n)。但就平均性能来说,斐波那契查找要优于折半查找。可惜如果是最坏的情况,key=1,那么始终都处于左侧长半区在查找,则查找效率要低于折半查找。 还有比较关键的 阅读全文
posted @ 2018-11-01 22:42 小林子奋斗的点滴 阅读(150) 评论(0) 推荐(0)
摘要:顺序查找(Sequential Search)又叫线性查找,是最基本的查找技术,它的查找过程是:从表中第一个(或者最后一个)记录开始,逐个进行记录的关键字和给定值比较,若某个记录的关键字和给定值相等,则查找成功,找到所查的记录;如果直到最后一个(或者第一个)记录,其关键字和估计值比较都不等时,则表中 阅读全文
posted @ 2018-11-01 19:42 小林子奋斗的点滴 阅读(211) 评论(0) 推荐(0)
摘要:查找(Searching)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。 静态查找表:只做查找操作的查找表。 它的主要操作有: (1)查询某个“特定的”数据元素是否在查找表中。 (2)检索某个“特定的”数据元素和各种属性。 对于静态查找,可以使用线性表结构来组织数据 阅读全文
posted @ 2018-11-01 17:03 小林子奋斗的点滴 阅读(137) 评论(0) 推荐(0)
摘要:这里创建的二叉树为结构为: 实现的二叉树遍历为前序遍历,中序遍历和后序遍历 具体代码为: 实现上述函数: 最后的输出结果: 阅读全文
posted @ 2018-10-28 18:36 小林子奋斗的点滴 阅读(176) 评论(0) 推荐(0)
摘要:1、定义: 树(Tree)是n(n>=0)个节点的有限集。n=0时称为空树。在任意一棵非空树中: (1) 有且只有一个特定的称为根(root)的结点; (2) 当n>1时,其余结点可分为m(m>0)个互不相交的有限集,其中每一个集合本身又是一棵树,并且称为根的子树(Subtree) 强调两点: (1 阅读全文
posted @ 2018-10-26 16:20 小林子奋斗的点滴 阅读(165) 评论(0) 推荐(0)
摘要:实现上述函数: 最后的实现结果: 阅读全文
posted @ 2018-10-26 14:49 小林子奋斗的点滴 阅读(167) 评论(0) 推荐(0)
摘要:实现上述函数: 最后的实现结果: 阅读全文
posted @ 2018-10-24 20:37 小林子奋斗的点滴 阅读(324) 评论(0) 推荐(0)
摘要:串是由零个或多个字符组成的有限序列,又名叫字符串。 子串与主串:串中任意个数的连续字符组成的子序列称为该串的子串,相应地,包含子串的串称为主串。 本质上,它是一种线性表的扩展,但相对于线性表关注一个个元素来说,我们对串这种结构更多的是关注它子串的应用问题,如查找、替换等操作。 阅读全文
posted @ 2018-10-23 21:13 小林子奋斗的点滴 阅读(273) 评论(0) 推荐(0)
摘要:其中的参考图例为:(截图来自大话数据结构) 1、图1: 2、图2: 3、图3: 下面就实现一下上述函数吧! 最后的输出结果是这样的: 阅读全文
posted @ 2018-10-23 10:07 小林子奋斗的点滴 阅读(136) 评论(0) 推荐(0)
摘要:实现上述函数: 最后的输出结果: 阅读全文
posted @ 2018-10-22 22:18 小林子奋斗的点滴 阅读(172) 评论(0) 推荐(0)
摘要:实现函数: 实现结果: 阅读全文
posted @ 2018-10-21 10:41 小林子奋斗的点滴 阅读(152) 评论(0) 推荐(0)
摘要:用一个数组还存储两个栈。数组有两个端点,两个栈有两个栈底,让一个栈的栈底作为数组的始端,即下标为0处,另一个栈为数组的末端,即下标为数组长度n-1处。这样,两个栈如果增加元素,就是两端点向中间延伸。 关键思路: 它们是在数组的两端,向中间靠拢。top1和top2是栈1和栈2的栈顶指针,只要它们两个不 阅读全文
posted @ 2018-10-19 23:36 小林子奋斗的点滴 阅读(362) 评论(0) 推荐(0)
摘要:下面来实现一下这些功能 最后的输出结果是: 阅读全文
posted @ 2018-10-19 22:20 小林子奋斗的点滴 阅读(162) 评论(0) 推荐(0)
摘要:栈是限定仅在表尾进行插入和删除操作的线性表。把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈,栈又被称为,后进先出的线性表。 队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。 阅读全文
posted @ 2018-10-19 22:15 小林子奋斗的点滴 阅读(137) 评论(0) 推荐(0)