数据结构
四九城小白~阿勋
这个作者很懒,什么都没留下…
展开
-
数据结构查找算法(二分查找)
查找算法之二分查找二分查找二分算法步骤描述二分查找的应用场景:二分查找的实现(递归算+非递归)递归算非递归实现参考例子后记:二分查找二分查找算法,说白了就是在有序的数组里面给予一个存在数组里面的值key,然后将其先和数组中间的比较,如果key大于中间值,进行下一次mid后面的比较,直到找到相等的,就可以得到它的位置。前提: 线性表中的记录必须是关键字有序(通常从小到大),线性表必须采用顺序存储。基本思想: 取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关原创 2020-08-01 13:48:00 · 894 阅读 · 0 评论 -
C++数据结构——栈
C++数据结构——栈前言1、栈(Stack)是一种线性存储结构,它具有如下特点:2、栈的相关概念:3、栈的常用操作为:4、栈的常见分类:5、实例分析前言最近计划再复习一遍数据结构,看到一篇博客:https://www.cnblogs.com/QG-whz/p/5170418.html#_label0。1、栈(Stack)是一种线性存储结构,它具有如下特点:(1)栈中的数据元素遵守“先进...原创 2019-09-26 23:01:54 · 464 阅读 · 0 评论 -
二分查找
二分查找法作为一种常见的查找方法,将原本是线性时间提升到了对数时间范围,大大缩短了搜索时间,但它有一个前提,就是必须在有序数据中进行查找。二分查找操作的数据集是一个有序的数据集。开始时,先找出有序集合中间的那个元素。如果此元素比要查找的元素大,就接着在较小的一个半区进行查找;反之,如果此元素比要找的元素小,就在较大的一个半区进行查找。在每个更小的数据集中重复这个查找过程,直到找到要查找的元素或...原创 2019-09-16 21:16:23 · 132 阅读 · 0 评论 -
简单算法
1递归法转换整数为字符 void convert(int n) { int t; if((t=n/10)!=0) convert(t); putch(n%10+'0'); }2判断素数...原创 2019-09-15 22:23:16 · 106 阅读 · 0 评论 -
排序算法(六)之归并排序
基本思想 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。1、递归方式:分而治之 可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(...原创 2019-05-16 23:19:37 · 303 阅读 · 0 评论 -
排序算法(五)之堆排序
预备知识堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:同时,我们对堆中的结点按层进行编号,...原创 2019-05-16 22:48:10 · 122 阅读 · 0 评论 -
排序(四)之希尔排序
希尔排序希尔排序算法代码如下。/* 对顺序表L作希尔排序 */void ShellSort(SqList *L){ int i, j; int increment = L->length; do { /* 增量序列 */ increment = increment / 3 + 1; ...原创 2019-05-15 23:57:01 · 270 阅读 · 0 评论 -
排序算法(三)简单选择排序和直接插入排序
简单选择排序选择排序的基本思想是每一趟在n-i+1(i=1,2,...,n-1)个记录中选取关键字最小的记录作为有序序列的第i个记录。1、简单选择排序算法简单选择排序法(Simple Selection Sort)就是通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1≤i≤n)个记录交换之。/* 对顺序表L作简单选择排序 */void Selec...原创 2019-05-15 23:49:35 · 4339 阅读 · 0 评论 -
排序(二)冒泡排序
冒泡的实现在细节上可以有很多种变化,我们将分别就3种不同的冒泡实现代码,来讲解冒泡排序的思想。冒泡排序的基本思想是,对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序 2.1 最简单排序实现冒泡排序(Bubble Sort)一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序...原创 2019-05-15 23:42:34 · 599 阅读 · 0 评论 -
排序(一)排序概念和分类
1 排序概念和分类1.1 内排序与外排序根据在排序过程中待排序的记录是否全部被放置在内存中,排序分为:内排序和外排序。内排序是在排序整个过程中,待排序的所有记录全部被放置在内存中。外排序是由于排序的记录个数太多,不能同时放置在内存,整个排序过程需要在内外存之间多次交换数据才能进行。对于内排序来说,排序算法的性能主要是受3个方面影响:1.时间性能排序是数据处理中经常执行的一种...原创 2019-05-15 23:31:36 · 695 阅读 · 0 评论 -
二叉树及遍历方法
1.二叉树特点1.1 二叉树的特点有:每个结点最多有两棵子树,所以二叉树中不存在度大于2的结点。 左子树和右子树是有顺序的,次序不能任意颠倒。 即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。二叉树具有五种基本形态: 1.空二叉树。 2.只有一个根结点。 3.根结点只有左子树。 4.根结点只有右子树。 5.根结点既有左子树又有右子树。2.特殊二叉树2....原创 2019-04-27 20:17:18 · 415 阅读 · 0 评论 -
堆和栈的区别
堆和栈的区别预备知识:程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分栈区(stack) 由编译器自动分配释放,存放函数的参数值,局部变量的值等。堆区(heap)一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。全局区(静态区)(static)全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化...原创 2019-04-26 23:27:03 · 84 阅读 · 0 评论 -
数据结构之链表-链表实现及常用操作
0.摘要定义 插入节点(单向链表) 删除节点(单向链表) 反向遍历链表 找出中间节点 找出倒数第k个节点 翻转链表 判断两个链表是否相交,并返回相交点 判断链表是否有环路,获取连接点,计算环的长度 二叉树和双向链表转化1.定义1.1单向链表单向链表的节点包括:数据域:用于存储数据元素的值。 指针域(链域):用于存储下一个结点地址或者说指向其直接后继结点的指...原创 2019-04-26 22:45:13 · 257 阅读 · 0 评论