数据结构与算法
基本数据结构与算法的学习
CodingStart
Sometimes there is no next time, no time-outs, no second chances; sometimes it's now or never.
展开
-
数据结构与算法---二分查找
(该文章属于达梦数据库的基本操作,建议有一定的SQL基础来阅读会更有效果)经过三天的学习,差不多熟悉了达梦数据库的基本操作 ,下面我将逐一介绍:目录达梦数据库---DM8体系结构达梦数据库---安装及初始化数据库实例达梦数据库---工具介绍达梦数据库---图形化界面操作数据库达梦数据库---SQL命令操作数据库达梦数据库---ODBC安装配置达梦数据库---DM8体系结构达梦数据库---安装及初始化数据库实例达梦数据...原创 2020-11-17 20:52:04 · 185 阅读 · 2 评论 -
数据结构与算法---玩转双指针
玩转双指针算法解释使用两个指针协同完成任务的方式,通常用于遍历数组,也可以延伸到多个数组的多个指针。两个指针指向同一个数组,遍历方向相同且不相交,则这两个指针包含的区域称为**滑动窗口**,通常用于遍历区间搜索。两个指针指向同一数组,遍历方向相反,则可以进行搜索,通常用来搜索已序数组。理解双指针更多的是解决问题的一种办法,个人觉得不能算严格意义上的算法。只是在某些情况下,更适用。LeetCode案例=========== 167. Two Sum II - Input array is原创 2020-11-09 23:39:12 · 173 阅读 · 0 评论 -
数据结构与算法---贪心算法
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。示例 1:输入: g = [1,2,3], s = [1,1]输出: 1解释:你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1,2原创 2020-11-03 23:04:07 · 887 阅读 · 0 评论 -
删除一个无头单链表的非尾节点
删除一个无头单链表的非尾节点原创 2016-05-29 22:26:52 · 1109 阅读 · 0 评论 -
静态顺序表的实现创建、查找、删除
顺序表概述:用顺序存储方法存储的线性表实现的功能:1、建立顺序表并初始化 2、在顺序表尾部插入元素 3、删除尾部元素 4、从前往后输出 5、在顺序表头插入元素原创 2016-05-21 00:12:50 · 773 阅读 · 0 评论 -
逆置 / 反转单链表
单链表的反转/逆置原创 2016-06-07 11:23:58 · 680 阅读 · 0 评论 -
判断单链表是否带环?若带环,求环的入口点?
判断单链表是否带环?若带环,求环的入口点?原创 2016-06-04 23:39:20 · 690 阅读 · 0 评论 -
排序单链表、 并两个有序链表, 合并后依然有序
链表排序,链表的合并原创 2016-06-02 22:26:21 · 1652 阅读 · 0 评论 -
单链表实现约瑟夫环(JosephCircle)
单链表实现约瑟夫环(JosephCircle)原创 2016-06-01 12:52:37 · 2926 阅读 · 1 评论 -
查找单链表的中间节点,要求只能遍历一次链表
查找单链表的中间节点,要求只能遍历一次链表原创 2016-06-01 10:40:59 · 813 阅读 · 0 评论 -
在无头单链表的一个非头节点前插入一个节点
思路: 由于单链表的单向性,所以我们现在这个非头结点的后面插入一个节点,然后在交换这两个节点就可以了。头文件:链表定义#include<stdio.h>#include<assert.h>#include<stdlib.h>typedef int DataType;typedef struct strNode{ struct strNode* pNext;原创 2016-06-01 00:52:31 · 1828 阅读 · 0 评论 -
从尾到头打印单链表
递归实现 从尾到头打印单链表原创 2016-05-28 23:19:55 · 611 阅读 · 0 评论 -
实现一个栈的pop,push,Min(最小值),时间复杂度为O(1)
首先,我们实现这个栈功能: 出栈,入栈,找出栈栈中元素的最小值。原创 2016-07-23 22:51:59 · 633 阅读 · 0 评论 -
使用两个栈实现一个队列
使用两个栈 实现一个队列:先把数据存到一个栈s1 , 再从栈s1 出到s2中,返回s2 就实现了原创 2016-07-23 23:03:52 · 325 阅读 · 0 评论 -
两个队列实现一个栈
两个队列实现一个栈原创 2016-07-25 13:05:51 · 495 阅读 · 0 评论 -
一个数组实现两个栈
一个数组实现两个栈原创 2016-07-26 16:26:06 · 550 阅读 · 0 评论 -
数据结构--大小堆
最大堆,最小堆创建过程 以及 一些基本操作原创 2016-08-05 10:39:27 · 3701 阅读 · 0 评论 -
元素入栈、出栈的合法性检测
我们知道 栈的特性:后进先出 ,在给定数据入栈顺序的情况下,我们能改变的就是 改变出栈顺序 从而达到不同的效果。但是如果给出了出栈的顺序,我们能通过一个程序检测它是不是 可以由入栈的顺序 得到。方法:将入栈和出栈的顺序通过两个利用一个栈S,每次比较S.top() 和V2的元素 相等则 (S出栈,v2后移);不相等则 (S入栈,V2后移)原创 2016-07-25 14:01:22 · 692 阅读 · 0 评论 -
数据结构---二叉树的前序、中序、后序遍历的递归和非递归 实现(C++)
本文实现了对二叉树的递归遍历和非递归遍历,当然还包括了一些栈操作。二叉树的遍历本质上就是出栈和入栈的过程 。遍历的递归方式简单又容易理解,但是效率始终是个问题。非递归算法可以清楚地知道遍历的每一个细节,但是就不容易理解。遍历即将树的所有结点访问且仅访问一次。按照根节点位置的不同分为前序遍历,中序遍历,后序遍历。前序遍历:根节点->左子树->右子树中序原创 2016-07-30 17:45:03 · 1772 阅读 · 0 评论 -
二叉树转换成双向链表
将一个二叉树转换为一个双向链表。要求不能创建新的节点,只能调整节点的指针。原创 2016-10-04 11:23:47 · 3140 阅读 · 0 评论 -
查找二叉树中和为某一个值的路径
题目:输入一颗二叉树和一个整数,打印出二叉树节点中节点值的和为输入整数的所有路径 。从树的根节点往下所经过的节点的形成的路径。思路:先序遍历的方式访问某一个节点时,把该节点添加到路径上,并且累加节点中的值。如果当前节点时叶节点并且累加的值等于输入的值,那么我们就把这条路径打印出来。如果不是叶节点,那么就访问当前节点的左右子树。当前节点的左右子树都访问完了,那么久返回到父节点,(在返原创 2016-10-03 21:56:25 · 970 阅读 · 0 评论 -
从上到下打印二叉树——层序遍历二叉树
在几次笔试的过程中,都提到了二叉树层序遍历 ,那么我就好好整理下 题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如输入: 8 / \ 6 10 /\ /\ 5 7 9 11输出8 6 10 5 7 9 11。二叉树节点定义:原创 2016-10-03 20:23:44 · 948 阅读 · 0 评论 -
排序——归并排序
概述 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。基本思想将待排序序列R[0...n-1]看成是n个长度为1的有序序列,将相邻的有序表成对归并,得到n/2原创 2016-09-07 17:19:30 · 315 阅读 · 0 评论 -
排序——堆排序(HeapSort)
堆的定义 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]=Key[2i+1]&&key>=key[2i+2] 即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&key>=key[2i+2]称为大顶堆; 满足 Key[i]由上述性质可知大顶堆的堆顶的关键字肯定是所有关键字原创 2016-09-07 15:14:26 · 455 阅读 · 1 评论 -
快排 ——前后指针法
int partion(int arr[], int left, int right){ if (left < right) { int key = arr[right]; int prev = left - 1; int cur = left; while (cur < right) { while (arr[cur] < key && ++prev != cur原创 2016-09-07 15:09:34 · 1510 阅读 · 0 评论 -
各种排序算法比较及时间复杂度,空间复杂度
搜集基本常用算法的时间/空间复杂度转载 2016-08-31 13:12:37 · 1356 阅读 · 0 评论 -
排序——快速排序
终于有时间可以把快速排序,仔细的梳理一遍了。快排 在实际中最常用的一种排序算法,速度快,效率高。就像名字一样,快速排序是最优秀的一种排序算法。什么是快速排序?快排的基本思想:快排采用的是分治(PS:分开治理)的思想。过程是这样的:1、在一组数中找到一个基准值(key) 2、把这一组数分为小于key的一小组数,和大于key的另一原创 2016-08-31 11:20:24 · 1925 阅读 · 0 评论 -
排序——选择排序
选择排序属于交换排序,选择排序:每趟从待排序的记录中选出关键字最小(或最大)的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。选择排序流程(1) 从待排序序列中,找到关键字最小的元素;(2) 如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;(3) 从余下的 N - 1个元素中,找出关键字最小的元素,重复(1)、(2)步,直原创 2016-08-20 16:35:44 · 468 阅读 · 0 评论 -
排序——冒泡排序
冒泡排序是一种交换排序 ,什么是交换排序呢?交换排序:比较相邻两个元素的关键字 ,对不满足目标次序要求的那对数,两两交换,知道满足目标次序的要求。基本思想通过遍历数组元素 , 比较相邻两个元素关键字大小 ,调整这两个元素的位置使满足排序的要求 。遍历数组就是 重复地进行直到没有再需要交换,也就是说该数列已经排序完成。下面进行冒泡排序 过程: 以 4 3 1原创 2016-08-20 16:06:24 · 397 阅读 · 0 评论 -
排序——希尔排序
希尔排序的实质就是分组插入排序,该方法又称缩小增量排序 ,因DL.Shell于1959年提出而得名。 基本思想:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排原创 2016-08-19 20:28:52 · 424 阅读 · 0 评论 -
排序——折半插入排序
折半插入排序是对直接插入排序的改进 ,本篇博客对 折半插入排序的两种实现,尤其对于边界区间考虑的很周到,希望能帮到一起学习的童鞋原创 2016-08-19 20:12:33 · 619 阅读 · 0 评论 -
排序一 直接插入排序
直接插入排序基本思想,实现代码 已经时间复杂度 、 空间复杂度 、 适应条件 和对于该方法改进的想法原创 2016-08-10 23:08:08 · 424 阅读 · 0 评论 -
二叉树的常见面试题(1)
二叉树的常见面试题:二叉树的前序、中序后序遍历 , 二叉树的线索化和线索二叉树的遍历(其中后序最难) , 求二叉树的高度 , 二叉树的叶子节点的个数 , 查询某个元素是否在二叉树中 , 判断某个节点是否在二叉树中 , 找两个节点的最近的祖先节点,二叉树的镜像 , 判断二叉树是不是完全二叉树 等等。原创 2016-08-02 14:29:52 · 728 阅读 · 0 评论 -
后序线索化二叉树及遍历(图解)
线索二叉树的后序遍历详细介绍,图解,特别适合初学者,以及懒得画图的童鞋了原创 2016-08-01 19:31:20 · 73416 阅读 · 11 评论 -
二叉树以及 二叉树的C++实现
二叉树的基本知识 , 和C++实现原创 2016-07-29 17:44:38 · 2515 阅读 · 0 评论 -
二叉树线索化以及线索化的先序、中序、后序遍历
二叉树线索化以及线索化的先序、中序、后序遍历 有详细的图解 和 程序代码 解读,以及 为什么要线索化二叉树原创 2016-08-01 18:04:46 · 54086 阅读 · 9 评论