数据结构和算法
数据结构和算法
ch3rry
每天早上醒来,看见你和阳光都在,这就是我想要的未来。
展开
-
贪心算法
一、基本概念:所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。...原创 2020-04-23 14:54:33 · 446 阅读 · 0 评论 -
数据结构–七大查找算法总结
查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找。本文简单概括性的介绍了常见的七种查找算法,说是七种,其实二分查找、插值查找以及斐波那契查找都可以归为一类——插值查找。插值查找和斐波那契查找是在二分查找的基础上的优化查找算法。树表查找和哈希查找会在后续的博文中进行详细介绍。 查找定义:根据给定的某个值,在查找表中确定一个其关键字等于...转载 2020-04-10 14:11:49 · 1750 阅读 · 0 评论 -
数据结构之二叉树(C语言实现)
定义之前四篇博客分别介绍了线性结构中的顺序表、链表、栈、队列。从难度来讲,顺序表到链表是递增的。从实现来讲,栈和队列基于顺序表和链表(之前栈采用了顺序表的存储结构,队列采用了链表的存储结构)。此次介绍的二叉树虽是非线性结构的树形结构分支,但在其各个结点遍历的实现上,使用到了栈和队列的特性。二叉树是一种特殊的线性结构,每个结点最多只有两个分支,称左孩子结点和右孩子结点。更多关于二叉树的特性,...原创 2020-03-29 22:12:19 · 4526 阅读 · 0 评论 -
数据结构之栈(C语言实现)
定义在线性表中,根据存储结构可分为:顺序表和链表。顺序表和链表可以访问任意位置结点,在任意位置插入和删除结点。倘若对上述操作加以限制,如:1. 在线性表的一端插入、删除、访问结点。2. 在线性表的一端插入结点、另一端删除、访问结点。*注:对线性表操作的限制有很多,上述只介绍两种主流的限制,在数据结构中叫做栈和队列。栈的概念比较抽象,举个栗子(对,就是板栗的栗子)。一群人依次走进...原创 2020-03-29 20:56:51 · 1127 阅读 · 0 评论 -
数据结构之队列(C语言实现)
定义在栈中提到,队列是操作受限制的特殊的线性表。在队列的一端只能插入元素,这一端叫做队尾。在队列的另一端只能删除元素,这一端叫做队首。举个栗子,在食堂排队打饭,跑的快的同学排在队列的前面,最先打到饭菜。后续到的同学只能依次排列在队尾。买到饭菜的同学离开队列叫做出队,进入队列等候叫做入队。食堂阿姨给队列中第一个同学打饭叫做访问队首元素。总结:队列有先进先出的特性,FIFO(First...原创 2020-03-29 20:53:36 · 364 阅读 · 0 评论 -
数据结构之链表(C语言实现)
定义相对于顺序表而言,“勤拿少取”这是对链表最形象的描述。意指,它需要一个结点,就在内存中分配一块内存单元。比顺序表不足的是,链表的每个结点中,需要一个存储单元保存指向下一个结点的地址。链表的访问需要从第一个结点(或称头结点)开始寻找,(顺序表可以根据下标直接访问)。链表的插入和删除只需对指定位置的结点操作即可。常见的链表,根据指向下个链表的指针可分为单向链表,双向链表。根据第一个结...原创 2020-03-29 20:47:13 · 230 阅读 · 0 评论 -
数据结构之顺序表(C语言实现)
定义数据结构是相互之间存在一种或多种特定关系的数据元素的集合。根据数据元素之间关系的不同特性,通常有如下4类基本结构:集合:结构中的数据元素之间除了“同属于一个集合”的关系外,别无其他的关系。如:广义表。 线性结构:结构中的数据元素之间存在一个对一个的关系。如:链表。 树形结构:结构中的数据元素之间存在一个对多个的关系。如:二叉树。 图(网)状结构:结构中的数据元素之间存在多个对多个的...原创 2020-03-29 10:44:36 · 549 阅读 · 0 评论 -
7种常用排序算法
1、冒泡排序最简单的一种排序算法。假设长度为n的数组arr,要按照从小到大排序。则冒泡排序的具体过程可以描述为:首先从数组的第一个元素开始到数组最后一个元素为止,对数组中相邻的两个元素进行比较,如果位于数组左端的元素大于数组右端的元素,则交换这两个元素在数组中的位置,此时数组最右端的元素即为该数组中所有元素的最大值。接着对该数组剩下的n-1个元素进行冒泡排序,直到整个数组有序排列。算法的时间复...原创 2019-11-25 16:31:23 · 148 阅读 · 0 评论 -
十大经典排序算法(动图演示)
0、算法概述0.1 算法分类十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。0.2 算法复杂度0.3 相关概念稳定:如果a原本在b前...转载 2019-10-31 20:15:06 · 154 阅读 · 0 评论 -
程序员面试、算法研究、编程艺术、红黑树、机器学习5大系列集锦
参考:程序员面试、算法研究、编程艺术、红黑树、机器学习5大系列集锦原创 2019-04-02 19:45:40 · 119 阅读 · 0 评论 -
红黑树插入删除节点过程分析以及C代码实现
红黑树C源码实现与剖析作者:July、那谁时间:二零一一年一月三日-------------------------前言:红黑树作为一种经典而高级的数据结构,相信,已经被不少人实现过,但不是因为程序不够完善而无法运行,就是因为程序完全没有注释,初学者根本就看不懂。此份红黑树的c源码最初从linux-lib-rbtree.c而来,后经一网友那谁(http://...原创 2019-04-02 19:31:43 · 399 阅读 · 0 评论 -
数据结构知识准备
数据结构概述定义我们如何把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存到主存储器(内存)中,以及在此基础上为实现某个特定功能(比如查找某个元素,删除某个元素,对所有元素进行排序)而执行的相应操作,这个相应的操作也叫作算法。数据结构 = 个体 + 个体的关系算法 = 对存储数据的操作算法解题的方法和步骤衡量算法...原创 2019-03-18 22:40:51 · 127 阅读 · 0 评论 -
数据结构之队列
队列 定义: 一种可以实现先进先出的存储结构 分类: 静态队列 链式队列循环队列程序示例队列算法: 入队 出队#include<stdio.h> #include<malloc.h> typedef struct Queue { int *pBase; int fron...原创 2019-03-21 10:19:26 · 129 阅读 · 0 评论 -
全面的算法和数据结构知识学习线路
在线练习LeetCode Virtual Judge CareerCup HackerRank CodeFights Kattis HackerEarth Codility Code Forces Code Chef Sphere Online Judge – SPOJ在线编程面试Gainlo Refdash数据结构链表链表是一种由节点(Node)组成的线...转载 2019-03-21 10:04:44 · 231 阅读 · 0 评论 -
链表插入和删除算法
#include<stdio.h> #include<malloc.h> #include<stdlib.h> typedef struct Node { int data;// 数据域 struct Node * pNext;// 指针域}NODE,*PNODE;//NODE 等价于 struct Node ,PNODE等价于 struct...原创 2019-03-20 16:02:38 · 303 阅读 · 0 评论 -
判断链表是否为空和求链表长度算法
#include<stdio.h> #include<malloc.h> #include<stdlib.h> typedef struct Node { int data;// 数据域 struct Node * pNext;// 指针域}NODE,*PNODE;//NODE 等价于 struct Node ,PNODE等价于 struct...原创 2019-03-20 15:31:48 · 2070 阅读 · 0 评论 -
数据结构之链表
定义:n 个节点离散分配;彼此通过指针相连;每个节点只有一个后续节点,首节点没有前驱节点,尾节点没有后续节点。如下图:专业术语:首节点:第一个有效节点尾节点:最后一个有效节点头节点:头节点的数据类型和首节点的数据类型相同。 第一个有效节点之前的那个节点;头节点并不存放存放有效数据;加头节点的目主要是为了方便对链表的操作。头指针:指向头节点的指针变量尾指针:指向尾节点的指针变量...原创 2019-03-20 14:24:40 · 122 阅读 · 0 评论 -
关于typedef的用法
见示例:CASE 1 #include<stdio.h> typedef int ZHAGNSAN;//为 int 再重新多取一个名字, ZHAGNSAN等价于 int typedef struct Student { int sid; char name[100]; char sex; }ST; int main(void) { int i...原创 2019-03-20 14:16:45 · 150 阅读 · 0 评论 -
跨函数使用内存讲解及其示例
CASE 1 #include<stdio.h> int f(); int main(void) { int i=10; i=f(); printf( “ i=%d n” ,i); for(i=0;i<2000;++i) f(); return 0; } int f() { int j=20; return j; } CAS...原创 2019-03-19 20:00:09 · 180 阅读 · 0 评论 -
排序之冒泡排序,插入排序,选择排序
最近读《算法》,这本书把插入排序,选择排序两种排序方法的优缺点,适用场合,效率分析的非常透彻,文章标题的冒泡算法是我自己加进去的,下面我们会以java代码来比较三种算法。1.选择排序选择排序的基本思想是从数组中找出最大/最小的那个元素,把它和数组第一的元素交换,然后在下一轮中找出剩余数组中最大/最小的元素,把它和数组第二个元素交换,依次类推。[java] view plain copypackag...转载 2018-05-21 10:07:42 · 232 阅读 · 0 评论 -
数据结构之顺序表
顺序表定义 :顺序表 是线性表的顺序储存结构 ,顺序表就是将线性表中的数据元素按照线性顺序存储到指定位置开始的、一块连续的存储空间中。顺序表的操作实现:[html]view plaincopy#include<stdio.h>#include<stdlib.h>#defineMAX100//data数组所能存储的最大数据typedefstruc...原创 2018-05-21 10:25:47 · 241 阅读 · 0 评论 -
数据结构之链表
为什么要学习链表?链表主要有以下几大特性:1、解决数组无法存储多种数据类型的问题。2、解决数组中,元素个数无法改变的限制(C99的变长数组,C++也有变长数组可以实现)。3、数组移动元素的过程中,要对元素进行大范围的移动,很耗时间,效率也不高。先来感性的认识一下链表,我们先来认识下简单的链表:从这幅图我们得出以下信息:这个简单链表的构成:头指针(Header),若干个节点(节点包括了数据域和指针域...转载 2018-05-21 10:47:50 · 499 阅读 · 0 评论 -
递归算法讲解
一. 引子 大师 L. Peter Deutsch 说过:To Iterate is Human, to Recurse, Divine.中文译为:人理解迭代,神理解递归。毋庸置疑地,递归确实是一个奇妙的思维方式。对一些简单的递归问题,我们总是惊叹于递归描述问题的能力和编写代码的简洁,但要想真正领悟递归的精髓、灵活地运用递归思想来解决问题却并不是一件容易的事情。在正式介绍递归之前,我们首先引用...转载 2018-05-24 10:51:21 · 6352 阅读 · 0 评论 -
如何在 ImageNet 比赛中获得冠军?
近两个月,国内团队先后在全球权威的人脸检测评测平台 FDDB 和全球自动驾驶算法公开排行榜 KITTI 以及 Cityscapes 上取得非常好的成绩,这在一定程度上证明了国内计算机视觉相关算法已达到国际顶尖水平。今年ILSVRC 2016(全称是ImageNet Large Scale Visual Recognition Challenge)分为五大部分,包括:目标检测、目标定位、...转载 2017-11-15 09:29:58 · 1829 阅读 · 0 评论 -
值得看的十大机器学习公开课
在当下的机器学习热潮,人才匮乏十分显著。截至目前,国内开设人工智能(AI)专业的高校不多,相当多的开发者是跨界入门,需要自学大量知识并摸索。因而优质的学习资源至关重要。因此,雷锋网搜集了全世界范围内最受欢迎的机器学习课程,整理成这份“机器学习十大入门公开课”盘点,集中呈现给各位。这份推荐榜颇费心血,综合考虑了难易、侧重点、时效性等诸多因素,希望能帮助大家找到最适合自己的学习资源。这些课程全部免...转载 2017-12-04 17:33:35 · 371 阅读 · 0 评论 -
Caffe基础介绍
Caffe的全称应该是Convolutional Architecture for Fast Feature Embedding,它是一个清晰、高效的深度学习框架,它是开源的,核心语言是C++,它支持命令行、Python和Matlab接口,它既可以在CPU上运行也可以在GPU上运行。它的license是BSD 2-Clause。Deep Learning比较流行的一个原因,主要是因为它能够自主...转载 2017-11-13 10:13:45 · 272 阅读 · 0 评论 -
二叉树的非递归遍历及层次遍历
前面简答介绍了二叉树的基本操作,包括二叉树的建立,销毁,递归遍历,以及其他一些常见的递归算法,现在集中讨论一下二叉树的层次遍历和非递归遍历。二叉树的层次遍历要用到队列,前序、中序和后序非递归遍历要用到栈,这里我就不自己写队列和栈了,直接使用C++标准库中的容器适配器queue和stack。1、 二叉树的层次遍历二叉树的层次遍历类似图的广度优先遍历,都用到了队列。基本思路:(1)...转载 2018-05-22 10:04:11 · 1674 阅读 · 0 评论 -
二叉树的基本操作
二叉树作为一种非常重要的数据结构,今天对其做简单的回顾1、二叉树的定义[cpp]view plaincopytypedefcharElementType; typedefstructBiTreeNode { ElementTypedata; structBiTreeNode*lchild; structBiT...转载 2018-05-22 10:03:00 · 249 阅读 · 0 评论 -
链表面试题
基于上一次写的链表,现在,我们来讨论下面这些问题。1.链表的冒泡排序2.删除无头非尾节点3.反转链表4.在当前节点前插入一个数据x5.查找链表的中间节点。6.删除单链表的倒数第K个节点(K>1&&K<总长度)对于上面这6个问题,我们进行分析与解答。链表的代码我都已经写过博客:数据结构—单链表的实现另外,我也在我的github上有链表的代码,gi...转载 2018-05-22 09:56:03 · 149 阅读 · 0 评论 -
《编程之美》——从无头单链表中删除节点
问题:假设有一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(非第一个节点, 也非最后一个节点)。请将该节点从单链表中删除。分析与解法:若要删除该节点,正常情况下,应该要知道该节点的前面节点的指针,但是由于单链表中没有头结点,所以无法追溯到该节点前面的那个节点,因此,这里采用了“狸猫换太子”的方法。设该节点为B,下一个节点为C。那么,首先将B节点的内容替换为C节点的内容,然后...转载 2018-05-22 09:46:02 · 251 阅读 · 1 评论 -
单链表的创建
1、有头结点的单链表的创建#include <iostream>using namespace std;struct ListNode{ int val; ListNode *next; };//有头结点的单链表的创建 int CreateListNode(ListNode *head){ if(head == NULL) ...转载 2018-05-22 09:35:21 · 435 阅读 · 0 评论 -
链表各类操作详解
链表概述 链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。它可以根据需要开辟内存单元。链表有一个“头指针”变量,以head表示,它存放一个地址。该地址指向一个元素。链表中每一个元素称为“结点”,每个结点都应包括两个部分:一为用户需要用的实际数据,二为下一个结点的地址。因此,head指向第一个元素:第一个元素又指向第二个元素;……,直到最后一个元素,该元素...转载 2018-05-21 10:49:15 · 228 阅读 · 0 评论 -
编程之法:字符串反转
字符串反转 eg:"abcdef"---->"defabc"解法1:蛮力移位void LeftShiftOne(char* s, int n){ char t = s[0]; for (int i = 0; i < n; i++) { s[i-1] = s[i]; } s[n-1] = t;}void LeftRot...原创 2019-03-08 15:57:54 · 332 阅读 · 0 评论 -
连续存储数组的算法
模块一:线性结构[把所有的结点用一根直线穿起来] 连续存储【数组】 离散存储【链表】 线性结构的两种常见应用之一 栈 线性结构的两种常见应用之二 队列 专题:递归1. 1=2+3+4+...100 的和2. 求阶乘3. 汉诺塔4. 走迷宫模块二:非线性结构树图连续存储...原创 2019-03-19 17:47:54 · 212 阅读 · 0 评论 -
算法的时间复杂度和空间复杂度
通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学归纳法等。而在证明算法是正确的基础上,第二部就是分析算法的时间复杂度。算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好反映出算法的优劣与否。因此,作为程序员,掌握基本的算法时间复杂度分析方法是很有必要的。 ...转载 2018-05-20 15:30:04 · 235 阅读 · 0 评论