数据结构与算法
文章平均质量分 56
奋斗的小跳蛙
仰望天空,脚踏实地。
展开
-
KMP算法详讲
推荐大家看看这篇博客,讲的非常透彻http://blog.csdn.net/v_july_v/article/details/7041827原创 2020-03-14 17:01:34 · 119 阅读 · 0 评论 -
模拟主存储器最先适应算法
模拟主存储器最先适应算法问题背景一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。当用户提出申请存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间的使用情况,找出足够的空闲区域分配给申请者。当作业撤离或主动归还主存资源时,则存储管理要收回作业占用的主存空间或归还部分主存空间。主存的分配和回收的实现与主存储器的管...原创 2019-12-31 23:35:40 · 289 阅读 · 0 评论 -
汉诺塔递归算法
汉诺塔问题自制了一幅图来表示更清楚从图中我们也能看出要想把第n个盘子挪到c上,就必须把前n-1个盘子到b上,作为中转,然后把第n个盘子挪到c上后,然后再把b上的n-1个盘子再挪到c上,这回利用a来做中转,这样问题就转化为跟第一次的一样了。代码如下:#include<iostream>using namespace std;//从a挪到cvoid move(char &...原创 2019-12-27 12:16:11 · 164 阅读 · 0 评论 -
全排列递归算法
全排列递归算法以A B C 的全排列来举例子。A 后面紧跟着 剩下两个元素(B C)的全排列B 后面紧跟着 剩下两个元素(A C)的全排列C 后面紧跟着 剩下两个元素(B A)的全排列从上面可以看出就是拿第一个依次后面的每个元素交换,得到了3种状态。然后我们以 (B C)的全排列继续演示:4. B后面紧跟着 剩下一个元素( C)的全排列5. C后面紧跟着 剩下两个元素(B ...原创 2019-12-26 23:12:16 · 200 阅读 · 0 评论 -
图的广度优先遍历
图的广度优先遍历需要借助对列来实现,我们下面来用邻接矩阵和邻接表两种图的结构的遍历.邻接矩阵的广度优先遍历#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h> #define MAXSI...原创 2019-08-18 14:57:52 · 162 阅读 · 0 评论 -
图的深度优先遍历
从中某一顶点出发访遍图中的其与顶点,且使每一个顶点仅被访问一次,这一过程就叫做图的遍历.一.深度优先遍历 DFS从图中的某个顶点v出发,访问此顶点,然后从v的未被访问的邻接点出发深度优先遍历图,直至图中所有和v有路径的相通的顶点都被访问到. 这里我们讲到的是连通图,对于非连通图,只需要对它的连通分量分别进行深度优先遍历.#define _CRT_SECURE_NO_WARNINGS#...原创 2019-08-17 23:29:16 · 145 阅读 · 0 评论 -
图的概念与五种结构实现 (详细定义与源码实现)
,图的术语多的让人绝望,但我们要沉下心来慢慢琢磨透它.首先我们来看一下图的定义:图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为: G (V,E) ,其中,G表示为一个图,V是图G中顶点的集合E是图G中边的集合.其次,我们知道线性表中数据元素叫元素,树中将数据元素叫结点,而图中数据元素我们则称之为顶点.线性表中可以没有数据,称为空表.树中没有结点,叫做空树.而对于图来说,...原创 2019-08-17 14:29:49 · 583 阅读 · 0 评论 -
图的普里姆算法
作为一名合格的程序员,我们知道最基本的普里姆算法,图的普里姆算法是求最小生成树的一种算法,利用两个一维数组来实现.#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<assert.h>#define MAXPOINT 9#define INFINIT...原创 2019-08-21 22:02:12 · 699 阅读 · 0 评论 -
排序
我们平时常用的排序有四大类,分别为: 插入排序,选择排序,交换排序,和归并排序另外这些类又分为七小类,分别为:直接插入排序,希尔排序,简单选择排序,堆排序,冒泡排序快速排序,归并排序下面我们来逐一分析实现它们首先,我们来先看直接插入排序.直接插入排序在保证前面的元素已经有序时,一个一个的加入,向后平移的过程.顺序表的插入先复制一份,在逐渐平移,在赋回去其次,它是稳定的,时间复杂度为最坏...原创 2019-08-25 19:28:48 · 225 阅读 · 5 评论 -
树森林二叉树的相互转换及遍历树与森林
森林 与 树 与 二叉树将树转换为二叉树的步骤1.加线 在所有兄弟结点之间加一条连线2.去线 对树中的每个结点,只保留与他第一个孩子结点的连线删除它与其它孩子结点之间>的连线.3.层次调整,以树的根节点为轴心,将整棵树顺时针旋转一定的角度使之结构分明,注意第一 个孩子是二叉树结点的左孩子,兄弟转换过来的孩子是结点的右孩子.森林是由若干棵树的组成,所以可以理解为森林中...原创 2019-08-12 10:12:37 · 527 阅读 · 0 评论 -
树的双亲表示法 孩子表示法 孩子兄弟表示法
树的存储方式有三种.分别为双亲表示法,孩子表示法,孩子兄弟表示法1.双亲表示法,借助一维数组实现//由于根结点没有双亲,约定根结点的位置域设为-1;/* typedef struct TreeNode{ int data; //结点数据 int parent; //双亲位置}TreeNode;typedef struct Tree{ TreeNode nodes[MAXSI...原创 2019-08-12 10:01:29 · 1261 阅读 · 0 评论 -
二叉树的创建与3种遍历详讲
二叉树是一种特殊的树,二叉树是n(n>=0)个结点的有限集合,该集合或者为空集,或者由一个根节点和两棵互不相交的,分别称为根节点的左子树和右子树的二叉树组成.二叉树性质:在二叉树的第i层最多有2^(i-1)个结点 (i>=1)深度为k的二叉树至多有2^k -1 个结点 ( k>=1)对任意一颗二叉树T,如果其终点结点数为n0,度为2的结点数为n2,则n0=n2+1;...原创 2019-08-12 09:48:42 · 124 阅读 · 0 评论 -
拓扑排序算法详讲
经过一天的专研,终于明白了拓扑排序算法,写篇博客记录一下心得.一.拓扑排序介绍在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网,我们称为AOV网.设G=(V,E)是一个具有n个顶点的有向图,v中的顶点序列v1,v2…,vn,满足若从顶点到v1到vj有一条路径,则在顶点序列中顶点vi必须在顶点vj之前,我们称这样的顶点序列为一个拓扑序列....原创 2019-08-15 17:35:54 · 6129 阅读 · 1 评论 -
二叉树的非递归遍历
二叉树的非递归实现需要借助栈来实现.#include"tree.h"#include"queue.h"#include"stack.h"Node * Createree(char * src) //前序建立树.{ static int s_n = 0; if (src[s_n] == '#') { s_n++; return NULL; } Node * cur ...原创 2019-08-23 23:03:01 · 98 阅读 · 0 评论 -
循环队列的详细讲解与实现
队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表.线性表右顺序存储和链式存储,栈是线性表也有 这两种存储方式.同样,队列作为一种特殊的线性表,也同样存在这两种存储方式.我们先来看下队列的顺序存储又因为对列的顺序存储的不足,会造成浪费,所以引入循环队列#include<stdio.h>#include<stdlib.h>#include<str...原创 2019-08-09 15:42:46 · 427 阅读 · 0 评论 -
栈的链式结构定义与实现 (源代码)
链栈 不需要头节点判断栈为空的条件就是top==NULLtypedef struct StackNode{ struct StackNode * next; int data;}StackNode;typedef struct Stack{ StackNode * top; int count;}Stack;栈的初始化void initStack(Stack * ...原创 2019-08-09 14:13:37 · 353 阅读 · 0 评论 -
栈的顺序存储及两栈共享空间 菜鸟都能看懂的教程
栈是限定仅在表尾进行插入和删除的操作的线性表栈的定义#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h> #define MAXSIZE 100//stack//栈满条件 : MAXSIZE-1=top//规定 top=-1 为空栈,...原创 2019-08-08 16:30:53 · 342 阅读 · 0 评论