
数据结构和算法
chy89224
这个作者很懒,什么都没留下…
展开
-
无权图单源最短路径算法和有权图单源最短路径算法(用到Dijkstra算法)和多源最短路径算法(用到Floyd算法)
原创 2017-03-25 20:23:40 · 480 阅读 · 0 评论 -
用邻接矩阵来表示图
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 阅读 · 0 评论 -
六度空间-用图进行BFS遍历
原创 2017-03-09 22:30:48 · 1013 阅读 · 0 评论 -
拯救007-用图进行DFS遍历
原创 2017-03-09 21:51:28 · 2737 阅读 · 1 评论 -
file transfer(文档传送程序)-并查集的应用
/*file transfer文档传送程序*/ typedef struct{//本数组的类型是结构体。集合的每个元素直接用数组里的下标去代表即可,此时数据域可以不要,直接定义一个整型数组即可表示集合。 ElementType Data;//数组有个结构域Data对应的是集合的元素的具体类型 (任何想要的类型) int Parent;//是个指针记录元素在数组里父结点的位置 }SetTy原创 2017-03-06 21:23:02 · 544 阅读 · 0 评论 -
堆中的路径
#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 阅读 · 0 评论 -
图的遍历和图不连通怎么办
原创 2017-03-07 22:33:33 · 642 阅读 · 0 评论 -
判别是否是同一课二叉搜索树
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 阅读 · 0 评论 -
平衡二叉树的四种调整方式和注意事项
原创 2017-02-13 20:55:54 · 6532 阅读 · 2 评论 -
什么是平衡二叉树和平衡二叉树的高度达到O(log2n)最少需要结点数为n
原创 2017-02-13 20:54:16 · 5647 阅读 · 2 评论 -
二叉搜索树的插入和删除
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 阅读 · 0 评论 -
什么是二叉搜索树、二叉搜索树的查找(递归或循环)和二叉搜索树的查找最大最小元素
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 阅读 · 0 评论 -
哈弗曼树的构造、什么是哈弗曼编码和怎样构造一颗编码代价最小又无二义的二叉树--用哈弗曼树
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 阅读 · 0 评论 -
用邻接表来表示图
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 阅读 · 0 评论 -
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 阅读 · 0 评论 -
最小生成树问题用Prim算法或Kruskal算法
原创 2017-03-27 13:32:59 · 781 阅读 · 0 评论 -
哈利波特的考试-有权无向图用到Floyd算法
哈利波特的考试-有权无向图用Floyd算法计算任意两顶点的最短路径,再对每个顶点去扫描它到其他顶点最短路径的最大值,把最大值记下,找所有顶点到其他顶点的最大值其中最小值。#define MaxVertexNum 100 //最大顶点数设为100#define INFINITY 65535 //∞设为双字节无符号整数的最大值65535typedef int Vertex; //用原创 2017-03-25 22:00:28 · 2259 阅读 · 0 评论 -
堆排序(由选择排序引出)
原创 2017-04-11 07:42:14 · 302 阅读 · 0 评论 -
希尔排序(增量排序)
原创 2017-04-11 07:38:30 · 8011 阅读 · 0 评论 -
简单排序包括冒泡排序和插入排序
原创 2017-04-11 07:35:05 · 446 阅读 · 0 评论 -
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 · 874 阅读 · 0 评论 -
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 阅读 · 0 评论 -
算法
void SelectSort(int List[], int N){for(i=0;i{// 将N个整数List[0]...List[N-1]进行非递减排序,//注排好序的部分为 List[0]...List[N-1],没 好序的部分为List[i]到List[N-1]MinPosition=ScanForMin(List,i,N-1);//ScanForMin叫找最小元函数原创 2016-12-24 19:52:00 · 362 阅读 · 0 评论 -
数据结构
#include //测试函数 循环实现 void PrintN(int N); int main(){int N;scanf("%d",&N);PrintN(N);return 0; } void PrintN(int N){int i;for(i=1;i{printf("%d\n",i);} return;} #inc原创 2016-12-24 19:28:57 · 640 阅读 · 0 评论 -
什么是图和用邻接矩阵、邻接表表示一个图
原创 2017-03-07 12:49:11 · 1836 阅读 · 0 评论 -
旅游规划-单源最短路问题基于Dijkstra来考虑距离以及等距离时按收费更新来更新路径
原创 2017-03-27 21:52:53 · 313 阅读 · 0 评论 -
拓扑排序VOG的算法(甚至用到"容器"存放入度变为0的结点)和有关VOE的关键路径问题
原创 2017-03-27 21:47:03 · 624 阅读 · 0 评论 -
如何判断两颗二叉树同构
#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 · 5046 阅读 · 1 评论 -
什么是哈弗曼树
【例】将百分制的考试转换成五分制的成绩 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 · 414 阅读 · 1 评论 -
一元多项式加法与乘法运算链表实现
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 · 1483 阅读 · 1 评论 -
多项式加法运算链表实现
struct PolyNode{int coef;//系数 int expon;//指数 struct PolyNode *link;//指向下一个结点的指针 }; typedef struct PolyNode *Polynomial;Polynomial P1,P2; Polynomial PolyAdd(Polynomial P1,Polynomial P2)//原创 2017-01-18 19:25:02 · 731 阅读 · 0 评论 -
队列的链表存储实现
struct Node{ElementType Data;struct Node *Next; }; struct QNode{//链队列结构 struct Node *rear; //指向队尾结点 struct Node *front;//指向队头结点 };typedef struct QNode *Queue;Queue PtrQ;Element原创 2017-01-18 16:25:58 · 634 阅读 · 0 评论 -
队列的顺序存储实现
#define MaxSize struct QNode{ElementType Data[MaxSize];int rear;int front; }; typedef struct QNode *Queue;void AddQ(Queue PtrQ,ElementType item)//入队列 {if((PtrQ->rear+1)%MaxSize==PtrQ原创 2017-01-18 15:45:17 · 319 阅读 · 0 评论 -
堆栈应用:表达式求值
原创 2017-01-18 01:58:20 · 529 阅读 · 0 评论 -
栈的链表存储实现
typedef struct SNode *Stack;struct SNode{ElementType Data;struct SNode *Next; }; Stack CreateStack(){//构建一个堆栈的头结点,返回指针 Stack S;S=(Stack)malloc(sizeof(struct SNode));S->Next=NULL;re原创 2017-01-17 22:30:53 · 398 阅读 · 0 评论 -
栈的顺序存储实现
#define MaxSize typedef struct SNode *Stack;struct SNode{ElementType Data[MaxSize];int Top; }; void Push(Stack PtrS,ElementType item)//入栈 { if(PtrS->Top==MaxSize-1){printf("堆栈满"); re原创 2017-01-17 21:47:38 · 294 阅读 · 0 评论 -
广义表
typedef struct GNode*GList;struct GNode{int Tag;//标志域:0表示结点是单元素,1表示结点是广义表 union{ //子表指针域Sublist与单元素数据域Data复用,即共用存储空间 ElementType Data;GList SubList;}URegion;GList Next;//指向后继结点 };原创 2017-01-17 15:43:25 · 336 阅读 · 0 评论 -
线性表的链表存储实现
typedef struct LNode *List;struct LNode{ElementType Data;List Next;};struct LNode L;List PtrL;int Length(List PtrL)//求表长 {List p=PtrL;//p指向表的第一个结点 int j=0;while(p){p=p->Next;原创 2017-01-17 04:07:25 · 322 阅读 · 0 评论 -
线性表的顺序存储实现
typedef struct LNode *List;struct LNode{ElementType Data[MAXSIZE];int Last;};struct LNode L;List PtrL;主要操作的实现List MakeEmpty()//初始化(建立空的顺序表) {List PtrL;PtrL=(List)malloc(sizeo原创 2017-01-16 22:02:48 · 433 阅读 · 0 评论 -
求最大的连续子列和
算法1int MxaSubseqSum1(int A[],int N){ int ThisSum,MaxSum=0; int i,j,k; for(i=0;i for(j=i;j ThisSum=0;//ThisSum是从A[i]到A[j]的子列和for(k=i;kThisSum+=A[k];if(ThisSum>MaxSum)//如果刚得到的这个子列和原创 2016-12-26 17:46:55 · 321 阅读 · 0 评论