数据结构
浦柳人
岁月悠悠,衰微只及肌肤;热枕抛却,颓唐必至灵魂。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据结构之链式队列的简单操作(有待优化)
数据结构实验三实验3:队列的链式表示和实现要求:构建2个用带头结点的单链表队列QA和QB, 实现下列操作1、初始化队列(清空);2、入队;3、出队;4、求队列长度;5、判断队列是否为空;6、对于队列QA和QB,如果其中一个队列的售货员下班,则自动甩到另一个队列后面。//#include<bits/stdc++.h>#include<stdio.h>#i...原创 2019-03-25 09:34:51 · 742 阅读 · 1 评论 -
弗洛伊德算法(Floyd)求最短路径
弗洛伊德算法图来源于百度百科:Floyd算法其时间复杂度为:O(n^3),(这时间复杂度,分分钟TLE。。。。。)//#include<bits/stdc++.h>#include<stdio.h>#include<algorithm>#include<iostream>#include<stdlib.h>#inclu...原创 2019-05-07 19:23:54 · 1503 阅读 · 0 评论 -
克鲁斯卡尔算法(Kruskal)之最小生成树
克鲁斯卡尔算法求加权连通图的最小生成树的算法。贪心求最小生成树:上代码:(C++)//#include<bits/stdc++.h>#include<stdio.h>#include<algorithm>#include<iostream>#include<stdlib.h>#include<vector>...原创 2019-05-07 20:34:00 · 566 阅读 · 0 评论 -
拓扑排序之关键路径
关键路径:我以为的关键路径就是:在一个AOE-网(带权的有向无环图)中,找到一条最长路径(可能不止一条)相关术语:这是样例输入:9 111 2 61 3 41 4 52 5 13 5 14 6 25 7 95 8 76 8 47 9 28 9 4样例输出:代码://#include<bits/stdc++.h>#include<stdio....原创 2019-05-12 12:00:33 · 1517 阅读 · 3 评论 -
数据结构——希尔排序
希尔排序:希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件...原创 2019-05-27 20:11:39 · 225 阅读 · 0 评论 -
冒排、简单排、插入排、折半插入排、快排、堆排、希尔、归并
冒泡排序:(稳定)void maopao(int *a, int n){ for(int i=1; i<=n-1; ++i) for(int j=1; j<=n-i; ++j) if(a[j] > a[j+1]) { int tem = a[j]; ...原创 2019-05-29 21:20:04 · 336 阅读 · 0 评论 -
循环链表之约瑟夫环
(一)问题描述设有n个人围坐在圆桌周围,现从某个位置m(1≤m≤n)上的人开始报数,报数到k的人就站出来。下一个人,即原来的第k+1个位置上的人,又从1开始报数,再报数到k的人站出来。依次重复下去,直到全部的人都站出来为止。试设计一个程序求出这n个人的出列顺序。(二)问题分析这是一个使用循环链表的经典问题。因为要不断出列,所以采用单链表的存储方式能更恰当的模拟出列的情况,因此采用一个不带头结...原创 2019-03-18 21:09:52 · 2229 阅读 · 0 评论 -
单链表的简单操作
数据结构上机实验写的,发上小博客去。。。前提:typedef struct student{ int data; int length; struct student *next;}LNode, *LinkList;单链表的创建:LinkList creat(int n){//定义结构体指针类型 LinkList L, p, q; L = (LNode *)malloc(si...原创 2019-03-04 09:36:42 · 345 阅读 · 0 评论 -
树状数组的简单实现和原理::
树状数组的概念:树状数组或者二叉索引树也称作Binary Indexed Tree,又叫做Fenwick树;它的查询和修改的时间复杂度都是log(n),空间复杂度则为O(n),这是因为树状数组通过将线性结构转化成树状结构,从而进行跳跃式扫描。通常使用在高效的计算数列的前缀和,区间和int c[maxn];其中A数组就是原数组,C数组则是树状数组,可以发现(0001) C1 = A1(0...原创 2019-03-10 11:50:05 · 225 阅读 · 0 评论 -
迪杰斯特拉算法求最短路
迪杰斯特拉(Dijkstra)迪杰斯特拉提出了一个按路径长度递增的次序产生最短路径的算法,其实这也是一个贪心的过程,,,,算法步骤:首先要明白三个数组:bool s[MAXN]; //记录从源点v0到终点vi是否已被确认最短路径长度int path[MAXN]; //记录从源点v0到终点vi的当前直接前驱顶点序号int...原创 2019-05-06 21:00:17 · 897 阅读 · 0 评论 -
BFS和DFS的简单遍历(C++实现)and Java实现bfs
头文件://#include<bits/stdc++.h>#include<stdio.h>#include<algorithm>#include<iostream>#include<stdlib.h>#include<vector>#include<queue>#include<stack&...原创 2019-04-30 20:37:48 · 1763 阅读 · 0 评论 -
数据结构:普里姆算法(prim)最小生成树
普里姆算法(prim)(图来源于百度百科:prim)时间复杂度为:O(n^2),与网中的边数无关,因此适合于求稠密网的最小生成树。prim的代码:void prim(AMGraph G, int u){ int k; for(int i=0; i<G.vex; ++i) //查找u在顶点集的位置 if(G.vs[i] == u)...原创 2019-05-06 09:40:09 · 2253 阅读 · 0 评论 -
实验四:求两个集合LA和LB(用单链表表示)的并和交集
数据结构实验4实验四:求两个集合LA和LB(用单链表表示)的并和交集要求:在实验二的基础上,使用单链表表示集合。编写两个算法(求交算法和求并算法),并输出最终的结果。测试用例:集合A为{3,4,1,6},集合B为{2,3,6,7},交集为{3,6}并集为{1,2,3,4,6,7}BZ:暴力!暴力!!暴力!!!(本来想着直接暴力的,但是,,,,我哭了!)单链表排序(冒泡实现):Lin...原创 2019-04-02 22:15:10 · 4034 阅读 · 2 评论 -
二叉树的简单操作(递归)
什么是二叉树?!二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。首先让我们了解一些树的术语吧!树的结点(node)包含一个数据元素及若干指向子树的分支;孩子结点(child node)结点的子树的根称为该结点的孩子;双亲结点B 结点是A ...原创 2019-04-03 20:08:04 · 562 阅读 · 0 评论 -
KMP算法之病毒检测
什么是KMP算法?KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。时间复杂度O(m+n)。(通俗的说就是...原创 2019-04-16 18:48:06 · 7198 阅读 · 2 评论 -
二叉树的遍历(非递归,stack){未完待续........}
二叉树的遍历(递归),请参考该篇博客:二叉树的简单操作(递归实现)这里有一篇很好的博客分享:二叉树前序、中序、后序遍历非递归写法的透彻解析下面让我们看看非递归朝作,考虑到由于用C语言写的话 要自己用链表模拟栈,,,所以,此处改为C++代码了。。因为,可以直接调用STL中的stack。。。。。。//#include<bits/stdc++.h>#include<stdi...原创 2019-04-09 20:58:11 · 277 阅读 · 0 评论 -
哈夫曼树之顺序创建
什么是哈夫曼树:给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。摘要哈夫曼树(霍夫曼树)又称为最优树.1、路径和路径长度在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结...原创 2019-04-22 09:23:03 · 2267 阅读 · 2 评论 -
二叉树之 线索二叉树
什么是线索二叉树:二叉树是一种非线性结构,遍历二叉树几乎都是通过递归或者用栈辅助实现非递归的遍历。用二叉树作为存储结构时,取到一个节点,只能获取节点的左孩子和右孩子,不能直接得到节点的任一遍历序列的前驱或者后继。为了保存这种在遍历中需要的信息,我们利用二叉树中指向左右子树的空指针来存放节点的前驱和后继信息摘要:对于n个结点的二叉树,在二叉链存储结构中有n+1个空链域,利用这些空链域存放在某...原创 2019-04-15 09:41:49 · 564 阅读 · 1 评论 -
高斯消元法
高斯消元法(以下摘自百度百科:高斯消元法-百度百科)内容消元法是将方程组中的一方程的未知数用含有另一未知数的代数式表示,并将其代人到另一方程中,这就消去了一未知数,得到一解;或将方程组中的一方程倍乘某个常数加到另外一方程中去,也可达到消去一未知数的目的。消元法主要用于二元一次方程组的求解。核心1)两方程互换,解不变;2)一方程乘以非零数k,解不变;3)一方程乘以数k加上另一方程,解不...原创 2019-05-02 21:40:21 · 1971 阅读 · 0 评论 -
高斯消元:列主消元法
什么是列主消元(注: akk代表第k行第k列的权值, 以下摘自百度百科:列主消元法)列主元素消去法是为控制舍入误差而提出来的一种算法,列主元素消去法计算基本上能控制舍入误差的影响,其基本思想是:在进行第 k(k=1,2,…,n-1)步消元时,从第k列的 akk及其以下的各元素中选取绝对值最大的元素,然后通过行变换将它交换到主元素akk的位置上,再进行消元。BZ:好吧!其实思路的挺清晰的,那么...原创 2019-05-04 13:56:17 · 5331 阅读 · 0 评论 -
模拟大数和N!
大数相加的核心代码:char a[MAXN], b[MAXN];int s[MAXN];void sum(char *a, char *b){ memset(s, 0, sizeof(s)); int la = strlen(a); int lb = strlen(b); reverse(a, a+la);//反转 reverse(b, b+lb...原创 2019-03-22 20:34:45 · 300 阅读 · 0 评论
分享