
数据结构与算法
BlackCarDriver
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
四则运算表达式求值
本文将讨论什么是运算表达式,如何用代码实现中缀表达式转后缀表达式、前缀表达式,以及对后缀表达式的求值。原创 2020-04-16 14:50:55 · 814 阅读 · 0 评论 -
二进制乘除法运算原理
二进制乘除法原理计算机所能完成的最基本操作是加减法和左右移。虽然ISA中一般都有MUL类指令,但是这些经过译码之后最终的元操作还是加法和移位指令。二进制乘法假设不能使用乘除运算求a×b的结果,当a=b=123时,最直接的方法是通过88个88相加。但是,我们不难发现这样的规律:123 × 123 = (100+20+3)×123 = (100×123) + (20 × 123) + (3 ...原创 2020-04-01 16:42:32 · 20353 阅读 · 3 评论 -
经典排序算法复习
十大经典排序算法备忘录本博客用于快速复习几种简单排序算法。这些算法虽然经典,但是都很简单,只要明白其思想和原理,都能很快写出来。关键是要把握好一些细节之处,例如循环边界等。代码#pragma warning(disable : 4996)#include<iostream>#include<vector>#include<algorithm>#...原创 2020-03-08 00:17:41 · 489 阅读 · 0 评论 -
最短路之Bellman-ford 算法
Bellman-ford 算法算法摘要作用:单源有向图上求最短路特点:能适应负权边的情况思想:动态规划时间复杂度: O(点数×变数)原理:对所有的边进行n-1轮松弛操作,(n个顶点的图中,任意两点之间的路径最多包含n-1边)注意事项:需要判断是否产生负权回路 (再对边进行一次内部循环,如果还有可以松弛的点,说明有负权回路)c++代码#include<iostream>...原创 2020-03-06 11:16:37 · 346 阅读 · 0 评论 -
C++堆排序模板
C++堆排序模板#pragma warning(disable : 4996)#include<iostream>#include<vector>#define ARRAY vector<int> //下标从0开始有效using namespace std;//调整最大堆(升序)void heapAdjust(ARRAY *ary, int r...原创 2020-03-03 20:47:12 · 414 阅读 · 0 评论 -
c++保存 vector 到文件
c++ 保存 vector 到文件实现将vector中的数据保存到二进制文件和从文件中读取数据并还原vector并不难,关键是要把握好一些小细节背后的原理,以及确定好存储的格式。确定格式跟网络通信中的通信协议非常相似,只用存取双方都依照协议行事,才能完成完整步骤。以下代码提供例子,仅供参考:#include<iostream>#include<stdio.h>#in...原创 2019-12-24 22:05:09 · 10958 阅读 · 4 评论 -
磁盘调度算法
磁盘调度算法本文内容用c++写了一个简单的控制台程序用来演示几种调度算法的磁头移动过程, 包括:先来先服务法(First-Come, First-Served,FCFS)。最短寻道时间优先法(Shortest Seek Time First, SSTF)。电梯法。知识点先来先服务算法(FCFS )First Come First Service特点:一种简单的磁盘调度算法。根...原创 2019-12-07 16:38:27 · 1056 阅读 · 5 评论 -
银行家算法
银行家算法银行家算法主要用于避免死锁。原理是进行资源分配之前先计算资源分配的安全性,分配不会导致系统进入不安全状态,则将资源分配给进程。否则让进程等待。注意该算法的核心是安全性的判断:可以理解成一个闯关游戏,若主角的攻击力、防御力、(剩余资源数量)全部都高于某个敌人对应的攻击力、防御力(对应的请求资源的数量), 则主角可以打败这个怪兽并全部获取怪兽的属性(分配和回收资源),若主角可以在这个规则下...原创 2019-11-23 15:56:34 · 974 阅读 · 0 评论 -
又中序遍历和后序遍历还原二叉树
又中序遍历和后序遍历还原二叉树根据一棵树的中序和先序遍历的结果可以还原一棵唯一的二叉树。题目要求:设计一个程序,根据二叉树的先根序列和中根序列创建一棵用左右指针表示的二叉树例如:先根序列为 ABDGCEF#, 中根序列为 DGBAECF# (#表示结束)。然后用程序构造一棵二叉树。思路:MY CODE#include<iostream>#include<std...原创 2019-05-09 09:39:19 · 1816 阅读 · 0 评论 -
数据结构实验2:哈夫曼树应用
数据结构实验2题目要求实现一个哈夫曼编码系统,系统包括以下功能:(1) 字符信息统计:读取待编码的源文件SourceFile.txt,统计出现的字符及其频率。(2) 建立哈夫曼树:根据统计结果建立哈夫曼树以及哈夫曼码表,将各字符对应的编码表保存在文件Code.txt中。(3) 对源文件进行编码:根据哈夫曼码表,将SourceFile.txt中的字符转换成相应的编码文件ResultFile...原创 2019-05-09 23:20:02 · 5932 阅读 · 2 评论 -
数据结构实验4:排序
实验目的深刻理解各种排序算法的设计思想;掌握各种排序算法的执行过程;掌握各种排序算法的设计实现实验内容一个班有n个学生,每个学生有学号(no)、姓名(name)、年龄(age)、成绩(score)。定义数据结构来描述学生信息。2.按成绩进行降序排列(自选两种排序算法)。3.输出每一趟排序的过程。4.输出已排序的学生数据;要求输出整齐。分析刚开始想用模板类的方法实现一...原创 2019-05-20 16:50:35 · 1494 阅读 · 1 评论 -
数据结构实验3:生成最小树
数据结构实验3 :图的遍历生成树实验内容及原理键盘输入n个顶点和m条边(6<=n<=16,n-1<=m<=20)及相应权重,建立图的邻居矩阵和邻接表的存储形式,并输出该邻接矩阵和邻接表。用Prim算法求其最小生成树。函数 void Prim(AMGraph G, VerTexType u) 以及输出边集数组的函数 void PrintEdge(Edgeset Sed...原创 2019-05-15 19:49:29 · 1686 阅读 · 0 评论 -
数据结构实验5:查找
实验五:查找算法实验目的1.掌握顺序查找技术和拆半查找技术;2. 掌握查找的算法实现实验内容1.产生n个随机整数用顺序查找的方法进行查找操作,要求输出要找关键字Key的过程。1.给定n个有序整数用折半查找的方法进行查找操作,找关键字Key的过程。分析签到级难度,主要是考察折半查找思想的理解和应用。折半查找又称二分查找,需要先对数组进行排序。为了不打乱原来的数组,可以将排序后的数...原创 2019-05-22 12:05:52 · 1322 阅读 · 0 评论 -
数据结构实验6:hash表的应用
实验目的掌握存放大量数据的方法(主要是姓名);掌握查找大量数据的方法(主要是姓名);掌握队列的定义及操作实验内容在每个队伍允许插队的情况下,若你在排队,有一个以上的朋友要求插队,你可以安排他们的顺序,每次一个人入队,并且如果这个入队的人发现队伍中有自己的朋友,则可以插入到这个朋友的后面,当队伍中的朋友不止一个时,这个人会排在最后一个朋友的后面。若队伍中没有朋友,则排在队伍的最后面。每...原创 2019-06-09 17:09:57 · 375 阅读 · 0 评论 -
数据结构课设:神秘国度的爱情故事
神秘国度的爱情故事题目要求:某个太空神秘国度中有很多美丽的小村,从太空中可以想见,小村间有路相连,更精确一点说,任意两村之间有且仅有一条路径。小村 A 中有位年轻人爱上了自己村里的美丽姑娘。每天早晨,姑娘都会去小村 B 里的面包房工作,傍晚 6 点回到家。年轻人终于决定要向姑娘表白,他打算在小村 C 等着姑娘路过的时候把爱慕说出来。问题是,他不能确定小村 B 是否在小村 A到小村 C 之间的路径...原创 2019-06-26 09:52:58 · 1451 阅读 · 1 评论 -
数据结构试验1:链表和线性表
链式存储结构的基本操作情景很久没有写过博客了,恰逢数据结构试验课给了一个小题目,借此契机,顺便练练打字。原创 2019-04-24 12:35:43 · 1370 阅读 · 0 评论 -
非递归遍历二叉树
前言因为树的定义本身就是递归定义,所以采用递归的方法遍历树不仅容易理解而且代码很简洁。遍历二叉树的三种方式,若采用递归方法,思路非常简洁,代码几乎不用作更改。但若要采用非递归的方法,则可以采用栈去模拟实现。三种遍历方式相同之处是都使用到栈,但思路相差很大,理解难度顺序为: 前序 < 中序 < 后序三种非递归的遍历算法及分析不用递归方法先序遍历二叉搜索树分析:先序遍历最好...原创 2019-04-13 00:03:49 · 368 阅读 · 0 评论 -
最短路之dijkstra算法
最短路问题简常见问题是在一个无向联通图中,给出各个点和边的关系,以及各个边的权值,求出某个点到达其他点的最短路径,本博客是blackcardriver根据kruskal经典算法的原理,写出的一个解决最短路问题的模板和思路及分析。供自己复习和分享知识,若有不足或错误之处,望提醒纠正。欢迎评论。需要用到的数据结构:certain_mun ---------//用于记录已算出最短路径的节点的数量...原创 2019-03-14 00:49:07 · 472 阅读 · 0 评论 -
线段树区间操作总结
昨天复习了几个月前自己写下的线段树区间操作总结的算法笔记,虽然注释很多,但重新再看时发现注释仍然不够。于是这次重新复习了线段树区间操作算法,已一个初学者的角度来加上许多注释和笔记。我将线段树的区间操作,包括区间运算,区间求值封装到了一个类里。两种操作又包含普通版和lazy标签版,下面是代码:#include<iostream>#include<stdio.h>#i...原创 2019-03-07 08:50:23 · 510 阅读 · 0 评论 -
用优先队列优化dijikstra算法
dijikstra算法之优化版在上一个博客中的dijikstra最短路算法,虽然流程简单,但是由于使用邻接表的方式存储数据,空间复杂度(n^2)实在不理想,时间复杂度同样不佳。。。。在acm比赛中若不加以优化,往往超时无疑。为解决这个问题,在实际应用或比赛中常常使用优先队列优化。如下是我写的dijikstr算法优先队列优化版。用于自己日后复习和分享知识用,若有错误或不足之处请留言。dijik...原创 2019-03-14 15:57:46 · 923 阅读 · 1 评论 -
c++ 常用数学算法复习
快速幂算法#define maxn 1e9+7//求a^b mod c int quick_mod(long long a,long long b,long long c) { int ans=1; a=a%c; while(b!=0) { if(b&1) ans=(ans*a)%c; b>...原创 2019-03-20 16:59:17 · 430 阅读 · 0 评论 -
最大流之EK算法
刚刚复习了最大流算法,温习了 Edmons-Karp 算法的思想和简单步骤后,第一次写的是用结构体包装节点和边,不过后来发现这样虽然一定程度上使代码更加容易理解,但是调用变量的语句长了许多,于是还是采用数据的方式。这样速度会快不少。以下是我写的最大流算法。发现错误或不足之处希望留言提醒更正。#include<iostream>#include<stdio.h>#i...原创 2019-03-16 23:13:52 · 612 阅读 · 0 评论 -
c++拓扑排序算法
请想象在一个有向图中,如果有点a指向点b,可以理解为 事件a 是事件b 的前提,b必须在a之后输出。于是这样就形成了一种排序关系。拓扑排序就是解决这类排序问题的算法。非常简单,快来学习吧!#include<iostream>#include<stdio.h>#include<string.h>#include<vector>#includ...原创 2019-03-16 23:56:00 · 1090 阅读 · 0 评论 -
c++写AVL二叉平衡搜索树算法
下面是我写的avl数算法模板,虽然已过三个月,现在再次想重写,仍然难以找到可以在优化的地方。这个算法里面用到的递归操作和其他细节都很多,一旦某处写错,可能造成难以发现的bug。。。下面是代码,注释照旧,发现不足之处或有所疑问欢迎留言。#include<iostream>#include<stdio.h>#include<vector>#include...原创 2019-03-20 22:19:33 · 365 阅读 · 0 评论 -
用c++实现自动排序的单向链表
这是一个数据结构作业:用c++编写如下数据结构:在单向链表的基础上,加入一个自动排序的功能,要求任何时候链表都是升序的。要实现基本的插入和输出功能。分析:这个链表在功能上类似优先队列 priority_queue 。相同点:都是非线性结构,都是不限制数据量的容器,每次插入数据后都能保持数据顺序。不同点:优先队列采用二叉堆结构,实现自动排序的代价很低,而链表则要每次向后遍历,直至找到合适的位...原创 2019-03-12 16:11:03 · 732 阅读 · 1 评论 -
最小树之kruskal算法
生成最小树是指在一个无向连通图上选择适当的边,生成一个子连通图满足全部边的权重加起来最小的条件应用:给出n个城市和各个城市间的距离,问若要修建若干个公路连通所有城市,问应该如何修建和这时的公路长度。。。以下是经 黑车司机 总结和优化的最小树算法用到的数据结构1.node_set[i] ,节点i所属的集合,刚开始是i2.size[i],集合i包含的节点,刚开始是13.edge[i], e...原创 2019-03-12 17:19:29 · 795 阅读 · 0 评论 -
c++ 写并查集算法模板
并查集是一种树型的数据结构,用于处理一些不交集的合并及查询问题。给出一个有向图,经过并查集算法可以很快地判断任意连个点是否属于同一个集合。#include<iostream>#include<stdio.h>#include<string.h>#define MAXN 1000using namespace std;int root[MAXN]; ...原创 2019-03-17 20:23:54 · 1582 阅读 · 0 评论 -
C++用链表写栈
#include<iostream>#include<stdio.h>#include<string.h>using namespace std;struct Node{ int val; Node* next; Node(int a, Node* n){ val = a; next = n; }};class Stack{publ...原创 2019-03-21 14:28:39 · 476 阅读 · 0 评论 -
c++用链表实现队列
注意些插入元素时要注意特殊的情况,例如队列为空时,队列只有一个元素时,或队列有多个元素时分别要以怎样的方式插入。#include<iostream>#include<stdio.h>#include<string.h>using namespace std;struct Node{ int val; Node* next; Node(int v...原创 2019-03-21 15:12:26 · 2609 阅读 · 0 评论 -
c++写哈夫曼编码树算法
Huffman Tree Algorithm今天复习了哈夫曼树算法,想不到理解代码毫无难度,十分钟左右就写好了。我用了优先队列来存储节点,权重小的先输出。需要注意的是为节点写比较函数的方法,因为这时优先队列存储的是节点的指针,不可以将比较函数直接写在类里,这时可以用一下的方法。(为备战英语六级,注释采用英文,相信很易理解,欢迎留言)#include<iostream>#i...原创 2019-03-18 22:16:40 · 822 阅读 · 0 评论 -
根据先序遍历的结果还原二叉搜索树
又二叉树的特征,知道先序遍历的输出和中序遍历的输出,就可以还原一颗唯一的树。而在二叉搜索树中,中序遍历恰恰是将先序遍历排序后的结果。所以给出先序遍历的输出结构,便可以还原这棵二叉搜索树。My Code#include<iostream>#include<stdio.h>#include<vector>#include<map>#inc...原创 2019-04-11 19:22:04 · 2555 阅读 · 0 评论 -
冒泡排序、希尔排序、归并排序 、快速排序性能分析
本代码用来测量分析冒泡排序、希尔排序、归并排序 和快速排序在数组大小不同的情况下的用时情况。使用函数比较两个数组是否一致:bool check(int*s, int*s2,int len){ bool same = true; for(int i=0;i<len;i++) if(s[i]!=s2[i]) same = false; return sa...原创 2019-02-26 20:41:06 · 809 阅读 · 0 评论