![](https://img-blog.csdnimg.cn/20201005132017709.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构和算法
数据结构和算法
weifc-wei
遇到问题,解决问题。咯卡咯伽!!!
展开
-
数据结构_别问,问就是“哈希表”!!!
哈希表的原理精讲哈希表 - 散列表, 它是基于快速存储的角度设计的, 也是一种典型 “空间换时间” 的做法键(key): 组员的编号 如, 1, 5, 19 …值(value): 组员的其他信息(包括 性别, 年龄和战斗力等)索引: 数组的下表(0,1,2,3,4), 用以快速定位和检索数据哈希桶: 保存索引的数组(链表或数组), 数组成员为每一个索引值相同的多个元素哈希函数: 将组员编号映射到索引上, 采用求余法, 如: 组员编号 19哈希链表的算法实现...翻译 2020-05-21 09:56:15 · 145 阅读 · 0 评论 -
C/C++_排序算法_堆排序
堆排序堆排序(Heapsort)是利用堆这种数据结构所设计的一种排序算法, 它是选择排序的一种. 可以利用数组的特点快速定位索引的元素.(选择排序工作原理 - 第一次从待排序的数据元素中选出最小(或最大)的一个元素, 存放在序列的起始位置, 然后再从剩余的未排序元素中寻求到最小(大)元素, 然后放到已排序的尾部. 以此类推, 直到全部待排序的数据元素的个数为零)其排序核心实现如下:第一步:第二步:先变为最大堆先, 再执行第一步.重复上面的两个步骤参考:#include <stdi翻译 2020-05-18 21:12:57 · 277 阅读 · 0 评论 -
C/C++_查找算法_查找的定义
查找的定义查找 又称检索或查询,是指在查找表中找出满足一定条件的结点或记录对应的操作。查找表 在计算机中,是指被查找的数据对象是由一类型的记录构成的集合, 如顺序表、链表、二叉树和哈希表等查找效率 查找算法中基本运算是通过记录的关键字与给定值进行比较,所以查找的效率通常取决于比较所花的时间,而时间取决于比较的次数。通常以关键字与给定值进行比较的记录个数的平均值来计算。查找操作及分类操作1、查找某个“特定的”数据元素是否存在在查找表中2、某个“特定的”数据元素的各种属性3、在查找表中插入一个数翻译 2020-05-18 11:11:08 · 279 阅读 · 0 评论 -
C/C++_查找算法_并行搜索
并行搜索并行的基本概念所谓并发是在同一实体上的多个事件同时发生。并发编程是指在同一计算机上“同时”处理多个任务。要理解并发编程,我们必须要理解如下一些基本概念计算机就像一座工厂,时刻在运行,为人类服务。它的核心是CPU,它承担了所有的计算机任务,就像工厂的一个现场指挥官。进程就像工厂里的车间,承担“工厂”里的各项具体的“生产任务”,通常每个进程对应一个在运行中的执行程序,比如,QQ和微信运行时,他们分别是不同的进程。因为特殊的原因,现场指挥官人才短缺,整个工厂只有一个指挥官,一次只能指导一个车间翻译 2020-05-18 11:08:45 · 571 阅读 · 0 评论 -
C/C++_查找算法_穷举搜索
穷举搜索有20枚硬币, 可能包括4种类型: 1 元, 5元, 1角和5分.已知20枚硬币的总价值为10元, 求各种硬币的数量.例如: 4、11、5、0就是一种方案。而8、2、10、0是另一个可能的方案,显然方案并不是唯一的,请编写程序求出类似这样的不同方案一共有多少种?(1)编程思路。直接对四种类型的硬币的个数进行穷举。其中,1元最多10枚、5角最多20枚、1角最多20枚、5分最多20枚。??? 如果以元为单位,则5角、1角、5分会化分成浮点型数据,容易计算出错。可以将1元、5角、1角、5分变成翻译 2020-05-18 08:43:52 · 484 阅读 · 0 评论 -
C/C++_查找算法_二分查找
二分查找二分查找法实质上是不断地将有序数据集进行对半分割,并检查每个分区的中间元素。再重复根据中间数确定目标范围并递归实行对半分割,直到中间数等于待查找的值或是目标数不在搜索范围之内!...翻译 2020-05-17 21:18:22 · 130 阅读 · 0 评论 -
C/C++_七大排序算法_快速排序
快速排序接上面的故事未完待续, 除了归并长老外, 还有另外一位快速长老的快速大法也是被小小桂子赞不绝口, 大呼奇妙! 这位快速长老的算法思想时这样的:1、每次选取第一个数为基准;2、然后使用 “乾坤大挪移” 将大于和小于基准的元素分别放置于基准数两边;3、继续分别对基准数两侧末端未排序的数据使用分治法进行细分处理, 直至整个序列有序.对于下面待排序的数组;第一步: 先选择第一个数 163 为基准数, 以 163 为基准将小于它的数排在它前面, 大于等于他的数排在其后, 结果如下:此处, 快翻译 2020-05-17 11:36:27 · 198 阅读 · 0 评论 -
C/C++_七大排序算法_归并排序
归并排序研究了这么多算法以后,小桂子颇有收获,基本自认为排序算法已经全部掌握,于是就想卖 弄一下自己的“算法内功”,另一方面为了交流推广,把这些算法传播出去,就召开一个全国算 法大赛,集思广益,征集更牛逼的算法!在算法大赛上,有两位白发葱葱的老者提出的算法让小桂子自惭形秽,感叹良多。。。其中一位叫归并长老的老者,提出了如下的排序方法:当两个组数据已经有序,我们可以通过如下方式(以下简称归并大法)让两组数据快速有序我们可以依次从两组中取最前面的那个最小元素依次有序放到新的数组中,然后再把新数组 中翻译 2020-05-15 15:39:16 · 217 阅读 · 0 评论 -
C/C++_七大排序算法_插入排序
插入排序自从上次小桂子发现了冒泡排序后,他开始相信自己的聪明才智比伴读小书童居然要高,所以 他更加热衷于排序算法研究了,没事的时候, 时不时找几个宫女演练一下,这时他又发现了一个新 的排序方式,对于一下宫女们的队列:插入排序: 它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描, 找到相应位置并插入。插入排序在实现上,通常采用 in-place 排序(即只需用到 O(1)的额外空间 的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供 插入空间翻译 2020-05-12 10:36:15 · 131 阅读 · 0 评论 -
C/C++_七大核心算法_冒泡排序
冒泡排序每当皇帝选妃时,首席太监小桂子总是忍不住在旁边偷窥这些候选的美女,有一次他发现做 为伴读小书童的你居然犯了个常人都可以轻易看出的错误,有几位候选的美女站成如下一排:当我们采用前面的选择排序时,我们仍然要将候选者遍历 5 遍,才能完成最终的排序,但其 实,本身这些美女出了第一个外,已经很有序了,我们只需要把第一个和第二个交换,然后又和 第三个交换,如此循环,直到和最后一个交换后,整个数组基本就有序了!当然,并不是每次都这么幸运,像下面的情况就会更复杂一些,一趟并不能完全解决问题, 我们需要多翻译 2020-05-12 10:25:48 · 384 阅读 · 0 评论 -
C/C++_七大排序算法_选择排序
选择排序从前有个王国,国王骄奢无度,贪图女色,后宫佳丽三千,但还是动用大量财力物力在全国 范围内招妃纳妾,浸淫于女色之中。又是一年的选妃开始,今年国王对身高比较敏感,要求这些候选者按照从低到高的顺序排列, 供其选择。。。宫廷首席太监小桂子于是命令所有小公公把宫女的身高都量出来并上报到他处,然后命令身 为太监伴读小书童的你帮他按身高大小排好序,数据如下:常规思维:第一步 先找出所有候选美女中身高最高的,与最后一个数交换第二步 再找出除最后一位美女外其它美女中的最高者,与倒数第二个美女交换位置翻译 2020-05-12 10:20:49 · 200 阅读 · 0 评论 -
C/C++_五大常规算法_贪心算法
贪心算法贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有 利)的选择,从而希望能够导致结果是最好或者最优的算法。请看下面案例假设有如下课程,希望尽可能多的将课程安排在一间教室里:这个问题看似要思考很多,实际上算法很简单:选择结束最早的课,便是要在这教室上课的第一节课接下来,选择第一堂课结束后才开始的课,并且结束最早的课,这将是第二节在教室上的 课。重复这样做就能找出答案,这边的选择策略便是结束最早且和上一节课不冲突的课进行排序, 因为每次都选择翻译 2020-05-11 14:01:04 · 754 阅读 · 1 评论 -
C/C++_五大常规算法_动态规划算法
动态规划算法人工智能时代,各国都在大力研究机器人技术,也制造出各种各样的机器人,比如:为了解决男女失衡而制造 的美女机器人,假如你参与了某美女机器人的研发,你在这个项目中要求实现一个统计算法:如果美女机器人 一次可以上 1 级台阶,也可以一次上 2 级台阶。求美女机器人走一个 n 级台阶总共有多少种走法。咋一看,无从下手,不急,我们不是讲了分治法嘛?这不是可以乘机表演一下? 启发性思考:分治法核心思想: 从上往下分析问题,大问题可以分解为子问题,子问题中还有更小的子问题 比如总共有 5 级台阶,求有翻译 2020-05-11 10:00:09 · 1119 阅读 · 0 评论 -
C/C++_五大常规算法_分治算法
分治法一个装有 16 枚硬币的袋子,16 枚硬币中有一个是伪造的,伪造的硬币和普通硬币从表面上看不出有任何差别,但是那 个伪造的硬币比真的硬币要轻。现有给你一台天平,请你在尽可能最短的时间内找出那枚伪造的硬币。常规思维:每次从待比较的硬币中取两枚进行计较,如果天平平衡(相等)就继续取剩下的硬币进行比较继续以上过程,直到找到硬币。强者思维:我们先将 16 枚硬币分为左右两个部分,各为 8 个硬币,分别称重,必然会有一半轻一半重,而我们要的就是轻的那组,重 的舍去。接下来我们继续对轻的进行五五分原创 2020-05-10 15:38:16 · 2528 阅读 · 1 评论 -
C/C++_数据结构和算法_堆顶元素出列
**堆顶元素出列**如果我们将堆顶的元素删除, 那么顶部有一个空节点, 怎么处理???解决方案:当插入节点的时候, 我们将新的节点插入到文件尾部. 那么我们来做相反的事情: 我们取出数组的最后一个元素, 将它放到堆顶部, 然后再修复堆属性.参考:#include <stdlib.h>#include <stdio.h>#include <strin...原创 2020-04-26 10:52:40 · 271 阅读 · 0 评论 -
C/C++_数据结构和算法_优先级队列
**优先级队列**英雄联盟游戏里面防御塔都有一个自动攻击功能,小兵排着队进入防御塔的攻击范围,防御塔先 攻击靠得最近的小兵,这时候大炮车的优先级更高(因为系统判定大炮车对于防御塔的威胁更大), 所以防御塔会优先攻击大炮车。而当大炮车阵亡,剩下的全部都是普通小兵,这时候离得近的优 先级越高,防御塔优先攻击距离更近的小兵。优先队列: 它的入队顺序没有变化,但是出队的顺序是根据优先级的高低来决...原创 2020-04-25 16:39:04 · 217 阅读 · 0 评论 -
C/C++_循环队列(详解)
循环队列#include <stdio.h>#include <assert.h>#include <Windows.h>#include <iostream>#include <iomanip>using namespace std;#define MAXSIZE 5 //循环队列的最大容量typedef int ...原创 2020-04-24 00:10:03 · 19592 阅读 · 4 评论 -
复习_回顾所学_单链表(详解)_内含本人的小bug想知道是什么吗?
分享一下我的bug:下面会有具体代码, 先留个悬念:没有bug//前插法bool ListInsert_front(LinkList*& L, LinkNode* node){ if (!L || !node) return false; node->next = L->next; L->next = node; return true;}...原创 2020-04-21 09:03:11 · 141 阅读 · 0 评论 -
复习_回顾所学的_顺序表
顺序表的原理顺序表是简单的一种线性结构,逻辑上相邻的数据在计算机内的存储位置也是相邻的,可以 快速定位第几个元素,中间不允许有空值,插入、删除时需要移动大量元素。顺序表的三个要素:1)用 elems 记录存储位置的基地址2)分配一段连续的存储空间 size3) 用 length 记录实际的元素个数,即顺序表的长度结构体定义#define MAX_SIZE 100 struct...原创 2020-04-20 13:38:36 · 122 阅读 · 0 评论 -
状态机实现文件单词统计
状态机实现文件单词统计原理:数据结构:参考:#include <stdio.h>#define OUT 0#define IN 1#define INIT OUTint splite(char c) { if ((' ' == c) || ('\n' == c) || ('\t' == c) || ('\"' == c) || ('\'' == c)...原创 2020-04-17 10:03:15 · 174 阅读 · 0 评论