- 博客(54)
- 收藏
- 关注
原创 哈利波特的考试-有权无向图用到Floyd算法
哈利波特的考试-有权无向图用Floyd算法计算任意两顶点的最短路径,再对每个顶点去扫描它到其他顶点最短路径的最大值,把最大值记下,找所有顶点到其他顶点的最大值其中最小值。#define MaxVertexNum 100 //最大顶点数设为100#define INFINITY 65535 //∞设为双字节无符号整数的最大值65535typedef int Vertex; //用
2017-03-25 22:00:28
2258
原创 Huffman Codes(哈弗曼编码)之计算最优编码长度和对每位学生的提交检查
MinHeap H=CreateHeap(N);//创建一个空的、容量为N的最小堆H=ReadData(N);//将f[]读入H->Data[]中HuffmanTree T=Huffman(H);//建立Huffman树int CodeLen=WPL(T,0); int WPL(HuffmanTree T,int Depth){ if(!T->Left&&!T->Right) re
2017-03-12 22:06:48
873
原创 Complete Binary Search Tree(完全二叉搜索树)用数组表示和计算左子树的规模
void solve(int ALeft,int ARight,int TRoot){//初始调用为solve(0,N-1,0) n=ARignt-ALeft+1; if(n==0) return; L=GetLeftLength(n);//计算n个结点的树其左子树有多少个结点 T[TRoot]=A[ALeft+L]; LeftTRoot=TRoot*2+1; RightTRoo
2017-03-12 21:59:36
664
原创 Tree Traversals Again(通过先序、中序遍历在不建树情况下推出后序遍历)
void solve(int preL,int inL,int postL,int n){ if(n==0) return; if(n==1) {post[postL]=pre[preL];return;} root=pre[preL]; post[postL+n-1]=root; for(i=0;i<n;i++) if(in[inL+i]==root) break; L=i;
2017-03-10 20:22:45
291
原创 用邻接表来表示图
typedef struct GNode *PtrToGNode;struct GNode{ int Nv;//顶点数 int Ne;//边数 AdjList G;//邻接表。AdjList要自己去定义 };typedef PtrToGNode LGraph;//以邻接表存储的图类型typedef struct VNode{ PtrToAdjVNode FirstEdge;
2017-03-10 20:11:09
631
原创 用邻接矩阵来表示图
typedef struct GNode *PtrToGNode;struct GNode{ int Nv;//顶点数 int Ne;//边数 WeightType G[MaxVertexNum][MaxVertexNum]; DataType Data[MaxVertexNum];//存顶点的数据 .有就写 };typedef PtrToGNode MGraph;//以邻接矩阵
2017-03-10 20:09:46
1431
原创 file transfer(文档传送程序)-并查集的应用
/*file transfer文档传送程序*/ typedef struct{//本数组的类型是结构体。集合的每个元素直接用数组里的下标去代表即可,此时数据域可以不要,直接定义一个整型数组即可表示集合。 ElementType Data;//数组有个结构域Data对应的是集合的元素的具体类型 (任何想要的类型) int Parent;//是个指针记录元素在数组里父结点的位置 }SetTy
2017-03-06 21:23:02
544
原创 堆中的路径
#define MAXN 1001//堆的表示及其操作 #define MINH -10001int H[MAXN],size;typedef struct HeapStruct *MinHeap; //最大堆的创建 struct HeapStruct{ ElementType *Elements;//存储堆元素的数组 int Size;//堆的当前元素个数 int Capacit
2017-03-02 14:03:15
346
原创 集合的表示、并查集的数组存储方式和集合的差并运算
typedef struct{ ElementType Data; int Parent; }SetType;SetType S[]; int Find(SetType S[],ElementType X)//查找某个元素所在的集合(用根结点表示) {//在数组S中查找值为X的元素所属的集合 //MaxSize是全局变量,为数组S的最大长度 int i; for(i=0;i<M
2017-02-28 12:43:13
546
原创 哈弗曼树的构造、什么是哈弗曼编码和怎样构造一颗编码代价最小又无二义的二叉树--用哈弗曼树
typedef struct TreeNode *HuffmanTree;struct TreeNode{ int Weight; HuffmanTree Left,Right;}; typedef struct HeapStruct *MinHeap; //最小堆的创建 struct HeapStruct{ ElementType *Elements;//存储堆元素的数组 in
2017-02-20 16:22:54
583
原创 什么是哈弗曼树
【例】将百分制的考试转换成五分制的成绩 if(score<60) grade=1;//判定树 else if(score<70) grade=2; else if(score<80) grade=3; else if(score<90) grade=4; else grade=5; if(score<80)//修改过的判定树 { if(score<70) if(s
2017-02-20 09:32:25
413
1
原创 最大堆的插入和删除
typedef struct HeapStruct *MaxHeap; //最大堆的创建 struct HeapStruct{ ElementType *Elements;//存储堆元素的数组 int Size;//堆的当前元素个数 int Capacity;//堆的最大容量 };MaxHeap Create(int MaxSize){//创建容量为MaxSize的空的最大堆
2017-02-17 21:15:35
1075
原创 单链表的逆转
typedef struct LNode *Ptr; struct LNode{ElementType Data;List Next;};Ptr head,new,old,tmp;Ptr Reverse(Ptr head,int K)//链表的逆转伪代码 { cnt=1; new=head->Next; old=new->Next; while(cnt<K){ tmp
2017-02-16 01:51:48
411
原创 判别是否是同一课二叉搜索树
typedef struct TreeNode *Tree; //搜索树表示 struct TreeNode{ int v; Tree Left,Right; int flag; }; int main(){ int N,L,i; Tree T; scanf("%d",&N); while(N){ scanf("%d",&L); T=MakeTree(
2017-02-13 23:59:23
266
原创 二叉搜索树的插入和删除
typedef struct TreeNode *BinTree; typedef BinTree Position; struct TreeNode{ ElementType Data; BinTree Left; BinTree Right; }; BinTree BST; BinTree Insert(ElementType X,B
2017-02-13 04:08:09
392
原创 什么是二叉搜索树、二叉搜索树的查找(递归或循环)和二叉搜索树的查找最大最小元素
typedef struct TreeNode *BinTree; typedef BinTree Position; struct TreeNode{ ElementType Data; BinTree Left; BinTree Right; }; BinTree BST; Position Find(ElementType X,Bi
2017-02-13 03:58:35
1275
原创 如何判断两颗二叉树同构
#define MaxTree 10#define ElementType char#define Tree int#define Null -1struct TreeNode{ElementType Element; Tree Left;Tree Right; }T1[MaxTree],T2[MaxTree],T[MaxTree];int main(){
2017-02-12 02:03:10
5045
1
原创 二叉树的应用问题
【例】遍历二叉树的应用:输出二叉树中的叶子结点。void PreOrderPrintLeaves(BinTree BT)//例如先序遍历来判断左右子树是否都为空 {if(BT){if(!BT->Left&&!BT->Right)//增加检测结点 printf("%d",BT->Data);PreOrderPrintLeaves(BT->Left);PreOrde
2017-02-10 13:31:22
584
原创 二叉树的层序遍历
typedef struct TreeNode *BinTree;typedef BinTree Position; struct TreeNode{ ElementType Data; BinTree Left; BinTree Right; }; BinTree BT;void LevelOrderTraversal( BinTree BT )//二叉树的层序遍历,用队列方法,
2017-02-10 13:03:32
268
原创 二叉树的中序、先序、后序遍历非递归遍历算法(使用堆栈,用循环实现)
typedef struct TreeNode *BinTree;typedef BinTree Position; struct TreeNode{ElementType Data;BinTree Left;BinTree Right; }; BinTree BT;void InOrderTraversal(BinTree BT)//中序遍历非递归遍历算法
2017-02-10 13:01:58
702
原创 二叉树的先序、中序、后序遍历
typedef struct TreeNode *BinTree;typedef BinTree Position; struct TreeNode{ ElementType Data; BinTree Left; BinTree Right; }; BinTree BT;//二叉树的遍历 void PreOrderTraversal(BinTree BT)//(1)先序遍历
2017-02-05 04:03:42
245
原创 二叉树的存储结构
typedef struct TreeNode *BinTree;typedef BinTree Position; struct TreeNode{ElementType Data;BinTree Left;BinTree Right; };BinTree BT;
2017-02-05 04:01:50
182
原创 数据管理基本操作-查找
typedef struct LNode *List;struct LNode{ElementType Element[MAXSIZE];int Length; }; 方法1:顺序查找算法int SequentialSearch(List Tb1,ElementType K)//(有"哨兵"){//在Element[1]~Element[n]中查找关键字为K的数据元素
2017-02-04 04:08:09
197
原创 一元多项式加法与乘法运算链表实现
typedef struct PolyNode *Polynomial;struct PolyNode{ int coef;//系数 int expon;//指数 Polynomial link;/*指向下一个结点的指针*/ }; Polynomial P,Rear,t1,t2,t;//这句一定要写 int main(){ Polynomial P1,P2,PP,PS;
2017-01-29 01:56:36
1482
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人