自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 快速排序

调用库函数 #include <stdlib.h> /*---------------简单整数排序--------------------*/ int compare(const void *a, const void *b) { /* 比较两整数。非降序排列 */ return (*(int*)a - *(int*)b); } /* 调用接口 */ qsort(A, N, sizeof(int), compare); /*---------------简单整数排序---------

2021-02-28 22:30:13 133 1

原创 归并排序

递归实现 /* L = 左边起始位置, R = 右边起始位置, RightEnd = 右边终点位置*/ void Merge( ElementType A[], ElementType TmpA[], int L, int R, int RightEnd ) { /* 将有序的A[L]~A[R-1]和A[R]~A[RightEnd]归并成一个有序序列 */ int LeftEnd, NumElements, Tmp; int i; LeftEnd = R - 1;

2021-02-23 23:33:53 99

原创 堆排序

void Swap( ElementType *a, ElementType *b ) { ElementType t = *a; *a = *b; *b = t; } void PercDown( ElementType A[], int p, int N ) { /* 改编代码4.24的PercDown( MaxHeap H, int p ) */ /* 将N个元素的数组中以A[p]为根的子堆调整为最大堆 */ int Parent, Child; Element

2021-02-23 23:32:04 73

原创 拓扑排序

bool TopSort( LGraph Graph, Vertex TopOrder[] ) { /* 对Graph进行拓扑排序, TopOrder[]顺序存储排序后的顶点下标 */ int Indegree[MaxVertexNum], cnt; Vertex V; PtrToAdjVNode W; Queue Q = CreateQueue( Graph->Nv ); /* 初始化Indegree[] */ for (V=0; V&lt

2021-02-08 23:39:32 169

原创 最短路径问题

无权图的单源最短路算法 /* dist[]和path[]全部初始化为-1 */ void Unweighted ( LGraph Graph, int dist[], int path[], Vertex S ) { Queue Q; Vertex V; PtrToAdjVNode W; Q = CreateQueue( Graph->Nv ); /* 创建空队列, MaxSize为外部定义的常数 */ dist[S] = 0; /* 初始化源点 */

2021-02-04 23:39:28 112

原创 邻接表存储、邻接矩阵存储

邻接表存储 void Visit( Vertex V ) { printf("正在访问顶点%d\n", V); } /* Visited[]为全局变量,已经初始化为false */ void DFS( LGraph Graph, Vertex V, void (*Visit)(Vertex) ) { /* 以V为出发点对邻接表存储的图Graph进行DFS搜索 */ PtrToAdjVNode W; Visit( V ); /* 访问第V个顶点 */ Visit

2021-01-31 23:44:42 137 1

原创 图的抽象数据类型及表示

什么是图 表示多对多的关系 包含: 一组顶点:通常用V(Vertex)表示顶点集合 一组便:通常用E(Edge)表示边的集合 抽象数据类型定义 类型名称:图 数据对象集:G(V,E)由一个非空的有限顶点集合V和一个有限边集合E组成 操作集:对于任意图 G∈Graph,以及v∈V,e∈E Graph Create():建立并返回空图 Graph InsertVertex(Graph G, Vertex v):将v插入G Graph InsertEdge(Graph G, Edge e):将e插入G void

2021-01-29 23:11:53 780

原创 集合及运算

集合的表示 集合运算 交、并、补、差,判定一个元素是否属于某一集合 并查集 集合并、查元素属于什么集合 集合运算 查找某个元素所在的集合 int Find( SetType S[], ElementType X) { int i; for(i=0;i < MaxSize && S[i].Data != X;i++); if( i >= MxaSize) return -1; for(;S[i].Parent >= 0; i = S[i]Parent);

2021-01-27 23:58:47 64

原创 二叉搜索树

二叉搜索树 一课二叉树,满足以下性质: 1)非空左子树的所有键值小于其根结点的键值 2)非空右子树的所有键值大于其根结点的键值 3)左、右子树都是二叉搜索树 二叉搜索树的查找操作 查找从根节点开始,如果树为空,返回NULL 若搜索树非空,则根结点关键字和X进行比较,并进行不同处理: 1)若X小于根结点键值,只需要在左子树中继续搜索 2)若X大于根结点键值,在右子树中继续搜索 3)若两者比较结果相等,搜索完成,返回指向此结点的指针 Position Find (ElementType X, BinTree B

2021-01-24 00:20:42 124

原创 二叉树的遍历

二叉树的遍历 先序遍历 遍历过程为 1)访问根结点 2)先序遍历其左子树 3)先序遍历其右子树 void PreOrderTraversal (BinTree BT) { if(BT) { printf("%d", BT->Data); PreOrderTraversal( BT->Left); PreOrderTraversal( BT->Right); } } 中序遍历 遍历过程为 1)中序遍历其左子树 2)访问根结点 3)中序遍历其右子树 void InOrder

2021-01-18 23:47:06 109

原创 二叉树定义、性质

