数据结构
临冬辰
这个作者很懒,什么都没留下…
展开
-
一步一步建立一个栈
一步一步建立一个栈编程注意: 1) 函数执行前先判断数据是否合理,是否为空; 2) 数据数据输入后检查输入是否输错,是否存在;类型不匹配的问题; 3) 用delete新建的对象,指针在函数运行结束指向NULL,避免内存泄露; 4) 再做插入、删除操作时,注意需要插入或删除的位置是否越界,是否在边界;原创 2015-12-09 13:26:08 · 1386 阅读 · 1 评论 -
排序算法—希尔排序算法分析与实现(Python)
December 25, 2015 8:58 AM希尔排序,也称递减增量排序算法,是插入排序的一种高速而稳定的改进版本。 希尔排序是基于插入排序的以下两点性质而提出改进方法的: - 插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率 - 但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位历史希尔排序按其设计者希尔(Donald Shell)的名字命名,该原创 2015-12-25 09:06:32 · 1034 阅读 · 2 评论 -
挑战面试编程:查找数组中第k大的数
查找数组中第k大的数转载 2016-01-09 11:47:33 · 648 阅读 · 1 评论 -
排序算法—直接插入排序算法分析与实现(Python)
插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。插入排序方法分直接插入排序和折半插入排序两种,这里只介绍直接插入排序,折半插入排序留到“查找”内容中进行。原创 2015-12-24 19:37:17 · 664 阅读 · 2 评论 -
排序算法—选择排序算法分析与实现(Python)
选择排序的思想非常直接,不是要排序么?那好,我就从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。可以很清楚的发现,选择排序是固定位置,找元素。相比于插入排序的固定元素找位置,是两种思维方式。不过条条大路通罗马,两者的目的是一样的。原创 2015-12-23 12:53:35 · 563 阅读 · 2 评论 -
排序算法—冒泡排序算法分析与实现(Python)
原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子。原创 2015-12-22 13:23:11 · 794 阅读 · 3 评论 -
查找算法—斐波那契查找算法分析与实现(Python)
黄金比例又称黄金分割,是指事物各部分间一定的数学比例关系,即将整体一分为二,较大部分与较小部分之比等于整体与较大部分之比,其比值约为1:0.618或1.618:1。时间复杂度:如果要查找的记录在右侧,则左边的数据都不用在哦按段了,不断反复进行下去,对处于当中的大部分数据源,其工作效率要高一些所以尽管斐波那契查找的时间复杂度也为O(logn)。但品均性能上来说,斐波那契查找要优于折半查找,可惜如果是最坏情况,原创 2015-12-21 12:54:09 · 2060 阅读 · 2 评论 -
查找算法—折半查找算法分析与实现(Python)
折半查找是我很喜欢的一种查找方式,它代码简单,查询效率很高,时间复杂度是0(log2n).折半查找是在一个有序的元组中查找元素,它通过关键词与中间值的比较,来查找相关的元素。如果关键词比中间值大,那么就在元组的后半部分查找,反之亦然。原创 2015-12-20 14:07:05 · 1776 阅读 · 2 评论 -
最短路径算法—Floyd(弗洛伊德)算法分析与实现(Python)
Floyd算法是解决任意两点间的最短路径的一种算法,可以正确处理带权有向图或负权的最短路径问题Floyd算法的基本思想:1. 利用二维数组dist[i][j]记录当前vi到vj的最短路径长度,数组dist的初值等于图的带权邻接矩阵;2. 集合S记录当前原创 2015-12-19 23:06:55 · 16619 阅读 · 5 评论 -
最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(Python)
Dijkstra(迪杰斯特拉)算法是典型的最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。原创 2015-12-18 21:11:10 · 8473 阅读 · 2 评论 -
最小生成树,克鲁斯卡尔算法(Python实现)
克鲁斯卡尔算法的基本思想:设有一个有n个顶点的连通网N={V,E},最初先构造一个只有n个顶点,没有边的非连通图T={V, E},图中每个顶点自成一个连通分量。当在E中选到一条具有最小权值的边时,若该边的两个顶点落在不同的连通分量上,则将此边加入到T中;否则将此边舍去,重新选择一条权值最小的边。如此重复下去,直到所有顶点在同一个连通分量上为止原创 2015-12-17 13:56:47 · 6385 阅读 · 3 评论 -
最小生成树,普里姆算法(Python实现)
普里姆算法的基本思想:普里姆算法是另一种构造最小生成树的算法,它是按逐个将顶点连通的方式来构造最小生成树的。原创 2015-12-16 13:46:26 · 10316 阅读 · 4 评论 -
排序算法—快速排序算法分析与实现(Python)
快速排序采用的思想是分治思想。快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正 确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的原创 2015-12-29 14:27:34 · 588 阅读 · 1 评论 -
排序算法—归并排序算法分析与实现(Python)
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是利用递归和分而治之的技术将数据序列划分成为越来越小的半子表,再对半子表排序,最后再用递归步骤将排好序的半子表合并成为越来越大的有序序列,归并排序包括两个步骤,分别为:- 1)划分子表- 2)合并半子表原创 2015-12-28 13:41:19 · 626 阅读 · 2 评论 -
一步一步建立一个二叉树
一步一步建立一棵二叉树原创 2015-12-10 13:52:55 · 1606 阅读 · 1 评论 -
一步一步建立一个队列
一步一步建立一个队列编程注意: 1) 函数执行前先判断数据是否合理,是否为空; 2) 数据数据输入后检查输入是否输错,是否存在;类型不匹配的问题; 3) 用delete新建的对象,指针在函数运行结束指向NULL,避免内存泄露; 4) 再做插入、删除操作时,注意需要插入或删除的位置是否越界,是否在边界;原创 2015-12-09 13:18:32 · 1973 阅读 · 1 评论 -
一步一步建立一个单链表
创建一个单链表编程注意:函数执行前先判断数据是否合理,是否为空;数据数据输入后检查输入是否输错,是否存在;类型不匹配的问题;用delete新建的对象,指针在函数运行结束指向NULL,避免内存泄露;再做插入、删除操作时,注意需要插入或删除的位置是否越界,是否在边界;原创 2015-12-08 13:27:07 · 1870 阅读 · 1 评论 -
排序算法—堆排序算法分析与实现(Python)
堆排序的时间复杂度是O(nlgN),与快速排序达到相同的时间复杂度。但是在实际应用中,我们往往采用快速排序而不是堆排序。这是因为快速排序的一个好的实现,往往比堆排序具有更好的表现。堆排序的主要用途,是在形成和处理优先级队列方面。另外,如果计算要求是类优先级队列(比如,只要返回最大或者最小元素,只有有限的插入要求等),堆同样是很适合的数据结构。原创 2015-12-27 12:09:42 · 705 阅读 · 2 评论