数据结构(c)
重生之我是一名程序员
IN IT && WIN IT !
展开
-
算法-堆排序
算法-堆排序堆:完全二叉树父节点 i 的左右子节点为 2i+1, 2i+2,且 arr[i]>=arr[2i+1] && arr[i]>=arr[2i+2]public class HeapSortMain { /** * 堆 * 父节点 i 的左右子节点为 2i+1, 2i+2,且 arr[i]>=arr[2i+1] && arr[i]>=arr[2i+2] * <p> *转载 2022-05-07 06:59:00 · 51 阅读 · 0 评论 -
克鲁斯卡算法 并查集实现最小生成树(伪代码)
克鲁斯卡算法思想: 在无向图中按照边的权值从小到大排序,然后从最小边开始扫描,并且检测当前边是否为候选变,即是否该边会构成回路,如不构成,则将该边并入当前的生成树typedef struct{ int a,b; int weight;}Road;Road road[maxSize];int v[maxSize]; //定义并查集数组原创 2015-10-29 09:49:00 · 2547 阅读 · 0 评论 -
Dijkstra单源最短路径实现 及 Floyd任意两点之间的最短路径
Dijkstra算法void printPath(int path, int a){ int stack[maxSize],top= -1; while(path[a]!=-1){ stack[++top] = a; a = path[a]; } stack[++top]=a; while(top!=-1) print(stack[++top]+" "); print("原创 2015-10-29 10:32:04 · 526 阅读 · 0 评论 -
第k小数
int kth_elem(int a[], int low, int high, int k){ int pivot = a[low] int low_temp = low; int high_temp = high; while(low < high){ while(low =pivot) --high; a[low] = a[high] while(low < hig原创 2015-11-13 19:33:56 · 337 阅读 · 0 评论 -
Prim算法 实现最小生成树(伪代码)
Prim算法思想: 从无向图中任意取出一个顶点,把它当作一棵树,然后从与这棵树相接的边中取出一条最短的边,并将这条边及所连接的顶点也并入到这棵树中,此时得到了可两个顶点的树,让后从与这棵树相接的边中取出一条最短的边,并将这条边及所连接的顶点并入到当前的树中,以此类推,算法实现:void Prim(MGraph g, int v0, int &sum){ int lowcos原创 2015-10-29 10:04:27 · 6337 阅读 · 4 评论 -
非递归DFS
算法思想: 在深度游仙搜索中使用一个栈S,记忆下一步可能访问的顶点,同时使用一个访问编辑数组visited[i],在visited[i]中记忆第i个顶点是否在栈内void DFS_Non_RC(AGraph &G, int v){ int w; InitStack(S); for(i = 0;i < G.vexnum; i++) visited[i] = True;原创 2015-10-26 21:01:13 · 464 阅读 · 0 评论 -
判断无向图是否是一棵树
算法思想: G必须是无回路的连通图或者是n-1条边的连通图,这里采用后者作为判断条件。采用深度优先搜索算法遍历途中可能访问到的顶点个数和边数,如果一次遍历能访问到n个顶点和n-1条边,则是一棵树bool isTree(Graph &G){ for(i =0; i < G.VexNum; i++) visited[i] = False; int原创 2015-10-26 20:43:29 · 16201 阅读 · 8 评论 -
Depth-First-Search(DFS伪代码)
//深度优先搜索boolean visited[MAX_VERTEX_NUM] //设置访问标记数组void DFSTraverse(Graph G){ //对图G进行深度优先遍历,设访问函数为visit() for(i = 0;i < G.vexNum; i++) /原创 2015-10-26 20:39:05 · 2711 阅读 · 0 评论 -
Breadth-First-Search(伪代码)
//广度优先算法伪代码boolean visited[MAX_VERTEX_NUM] //设置访问标记数组void BFSTraverse(Graph G){ //对图G进行广度优先遍历,设访问函数为visit() for(i = 0;i < G.vexNum; i++)原创 2015-10-26 20:26:55 · 1566 阅读 · 0 评论 -
拓扑排序实现(伪代码)
拓扑排序void TopologicalSort(Graph G){ InitStack(S); for(i = 0;i < G.vexnum; i++){ if(indegrdd[i]==0) Push(S, i); } int count =0; while(!Empty(S)){ Pop(S,i); print[count++] = i; for(p =翻译 2015-10-26 21:35:48 · 2476 阅读 · 0 评论 -
线性表的顺序结构
#define OK 0#define Err_Memory -1#define Err_InvalidParam -2#define Err_Overflow -3#define Err_IllegalPos -4#define Err_NoResult -5#define MAX_Length 100#define Increment_Length 10type原创 2015-04-19 21:58:02 · 299 阅读 · 0 评论