我的数据结构自学笔记
Sc2Player
这个作者很懒,什么都没留下…
展开
-
种子填充法
种子填充法,其实现说到底就是从图像中的一个像素点压入栈中,然后搜索这个点的四周的点,然后再对那些点进行填充,之后再继续搜索。。。从而达到对填充的作用原创 2017-03-13 22:32:34 · 1766 阅读 · 0 评论 -
数据结构-----鸡尾酒排序
介绍鸡尾酒排序,名字很好听.不过,这只是一个对冒泡排序的一个改进的算法而已.这个算法与冒泡排序不同的一点在于,他在冒泡排序从低到高进行一波排序之后,又从高到低进行一波排序,以此类推,因此,这个算法也叫做定向冒泡排序这个算法与冒泡排序一样,在面对乱序程度较高的数据的时候有着比较差的性能实现思路loop 先是从低到高进行排序,比较相邻的两个数,不符合排序要求的就进行顺序调换,...原创 2018-06-12 17:16:49 · 293 阅读 · 0 评论 -
数据结构——基数排序
简介基数排序和其他一般的排序算法不同,一般的排序算法主要是通过关键字之间的比较和移动记录这两种操作,而实现基数排序则不需要进行记录关键字间的比较。 基数排序是一种借助多关键字排序的思想,对单逻辑关键字进行排序的方法。代码实现/*基数排序算法思想假设我有数据11 23 45 29 31 67 59 32假设我拥有10个桶,编号分别为0-9一开始,我将个位数相应的数据都放入桶当中01原创 2017-05-20 20:03:19 · 632 阅读 · 0 评论 -
数据结构——堆排序
算法介绍堆排序只需要记录大小的辅助空间,每个待排序额记录仅占有一个储存空间。 堆的定义如下: 设有n个元素的序列{k1,k2,k3……kn},当且仅当k(i)<=k(2i),k(i)<=k(2i+1),或者k(i)>=k(2i),k(i)>=k(2i+1)时称之为堆。因此,我们可以将这个一维数组看做是一个完全二叉树,而这个完全二叉树满足任意孩子节点的值要小于(大于)其父节点。(也就是说根原创 2017-05-20 19:28:58 · 331 阅读 · 0 评论 -
数据结构——选择排序
简介选择排序是一种比较直观的排序方法算法思想选择排序的思想在于(默认升序排序),在一个数组当中,选择这个数组当中最小的元素,将这个元素放在第一位,然后寻找第二小的元素,将这个元素放在第二位。以此类推,直到将这个数组完成排序。 这是一个比较直观的排序方法代码实现(C++)/*选择排序算法思想在遍历数组的时候找出数组当中最小的元素,然后与第一个互换之后找出第二个最小的元素,然后与第二个互换原创 2017-05-20 18:27:45 · 456 阅读 · 0 评论 -
查找算法——折半查找
介绍折半查找,又称作二分查找。这个查找的算法的特点,就是,要求数据要是有序的。1 ,存储结构一定是顺序存储 2 ,关键字大小必须有序排列然后,利用这组有序的数据之间的关系,来进行折半的查找。比方说,这组数据是升序排列的。一开始,首先对比这组数据的中间的项与关键值(key)的关系。若是关键值(key)>中间值,则说明,关键值(key)在中间值的右侧,因此将这组数据的区间缩小为以中间值为最左侧的小区间原创 2017-05-31 21:04:03 · 29545 阅读 · 3 评论 -
查找算法——顺序查找
介绍顺序查找是在一个已知无(或有序)序队列中找出与给定关键字相同的数的具体位置。原理是让关键字与队列中的数从最后一个开始逐个比较,直到找出与给定关键字相同的数为止,它的缺点是效率低下。算法特点这个算法只需要遍历一次数组,然后将数组里的每一个元素与关键值(key)进行比对,若匹配的上,则说明数组当中存在该元素代码实现//顺序查找void sequentialSearch(int *arr,int l原创 2017-05-31 20:42:31 · 530 阅读 · 0 评论 -
数据结构——Dijkstra算法(寻找图的最短路径)
Dijkstra算法 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。注意该算法要求图中不存在负权边。 问题描述:在无向图 G=(V,E) 中,假设每条边原创 2017-05-14 11:50:49 · 3353 阅读 · 0 评论 -
利用中序和前序遍历确定并生成一颗唯一的树
前言总所周知,一棵树是可以由其前序遍历与中序遍历或者中序遍历和前序遍历来唯一确定的。因此,我们也就可以利用这个结论,在拥有前序遍历和中序遍历的基础上建立一颗唯一的树。基本思想实现这个的基本思想在于找到树的根节点。当你利用前序遍历的第一个元素,就可以找到这棵树的根节点,而在中序遍历中,根节点的左边则是表示树的左子树,而右边则是表示树的右子树。因此,我们可以利用这点,找到这棵树的左(右)子树的前序与中序原创 2017-05-10 18:07:44 · 1128 阅读 · 0 评论 -
数据结构——栈的建立
从数据结构的角度来说,栈也是线性表,其特殊性则在于栈的基本操作是线性表操作的子集,他们的操作是受限与线性表的。栈是限定仅在表尾进行插入或删除操作的线性表。原创 2017-05-10 17:37:09 · 1291 阅读 · 0 评论 -
C++智能指针的简单实现
什么是智能指针智能指针就是在c++当中将指针进行了封装,在保留了指针当中的各种各样的操作的同时,为指针增添了内存管理的功能智能指针,普通指针和普通指针相比,智能指针更加能够防范指针悬空的事情的发生.在c++当中,是没有内存自动回收的管理机制的,那么,内存的释放与生成,全靠程序员的自觉,要是有一个内存块被new生成了出来,却没有delete掉,那么就会产生内存泄漏的风险比如int * p...原创 2018-10-30 20:11:27 · 322 阅读 · 0 评论