
数据结构
imyyy_
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。
展开
-
B树,B+树,散列表
、线性探测发法原创 2021-04-04 12:51:52 · 216 阅读 · 0 评论 -
最短路径(dijkstra算法)
dijkstra算法///不适用于边的权值为负值void Dijkstra(Graph G,int v){ int s[G.vexnum]; //标记数组 int path[G.vexnum]; //路径数组 int dist[G.vexnum]; //最短路径数组 for(int i=0;i<G.vexnum;i++){ dist[i]=G.edge[v][i]; s[i]=0; if(G.edge[v][i]<max) path[i]=v; else原创 2021-02-15 20:30:35 · 262 阅读 · 0 评论 -
最小生成树
Prime算法掌握思想最重要,代码只是练习MST_Prim(Graph G){ int min_weight[G.vexnum]; int adjvex[G.vexnum]; for(int i=0;i<G.vexnum;i++){ min_weight[i]=G.Edge[0][i]; adjvex[i]=0; } int min_arc; //最小权重的边 int min_vex; //最小权重边的另一端节点的数组下标 for(int i=1原创 2021-02-15 14:47:51 · 390 阅读 · 0 评论 -
图(Graph)深度优先搜索
深度优先搜索类似于树的先序遍历**首先访问起始顶点v接着由v出发访问v的任意一个邻接且未被访问的邻接顶点w;然后再访问与w邻接且未被访问的任意顶点y;若w没有邻接且未被访问的顶点时,退回到它的上一层顶点v;重复上述过程,直到所有顶点被访问为止;**递归+标记数组bool visited[max];void DFSTraverse(Graph G) { for (int i = 0; i < G.vexnum; i++) { visited[i] = false; }原创 2020-09-12 14:06:24 · 562 阅读 · 0 评论 -
图(Graph)广度优先遍历
定义:图是一种网状数据结构,是由一个顶点的有穷非空集V(G)和一个弧(arc)的集合E(G)组成,通常记作G=(V,E),其中G表示一个图,V是图G中点的集合,E是图G中弧的集合。存储结构:邻接矩阵,用一个一维数组来存储G的顶点,用一个相对应的二维数组来存储G的弧。queue<char> q;#define MVNum 100bool Visited[MVNum];typedef struct AMGraph { char vexs[MVNum]; //顶点表 int原创 2020-09-12 10:56:24 · 425 阅读 · 0 评论 -
恢复二叉树(先序+中序)
知道二叉树,可以对二叉树有4种遍历方式,分别为先序遍历,中序遍历,后序遍历以及层次遍历;那么知道(先序+中序)或者(后序+中序)怎样恢复这个二叉树呢?算法思想先根据先序序列的第一个元素建立根节点,然后在中序序列中查找该元素,依据该元素在中序序列中的位置,确定根节点的左,右子树的中序序列;再在先序序列中确定左,右子树的先序序列;最后由左子树的先序序列与中序序列建立左子树,由右子树的先序序列与中序序列建立右子树;#include<iostream>#include<vector.原创 2020-09-11 22:12:33 · 756 阅读 · 0 评论 -
哈夫曼树
哈夫曼树也称最优二叉树,是指对于一组带有确定权值的叶节点,构造具有最小带权路径长度的二叉树,具体实现#include<iostream>#include<stdio.h>#include<stdlib.h>using namespace std;struct node{ int parent; int weight; int lchild,rchild;}; node* array;int select_min(int n){ int.原创 2020-09-11 21:21:40 · 218 阅读 · 0 评论 -
二叉树
树---->二叉树:每个结点左指针指向它的第一个孩子结点,右指针指向它在树中相邻的兄弟结点;2.森林----->二叉树:将每一棵树转换为二叉树,将每颗二叉树的根依次作为上一课二叉树的右子树;...原创 2020-09-11 13:13:33 · 219 阅读 · 0 评论 -
线索二叉树(全是重点)
线索二叉树就是在遍历二叉树的时候,如果当前节点没有左指针,就将左指针指向前驱节点,如果当前节点没有右指针,则将右指针指向后继节点(优点)因为二叉树在遍历的时候,如果你想找到某个节点的前驱节点,就必须把整个二叉树全部遍历一遍,而线索二叉树相当于一个双向链表,可以很简单的找到某个节点的前驱节点3.我们通常使用中序线索二叉树,因为通常叶子节点有空节点,根据中序遍历(左-》中-》右的遍历特点)很容易几乎将整个二叉树连接起来;4.下面给出代码typedef struct THreadNode { st.原创 2020-09-11 07:22:29 · 1840 阅读 · 0 评论 -
二叉树遍历(C语言 前中后序递归+迭代遍历)
3种递归遍历前序遍历(中->左->右)void Pre(Tree *root){ if(root){ Visit(root->data); //printf Pre(root->lchild); Pre(root->rchild); }} 中序遍历(左->中->右)void In(Tree *root){ if(root){ In(root->lchild); Visit(root->data); //pri原创 2020-06-05 15:24:25 · 929 阅读 · 3 评论