二叉树 二叉树:一个有穷的结点集合 这个集合可以为空 若不为空。则它是由根节点和称为其左子树TLT_LTL​和右子树TRT_RTR​的两个不相交的二叉树组成 二叉树的几个重要性质 一个二叉树第i层的最大结点数为:2i−12^{i-1}2i−1,i≥1 深度为k的二叉树有最大结点总数为:2k2^k2k-1,k≥1 对任何非空二叉树T,若n0n_0n0​表示叶结点的个数、n−2n-2n−2是度为2的非叶结点个数,那么两者满足关系n0n_0n0​=n2n_2n2​+1。 二叉树抽象数据类型定义 类型名称:二叉树

2021-01-18 00:03:46 119

原创 树与树的表示

树的定义 树:n(n≥0)个结点构成的有限集合 当n=0时,称为空树 对于任一棵非空树(n>0),它具备以下性质 1)树中有一个称为“根(Root)”的特殊节点,用r表示 2)其余结点可分为m(m>0)个互不相交的有限集T1T_1T1​,T2T_2T2​,…,TmT_mTm​,其中每个集合本身又是一棵树,称为原来树的“子树”(Sub Tree) 子树是不相交的 除了根节点外,每个结点有且仅有一个父结点 一棵树N个结点的树有N-1条边 树的一些基本术语 1)结点的度(Degree):结点的子树个数

2021-01-15 23:58:15 102

原创 复杂度分析

空间复杂度S(n) 根据算法写成的程序在执行时占用存储单元的长度。这个长度往往与输入数据的规模有关。空间复杂度过高的算法可能导致使用的内存超限,造成程序非正常中断。 时间复杂度T(n) 根据算法写成的程序在执行时耗费的时间长度。这个长度往往也与输入数据的规模有关。时间复杂度过高的抵消算法可能导致我们在有生之年都等不到运行结果。 复杂度分析 在分析一般的算法效率时,一般关注两种复杂度 最坏情况复杂度Tworst(n)T_{worst}(n)Tworst​(n) 平均复杂度Tavg(n)T_{avg}(n)Ta

2021-01-14 23:56:07 165

原创 查找

查找 查找表 概念 查找表是由同类型的数据元素(或记录)构成的集合 对查找表基本操作 1)查询某个数据元素是否在查找表中 2)检索某个数据元素的各种属性 3)在查找表中插入一个数据元素 4)从查找表中删去某个数据元素 查找表分类 1)静态查找表 仅作查询和检索操作的查找表 2)动态查找表 “查询” 结果 “不在查找表中” ->数据元素插入到查找表中 “查询” 结果为 “在查找表中” 的数据元素->删除 关键字 是数据元素中某个数据项的值,用以标识一个数据元素 若关键字能识别唯一的一个数据元素,则

2021-01-10 00:37:38 179

原创 栈的基本操作

栈的定义 栈是限定在表的同一端进行插入或删除操作的线性表。进行插入或删除操作的一端称为**栈顶**,另一端成为**栈底**。没有数据元素的栈称为**空栈**。插入数据元素的操作称为**入栈**,删除数据元素的操作称为**出栈**。 栈的顺序存储 顺序栈入栈 Status Stack_Push(StackPtr s,StackEntry item) { Status outcome = success; if(s->top == MAXSTACK-1) outcome = overflow;

2021-01-07 23:35:13 172

原创 线性表链式存储结构

单链表 用一组地址任意的存储单元存放线性表中的数据元素 数据域(数据元素)+指针域(指示后继元素的存储位置)=结点 以 “结点的序列” 表示线性表——称作链表 单链表基本操作及实现 查找 按位置查找 链表的操作只能通过从头指针出发,顺着链域next逐个结点比较,直到搜索到指定位置的结点为止 Status List_Retrieve(SqListPtr L, int pos, ElemType *elem) { Status s = range_error; Ptr p = (*L)->next;

2021-01-06 23:56:36 215

原创 线性表顺序结构基本操作

线性表的顺序存储结构 用一组地址连续的存储单元,依次存放线性表中的数据元素(线性表的起始地址s称作线性表的基地址) 顺序存储结构的实现 用结构来整合 分配空间 : ——静态:数组 ——动态:指针 ** 线性表顺序存储结构上基本操作的实现 ** 1.初始化 Status List_lnit(SqListPtr L) { Status s = success; L->list_size = LIST_INIT_SIZE; L->length = 0; L->elem = (ElemT

2021-01-06 00:30:25 217

原创 线性表

1.线性表表示的是线性结构 2.在线性结构中,数据元素之间存在着一对一的关系,其特点是数据元素之间按某种规定存在一个顺序关系 3.特点: 数据类型相同 位序i从1开始 前驱和后继 4.基本操作: 初始化和销毁 引用 加工:插入和删除 5.线性表的顺序存储结构-------顺序表 顺序表是把线性表中的所有元素按照其逻辑顺序依次存储在计算机存储器中指定存储位置开始的一块连续的存储空间中 6.线性表的链式存储结构-------链表 在链式存储中,每个存储点不仅包含元素本身的信息,数据域,还包含元素之间的逻辑关系,

2021-01-04 23:43:45 83

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除