【数据结构与算法】
文章平均质量分 79
我在天上飘
自信的生活态度最重要!
展开
-
单源最短路径Dijsktra算法
1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。注意该算法要求图中不存在负权边。 问题描述:在无向图 G=(V,E) 中,假设每条边 E[i原创 2016-03-16 16:55:02 · 564 阅读 · 0 评论 -
【数据结构】二叉树
树的结构定义是一个递归的定义。 1、二叉树的顺序存储结构:用一组地址连续的存储单元依次从上至下,从左至右,存储二叉树上的结点元素。即第i个结点元素存储在下标第i-1的位置上。 #define MAX_SIZE 100 typedef TElemType SqBiTree[MAX_SIZE] //0 号单元存储根节点 2、二叉树的二叉链表存储表示 typedef struct B原创 2016-01-21 16:37:19 · 252 阅读 · 0 评论 -
最小生成树之Prim算法
#include using namespace std; #define infinity 10000 #define max_vertexes 6 typedef int Graph[max_vertexes][max_vertexes]; void prim(Graph G, int vcount) { int lowcost[max_vertexes],closeset[max_ve原创 2016-03-15 10:29:06 · 241 阅读 · 0 评论 -
回溯法实现格雷码
For example, given n = 2, return [0,1,3,2]. Its gray code sequence is: 00 - 0 01 - 1 11 - 3 10 - 2回溯法可实现,但是不符合LeetCode的答案顺序。【思路】每一位要么是1,要么是0。class Solution { public: //正确的,但不符合输出顺序。 void bits(in原创 2016-05-09 22:27:12 · 756 阅读 · 0 评论 -
两个栈实现一个队列 && 两个队列实现一个栈
/*栈A提供入栈功能,栈B提供出栈功能,如果栈B不为空,直接弹出栈B的数据;如果栈B为空,则将栈A中数据依次弹出并压入栈B,再弹出栈B数据。*/class myQueue{ private: stack s1; stack s2; public: void en(int data){ s1.push(data); } void de(){ if(s2.empty()){原创 2016-07-06 09:44:47 · 305 阅读 · 0 评论 -
建立最小堆的下滑算法
//从节点start开始直到m为止,自上向下比较,如果子女的值小于父节点的值,则//关键码小的上浮,继续向下层比较。void siftDown(int *a,int start, int m){ int i = start, j = 2 *i +1; int tmp = a[i]; while(j<=m){ if(ja[j+1]) j++; if(tmp <=a[j])原创 2016-08-28 15:22:12 · 943 阅读 · 0 评论