
数据结构与算法
qq_40191710
这个作者很懒,什么都没留下…
展开
-
第六章-树(2)二叉树
二叉树:是另一种树形结构,它的特点是每个结点至多只有两棵子树,(即二叉树中不存在度大于2的结点),并且。二叉树的子树有左右之分,其次序不能任意颠倒。1、各种类型的二叉树:2、二叉树的各种性质: 性质一:在二叉树的第 i 层上至多有2^(i-1)个结点(i>=1). 性质二:深度为 k 的二叉树至多有 (2^k )-1个结点(k>=1) 性质三:对任何一棵二叉树T,如果其终端结点数为 n...原创 2018-03-04 19:14:47 · 368 阅读 · 0 评论 -
第六章-树(1)
1、树的抽象数据类型定义:树的结构定义是一个递归定义,即在树的定义中又用到树的概念,它道出了树的固有特性。树的基本术语:自己百度。森林的定义: 是m(m>=0)棵互不相交的树的集合...原创 2018-03-04 15:48:13 · 138 阅读 · 0 评论 -
第七章-图(6)有向无环图及其应用-拓扑排序
1、有向无环图:无环的有向图有向无环图是描述含有公共子式的表达式的有效工具。例如下述表达式 ((a+b)*(b*(c+d))+(c+d)*e)*((c+d)*e)可以用第六章讨论的二叉树表示:如图7.22所示仔细观察该表达式,可发现有一些相同的子表达式,如(c+d)和(c+d)*e等,在二叉树中,它们也重复出现。若利用有向无环图,则可实现对相同子式的共享,从而节省存储空间。例如图 7.23 所示...原创 2018-03-17 15:45:03 · 3081 阅读 · 0 评论 -
第七章-图(5)图的最小生成树(Kruskal和Prim算法)
--------------------------------------------------------------------------------------------------------------------------------代码:(C语言实现)#include<stdio.h>#include<stdlib.h>#include<l...原创 2018-03-15 21:49:02 · 270 阅读 · 0 评论 -
第六章-树(7)回溯法与树的遍历
题目一:幂集问题(组合问题) (参见《数据结构》(严蔚敏)) 求含N个元素的集合的幂集。 如对于集合A={1,2,3},则A的幂集为 p(A)={{1,2,3},{1,2},{1,3},{1},{2,3},{2},{3},Φ}幂集的每个元素是一个集合,它或是空集,或含集合A中的一个元素,或含A中的两个元素,或者等于集合A。反之,集合A中的每一个元素,它只有两种状态:属于幂...转载 2018-03-08 15:39:13 · 486 阅读 · 0 评论 -
第六章-树(6)赫夫曼树
赫夫曼编码的基本思想是:概率大的字符用短码,概率小的用长码。 由于赫夫曼树的WPL最小,说明编码所需的比特数最小。 这种编码已经广泛应用于网络通信中。 构建赫夫曼树和赫夫曼编码:出现的字符:',','a','b','c','d','e','f','g'...原创 2018-03-08 12:53:01 · 275 阅读 · 0 评论 -
第五章 数组和广义表(3)三元组矩阵转换
#include<stdio.h>#include<stdlib.h>//宏定义#define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 12typedef int Status;typedef int ElemType;typedef stru...原创 2018-02-08 13:46:39 · 433 阅读 · 0 评论 -
第七章-图(1)图的定义
顶点:在图中的数据元素通常称为顶点以为G1有向图为例子: G1=(V1,{A1})其中:V1={v1,v2,v3,v4} A1={ <v1,v2> , <v1,v3> , <v3,v4> , <v4,v1> }以为G2无向图为例子: G1=(V2,{ E2 })其中:V1={v1,v2,v3,v4} ...原创 2018-03-11 22:11:13 · 439 阅读 · 0 评论 -
第七章-图(2)图的存储结构
1、顺序存储结构:由于图的结构比较复杂,任意两个顶点直接之间都有可能存在联系,因此无法以数据元素在存储区中的物理位置来表示元素之间的关系(但可以借助数组的数据类型表示元素之间的关系)2、链式存储结构:可用多重链表: (1)邻接表: ...原创 2018-03-11 23:48:52 · 672 阅读 · 0 评论 -
AVL树(平衡二叉树)
让你掌握AVL树(平衡二叉树)前言:本文不适合 给一组数据15分钟就能实现AVL的插入和删除操作的大牛(也请大牛不要打击小菜)本文适合,对avl还不了解,还没有亲自实现avl的插入和删除操作的同学ps,你在嘲笑楼主的题目时,你已证明了自己正在嘲笑自己的智商。我们要善于征服陌生的事物。你如果有半个小时时间就心无杂念的开始吧,建议那些读10分钟文章就心燥还是关闭浏览器吧。文章结构:什么是二叉排序树(b...转载 2018-04-23 13:45:10 · 239 阅读 · 0 评论 -
红黑树(一)之 原理和算法详细介绍
R-B Tree简介 R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。红黑树的特性:(1)每个节点或者是黑色,或者是红色。(2)根节点是黑色。(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!](4)如果一个节点是...转载 2018-04-23 13:41:42 · 157 阅读 · 2 评论 -
第九章:查找(2)次优查找树的递归算法
--------------------------------------------------------------------------------------------------------------------------------代码:#include<stdio.h>#include<math.h>#include<stdlib.h&g...原创 2018-03-20 12:45:13 · 329 阅读 · 0 评论 -
第九章:查找(1)静态查找表
1、抽象数据类型静态查找表的定义为:2、顺序表的查找:以顺序表或线性表表示静态查找表。//数据元素定义typedef struct{ KeyType key; //关键字域// .. //其他域}SElemType;//----------静态查找表的顺序存储结构-------typedef struct{ SElemType *e...原创 2018-03-19 17:56:31 · 1079 阅读 · 0 评论 -
第六章-树(3)二叉树的存储结构
1、顺序存储结构//------二叉树的顺序存储表示-----------#define MAX_TREE_SIZE 100 //二叉树的最大结点数typedef TElemType SqBiTree[MAX_TREE_SIZE]; // 0 号单元存储根结点SqBiTree bt; //6.6中的(a)顺序存储结构 对应 b6...原创 2018-03-04 23:02:55 · 842 阅读 · 0 评论 -
第七章-图(3)图的遍历
1、和树的遍历类似,我们希望从图中某一顶点出发遍历访问图中其余顶点,且使每一个顶点仅被访问一次。分为深度优先与广度优先:--------------------------------------------------------------------------------------------------------------------------------代码:#include&...原创 2018-03-11 23:51:54 · 282 阅读 · 0 评论 -
第七章-图(6)有向无环图及其应用-关键路径
AOV-网:若用有向图表示一个工程,在图中用顶点表示活动,用弧表示活动的时间的优先关系。 Vi 必须先于 Vj 进行。则这样的有向图叫做顶点表示活动的网络。AOE-网:如果在无环的带权有向图中,用有向边表示一个工程中的活动,用边上的权值表示活动持续时间,用顶点表示事件,则这样的有向图叫做用边表示活动的网络。(AOE-网可用来估算工程的完成时间)图7.29是一个假想的有11项活动的 AOE-网。其中...原创 2018-03-18 16:02:35 · 508 阅读 · 0 评论 -
第五章 数组和广义表(2)稀疏矩阵的存储
原创 2018-02-08 13:47:09 · 190 阅读 · 0 评论 -
第五章 数组和广义表(4)三元组矩阵转换(转)
#include <stdio.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 100 typedef int Status; typedef float ElemType; typedef struct{//三元组结构 ...转载 2018-02-08 13:44:20 · 296 阅读 · 0 评论 -
第六章-树(5)树和森林
1、树如何转为二叉树 stept1:将树中同一节点的兄弟相连; (加线) stept2:保留节点的最左孩子连线,其他孩子的连线都删掉; (抹线) stept3:将同一孩子的连线绕左孩子旋转 45 度角; (旋转)2、树和森林的存储方式: 树的三种常用存储方式: 1)双亲表示法缺点:求节点的孩子需要遍历整个结构。 2)孩子表示法 3)孩子兄弟表示法森林的遍历:...原创 2018-03-07 16:06:03 · 334 阅读 · 0 评论 -
第四章(2)串的堆分配的所有操作
第四章(2)串的堆分配的所有操作利用堆来存储顺序表:#include#include#include//--------ADT String 的表示与实现-------//1、初始化字符串//Status InitString(HString *T) //2、生成一个其值等于串常量 chars 的串 T//Status StrAssign(HStr原创 2018-02-01 23:09:44 · 1366 阅读 · 0 评论 -
第四章(1)串
计算机上的非数值处理对象基本上是字符串数据:串的定义: 是由零个或者多个字符组成的有限序列,是数据元素为单个字符的特殊线性表。 一般定义为: s=‘a1 a2 a3 a4 .... an’ (n>=0)空串和空白串的区别: 空串是指长度为零的串,空白串是指包含一个多个空白字符的字符串。-------原创 2018-01-31 16:55:41 · 810 阅读 · 0 评论 -
第二章:线性表-顺序存储(2)
第二章:线性表(2)-----------------------------------------------------------------------------------------------------------------------------------以下代码经过VC编译器:文件名的后缀是 .cpp#include原创 2018-01-14 00:36:56 · 200 阅读 · 0 评论 -
第二章线性表-顺序存储
第二章:线性表(1)1、一个线性表时n个数据元素的有限序列。 2、一个数据元素可以由若干个数据项组成,这种情况常把数据元素成为记录:每个学生为一个记录,它由学号、姓名、性别、年龄、班级组成:(注意:同一线性表中的元素必须具有相同的属性。)3、抽象数据类型线性表如下: ADT List{ 数据对象:D={ ai | ai原创 2018-01-12 16:05:44 · 333 阅读 · 1 评论 -
第三章-栈(2)举例应用
表达式求值:表达式求值:先建立一个文件: 文件名为 stack.cpp//头文件 #include"stdio.h" #include"stdlib.h"#include"malloc.h" //宏定义 #define STACK_INIT_SIZE 100 //存储空间初始分配量 #define STACKINCREMENT 10原创 2018-01-22 12:25:11 · 285 阅读 · 0 评论 -
hanoi塔的完美解释
问题: 假设有三个分别命名为X、Y和Z的塔座,在塔座X上插有n个直径大小各不相同、依小到大编号为1,2,…,n的圆盘。现要求将X轴上的n个圆盘移至塔座Z上并仍按同样顺序叠排,圆盘移动时必须遵循下列规则: 1)每次只能移动一个圆盘; 2)圆盘可以插在X、Y和Z中的任一塔座上; 3)任何时刻都不能将一个较大的圆盘压在较小的圆盘之上。 如何实现移动圆盘的操作呢?当n=1时,问题比较简单,转载 2018-01-21 14:28:24 · 562 阅读 · 0 评论 -
2.对链表的删除操作
代码部分:原创 2018-01-02 23:36:45 · 232 阅读 · 0 评论 -
第三章-队列(1)
//1.构造一个空队列QStatus InitQueue(LinkQueue &Q){ //构造一个空队列Q Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode)); if(!Q.front) exit(OVERFLOW); //存储分配失败 Q.front->next=NULL; //Q.fron原创 2018-01-26 15:03:43 · 396 阅读 · 0 评论 -
第六章-树(4)线索二叉树
1、三张图片展览: 以这种结点结构构成的二叉树链表作为二叉树的存储结构,叫做线索链表,其中指向结点前驱后后继的指针,叫做线索。加上线索的二叉树称之为线索二叉树。可知,在中序线索二叉树上遍历二叉树,岁则时间复杂度亦为 O(n),但常数因子要比...转载 2018-03-06 22:57:25 · 200 阅读 · 0 评论 -
第五章 数组和广义表(1)
1、数组的定义: 数组:由一组名字相同,下表不同的标量构成 (注意:本章所讨论的数组与高级语言中的数组有所区别:高级语言中的数组的顺序结构;而本章的数组既可以顺序的,也可以是链式结构,用户可根据需要选择。)2、数组的结构: (1)数组中各元素具有统一的类型 (2)数组元素的下标一般具有固定的上界和下界,即数组一旦被定义,它的原创 2018-02-06 22:23:21 · 477 阅读 · 0 评论 -
第五章-广义表(1)
广义表与线性表的区别和联系: 广义表中元素既可以是原子类型,也可以是列表; 当每个元素都为原子且类型相同时,就是线性表。特点: 1)有次序性 一个直接前驱和一个直接后继 2)有长度 =表中元素个数 3)有深度 =表中括号的重数 4)可递归 自己可以作为自己的子表 5)可共享 可以为其他广义表所共享...原创 2018-02-10 16:42:23 · 245 阅读 · 0 评论 -
数组和广义表(5)行逻辑链接顺序表
行逻辑链接的顺序表:例如:M.data[1]表示矩阵元(1,1,3)只要和N.data[1]表示的矩阵元(1,1,2)想乘; 而M.data[2]表示矩阵元(1,1,5)则不需要和N中任何元素相乘。因为N.data中没有i为4的元素。---------------------------------------------------------------------------...原创 2018-02-10 15:57:34 · 1416 阅读 · 0 评论 -
第三章-栈(2)举例应用
栈的举例应用--------------------------------------------------------------------------------------------------------------------------------栈的举例应用1:--------------------------------------------------原创 2018-01-19 23:30:56 · 527 阅读 · 0 评论 -
第四章(4)串的模式 KMP算法
#include#include#include//宏定义#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define OVERFLOW -2#define STR_INIT_SIZE 100#define STRINCREMENT 10typedef int Status;//-----串的堆分配存储原创 2018-02-03 16:46:35 · 199 阅读 · 0 评论 -
第三章-队列(2)循环队列
循环队列-------------------------------------------------------------------------------------------------------------------和顺序栈相类似,在队列的顺序储存结构中,除了用一组地址连续的存储单元依次存放从队头到队列尾的元素之外,还需设两个指针 Q.front 和 Q.rear 分原创 2018-01-27 13:42:35 · 401 阅读 · 0 评论 -
第三章-栈(一)
栈------------------------------------------------------------------------------------------------1、定义 : 限定只能在表的一端进行插入和删除运算的线性表(只能在栈顶操作)表尾端。2、逻辑结构: 与线性表相同,仍为一对一关系3、存储结构: 只能在栈顶运算,且访问结点时依照后进先原创 2018-01-18 20:16:11 · 267 阅读 · 0 评论 -
1.动态建立链表
链表的概述:一个节点包含两部分: 1、用户需要的实际数据。 2、下一个节点的地址。我们可以设计一个这样的结构体:struct student{ int num; float score; struct stuent * next; //next 是成员名,是指针类型,它指向下一个struct student 的地址 };原创 2018-01-02 22:45:16 · 2397 阅读 · 4 评论