随笔分类 - 数据结构
摘要:10.7、归并排序 了解归并排序之前,我们先来了解归并, 给定两个数组A、B,A和B都是有序的,把A和B合并为一个有序的数组,其实我们就可以采用双指针来分别指向的A和B来对比并移动指针,然后需要一个辅助数组来记录排序后的值 ==二路归并的图解== ==归并排序图解== 先对给定一个数组,进行划分为多
阅读全文
摘要:10.5、简单选择排序 这个算法的思想很简单,每次选择从没有排序的元素中选择最小(大)元素放到到前(后)面 简单选择排序是不稳定的 ==简单选择排序代码实现== #include <stdio.h> #include <stdlib.h> #define boolean int #define fa
阅读全文
摘要:10.3、快速排序 算法思想 在待排序表[1...n]中任取一个元素pivot作为枢轴(基准,通常去首元素),通过一趟排序将待排序表划分为独立的两部分L[1...k-1]和L[k+1...n],使得L[1...k-1]中所有元素小于pivot,L[k+1...n]中所有元素都大于等于pivot,则p
阅读全文
摘要:10.3、冒泡排序 从后往前依次比较两个元素,如果后面小于前面就交换,每次都会寻找到其中最小的那个元素放到前面 ==冒泡排序图解== ==冒泡排序的C代码实现== #include <stdio.h> #include <stdlib.h> #define boolean int #define f
阅读全文
摘要:10.2、希尔排序 希尔排序的思想就是直接插入排序的升级版本; 把待排序的数组元素分为n个部分,对每个部分进行直接插入排序,然后把n减小继续重复,直到n=1时候,再进行n=1这一次就可以结束了。 注意:希尔排序不具备稳定性。 ==希尔排序的图示== ==希尔排序的代码实现== #include <s
阅读全文
摘要:10.1、直接插入排序 ==算法思想的图示== ==直接插入排序C代码实现== #include <stdio.h> #include <stdlib.h> #define boolean int #define false 0; #define true 1; //nums:待排序数组,lengt
阅读全文
摘要:9.2、B 树 了解B树之前,先来了解一下m叉查找树 可以类比二叉查找树(排序树)的来了解m叉查找树;我们这里以5叉查找树为例子 二叉查找树有一个关键字和2个孩子,左孩子 < 根结点 < 右孩子的数据,递归下去 5叉查找树有==4个关键字==,五个孩子指针,都以数组的形式来保存;每个结点中,数组下标
阅读全文
摘要:8.12、有向无环图(DAG)、AOV网、拓扑排序 有向无环图(DAG) 若一个有向图中不存在环,则称为有向无环图,简称DAG图(Directed Acyclic Graph). AOV网 AOV网(Activity Vertex NetWork,用顶点表示活动的网),用DAG图(有向无环图)表示一
阅读全文
摘要:8.9、最短生成路径-BFS算法 BFS算法只能处理无权图 ==BFS算法的基本思想== ==代码实现== #include <stdio.h> #include <stdlib.h> #include<math.h> #define MaxSize 100 #define MaxInteger 3
阅读全文
摘要:8.8、最小生成树 连通图的生成树是包含图中全部顶点的一个极小连通子图;若图中顶点数为n,则它的生成树含有条边。 ==最小生成树== 对于一个带权连通无向图G=(V,E),生成树不同,每棵树的权(即树中所有边上的权值之和)也可能不同。设R为图G的所有生产树的集合,若==T为R中边的权值之和
阅读全文
摘要:8.6、图的广度优先遍历 找到与顶点相邻的所有顶点, 标记哪些顶点被访问过 需要一个辅助队列 #include <stdio.h> #include <stdlib.h> #include<math.h> #define MaxSize 100 #define boolean int #define
阅读全文
摘要:8、图 8.1、图的概念和定义 图G由==顶点集V==和==边集E==组成,记为G=(V,E),其中V(G)表示图G中定点的有限非空集;E(G)表示图G中顶点之间的关系(边)的集合。若{},则用==|V|==表示图G的==顶点个数==,也称==图G的
阅读全文
摘要:7.7、二叉树、树、森林 定义树可以使用,孩子兄弟表示法,做指针表示孩子,右指针表示树 typedef struct CSNode{ ElemType data; struct CSNode *firstchilde,*nextsibling;//第一个为孩子,第二个为兄弟 }CSNOde,*CST
阅读全文
摘要:7.9、平衡二叉树(Balanced Binary Tree) 简称平衡树(AVL树)—— 树上任一结点的左子树和右子树的高度只差不会超过1 结点的平衡因子 = 左子树高度 - 右子树高度 得到:平衡二叉树的结点的平衡因子只能为 ==最小不平衡树(LL)== ==最小不平衡树(RR)
阅读全文
摘要:7.8、二叉排序树(BST) 二叉排序树又称二叉查找树 左子树上所有结点的值都小于根结点的值 右子树上所有结点的值都大于根结点的值 左子树和右子树又是一颗二叉排序树 左子树的结点值 < 根结点值 < 右子树的结点值 ==插入的数据的递归实现== #include <stdio.h> #include
阅读全文
摘要:7.6、线索二叉树 由于二叉树结构中各种遍历(中序、前序、后序、层次)不知道结点的前驱和后继,可以利用那些没有孩子的结点的指针指向它的前驱和后继;没有前驱或者后继就指向NULL 让 ==左孩子指向前驱 右孩子指向后继== 如果在存储上,需要定义两个变量来表示这个结点指向的是==前驱和后继==还是==
阅读全文
摘要:7.5、二叉树的遍历 先序遍历:根左右(NLR) 中序遍历:左根右(LNR) 后序遍历:左右根(LRN) 层次遍历:一层从左到右遍历 ==代码实现== //访问结点 void Vist(TreeNode *node){ printf("%d , ",node->data); } //先序遍历 voi
阅读全文
摘要:7.3、二叉树的存储结构 ==二叉树的顺序存储== 完全二叉树,实现一些基本操作,如果不是完全二叉树最好使用链表 #include <stdio.h> #include <stdlib.h> #include<math.h> #define MaxSize 100 #define ElemType
阅读全文
摘要:7、树和二叉树 7.1、树的基本概念 概念: 空树:结点数为0的数 非空树的特性: 有且仅有一个根结点 没有后继的结点称为"叶子结点"(或终端结点) 有有后继的结点称为"分支结点"(或非终端结点) 除了根结点外,每个结点都有且仅有一个前驱 每个结点可以有0个或者多个后继 属性描述: 结点的层次(深度
阅读全文