
数据结构
比锅
这个作者很懒,什么都没留下…
展开
-
二叉树
数组实现 一般用于完全二叉树,实现略。链表实现typedef struct treeNode{ ElementType Data; treeNode *Left; treeNode *Right;}TreeNode;void PreOrderTraversal(TreeNode *BT) //先序遍历,非递归实现利用stack{ if(BT) {原创 2017-11-07 22:32:20 · 135 阅读 · 0 评论 -
拓扑排序(关键路径)
//拓扑排序void TopSort(){ for(图中每个顶点V) { if(Indegree[V]==0) Enqueue(V, Q); while( !IsEmpty(Q)) { V = Dequeue(Q); 输出V,或者记录V的输出序号;原创 2017-11-16 20:19:08 · 296 阅读 · 0 评论 -
最小生成树
最小生成树: 1 . 包含全部v个顶点、v+1条边 2 . 无回路、连通图 3 . 边权值和最小// Prim算法(和Dijkstra有点像) T=O(V^2)void Prim(){ MST= {s} while(1) { v=未收录顶点中dist最小者 if(这样的点不存在) break; 将原创 2017-11-16 20:10:27 · 136 阅读 · 0 评论 -
最短路径
一、单源最短:1.有向无权图://伪代码/* dist[w]:w到s最短距离,path[w]:w到s的前一个顶点, T = O(V+E)*/void Unweighted(Vertex S){ Enqueue(S, Q); while(!IsEmpty (Q)) { V =Dequeue(Q); for(V 的每个邻接点原创 2017-11-16 19:45:37 · 234 阅读 · 0 评论 -
散列(hash)
1.构造散列函数:一个好的散列函数: 计算简单、空间分配均匀①直接定址法: h(key) = a * key + b (a、b为常数)②除留余数法: h(key) = key mod p (p一般取素数)③数字分析法: 分析数字关键字的各位变化情况,取比较随机的位作为散列key④折叠法: 把数字分成位数相等的几个部分,然后叠加⑤平方取中法: 把数字平方,然后取...原创 2017-11-22 09:16:10 · 607 阅读 · 0 评论 -
排序
1.冒泡排序void Bubble_Sort(ElementType A[], int N) { for(P=N-1;P>=0;P--) { flag = 0; for(i=0;i<P;i++) { if(A[i] > A[i+1]) { ...原创 2017-11-20 14:47:15 · 211 阅读 · 0 评论 -
队列
数组实现typedef struct{ ElementType Data[MaxSize]; int rear; int front;}Queue;void AddQ( Queue *PtrQ, ElementType item){ if ( (PtrQ->rear+1) % MaxSize == PtrQ->front ) { prin原创 2017-11-04 22:16:34 · 131 阅读 · 0 评论 -
堆栈
数组实现typedef struct{ ElementType Data[MaxSize]; int Top;}Stack;void Push( Stack *PtrS, ElementType item ) { if ( PtrS->Top == MaxSize-1 ) { printf(“堆栈满”); return; } e原创 2017-11-04 12:12:23 · 128 阅读 · 0 评论 -
哈夫曼树
带权路径长度(WPL):设二叉树有n个叶子结点,每个叶子结点带 有权值 Wi,从根结点到每个叶子结点的长度为 Li,则每个叶子结点的带权路径长度之和就是:WPL=Σ Wi * Li 最优二叉树或哈夫曼树:WPL最小的树typedef struct TreeNode *HuffmanTree;struct TreeNode{ int Weight; HuffmanTree Lef原创 2017-11-11 21:08:39 · 177 阅读 · 0 评论 -
堆(heap)
堆: 完全二叉树+任一结点是其子树所有结点的最大(小)值。 以下为最大堆的代码。struct HeapStruct *MaxHeap;struct HeapStruct{ ElementType *Elements; // 存储堆元素的数组 int Size; //堆 的当前元素个数 int Capacity; // 堆的最大容量};Max原创 2017-11-11 16:00:49 · 222 阅读 · 0 评论 -
线性表
数组实现typedef struct list{ ElementType Data[Maxsize]; int Last;}List;List *MakeEmpty() //初始化{ List *PtrL; PtrL = (List*)malloc(sizeof(List)); PtrL->Last = -1; return PtrL;}in转载 2017-11-01 23:21:36 · 118 阅读 · 0 评论 -
图
1.邻接矩阵实现 /*对于无向图可以用(n+1)n/2 的 以为数组存储以节省空间,Gij对应下标为(i*(i+1)/2+j)*/ #define MaxVertexNum 100 // 最大顶点数设为100 #define INFINITY 65535 // ∞设为双字节无符号整数的最大值65535 typedef char VertexT...原创 2017-11-13 08:31:18 · 262 阅读 · 0 评论 -
集合(并查集)
并查集:集合的并、查找某元素在什么集合。 //数组形式存储typedef struct{ ElementType Data; int Parent; //表示父节点下标,根节点为负数(绝对值为子节点个数)}SetType;int Find(SetType S[], ElementType X){ //在数组S中查找值为X的元素所属的集合 //MaxSize原创 2017-11-11 21:50:39 · 1187 阅读 · 0 评论 -
红黑树*
红黑树是AVL树的变种: 1、每个节点不是红色就是黑色。 2、根节点为黑色。 3、如果节点为红色,其子节点必须为黑色。(新增结点的父节点必须是黑色) 4、任意一个节点到到NULL(树尾端)的任何路径,所含之黑色节点数必须相同。(新增结点必须是红色)// 代码转自 https://www.cnblogs.com/skywang12345/p/3624177.html#define RED转载 2017-11-08 17:35:55 · 158 阅读 · 0 评论 -
平衡二叉树(AVL树)
平衡二叉树,也叫AVL树: 任一结点左右子树高度差绝对值不超过1的二叉搜索树。typedef struct AVLTreeNode *AVLTree;typedef struct AVLTreeNode{ ElementType Data; AVLTree Left; AVLTree Right; int Height; };AVLTree AVL_Insert原创 2017-11-08 09:43:48 · 201 阅读 · 0 评论 -
二叉搜索树
二叉搜索树(BST),也叫二叉排序树、二叉查找树: 1. 非空左子树的所有键值小于其根结点的键值。 2. 非空右子树的所有键值大于其根结点的键值。 3. 左右子树都是二叉搜索树。// 查找X,返回该结点// 递归TreeNode *Find(ElementType X, TreeNode *BST){ if(!BST) retu原创 2017-11-07 23:14:37 · 106 阅读 · 0 评论 -
(普通)二叉树知前中序求后序,后中序求前序,(二叉搜索树的)前序求后序
来自柳婼 输出层序的话可以用数组每层遍历存储,参考PAT甲级1020已知后序中序输出前序#include <iostream>using namespace std;int post[] = {3, 4, 2, 6, 5, 1};int in[] = {3, 2, 4, 1, 6, 5};void pre(int root, int start, int end)...转载 2018-03-23 21:20:43 · 183 阅读 · 0 评论