数据结构
文章平均质量分 59
tyustli
不抛弃,不放弃
展开
-
《数据结构》-图的遍历
图的遍历从已给的连通图中某一个顶点出发,沿着一些边访遍图中所有的顶点,且每个顶点仅被访问一次,就叫做图的遍历,它是图的基本运算图的特点:图中可能存在回路,且图的任一顶点都可能与其它顶点相通,在访问完某个顶点之后可能会沿着某些边又回到了曾经访问过的节点避免重复的方法:设置一个辅助的数组 visit[n],用来标记每个被访问的顶点。初始状态 visit[i] 为 0顶点 i 被访问,改 visit[i] 为 1, 防止被多次访问。深度优先遍历(DFS)Depth First Search方法原创 2021-08-13 22:21:54 · 251 阅读 · 0 评论 -
《数据结构》-图的邻接多重表表示法(六)
邻接多重表邻接多重表是无向图的另一种存储链式存储结构。存储结构顶点data:存储和顶点相关的信息firstedge:第一条依附于该顶点的边边ivex:该边依附的顶点jvex:该边依附的顶点ilink:指向下一条依附于 ivex 顶点的边jlink:指向下一条依附于 jvex 顶点的边info:指向和边相关的各种信息的指针域mark:标志域,可以用来标记该边是否搜索过示例如下无向图它的邻接多重表为存储表示代码实现...原创 2021-08-11 08:57:20 · 213 阅读 · 0 评论 -
《数据结构》-图的十字链表表示法(五)
十字链表表示法邻接表的缺点十字链表十字链表(Orthogonal List) 是有向图的另一种链式存储结构,可以看成是将有向图的邻接表和逆邻接表结合起来形成的一种链表。有向图中的每一条弧对应十字链表中的一个弧结点,同时有向图中的每个顶点在十字链表中对应有一个结点,叫做顶点结点。其顶点结点的结构为data:顶点的数据firstin:第一条入弧firstout:第一条出弧tailvex:尾域,指向弧尾顶点在图中的位置headvex:头域,指向弧头顶点在图中的位置hlink:指向原创 2021-08-11 08:43:19 · 2553 阅读 · 0 评论 -
《数据结构》-图的邻接表表示法(四)
邻接表的定义肝不动了睡觉去了。。。邻接表的优缺点邻接表的存储结构邻接表的代码实现原创 2021-08-04 22:36:25 · 9397 阅读 · 0 评论 -
《数据结构》-图的邻接矩阵表示法(三)
图的存储结构图的逻辑结构是:多对多 图的存储方式数组(邻接矩阵)表示法定义图没有顺序存储结构,但可以借助二维数组来表示元素间的关系建立一个顶点表(记录各个顶点信息),和一个邻接矩阵(表示各个顶点之间的关系)设图 A = (V,E),有 n 个顶点,则顶点表的为i012…n-1Vexs[i]V1V2V3…Vn图的邻接矩阵是一个二维数组 A.arcs[n][n] 定义为:A.arcs[i][j] = 1原创 2021-08-02 22:48:18 · 6628 阅读 · 0 评论 -
《数据结构》-图的六度空间理论(二)
六度空间理论六度空间 理论又被称作六度分隔(six degree of separation) 理论。这个理论可以通俗的阐述为:你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过六个人你就能够认识任何一个陌生人。又被称作小世界理论在程序上,把六度空间理论中的人际关系网络抽象成一个无向图G。用图G中的一个顶点表示一个人,两个人认识与否代表这两个人的顶点之间是否有一条边来表示。从任一顶点出发用广度优先方法对图进行遍历,统计所有路径长度不超过7的顶点。...原创 2021-08-01 22:21:18 · 1041 阅读 · 0 评论 -
《数据结构》-图的基本概念(一)
图的基本概念和术语图:G = (V,E) 即 Graph = (Vertex,Edge)V:顶点(数据元素)的有穷非空集合;E:边的有穷集合。无向图:每条边都是无方向的有向图:每条边都是有方向的 有向图和无向图完全图:任意两个点都有一条边相连完全图稀疏图:有很少边或弧的图(e<nlogn)稠密图:有较多边或弧的图网:边/弧带权的图邻接:有边/弧相连的两个顶点之间的关系存在(Vi,Vj),则称Vi和Vj互为邻接点;存在<Vi,Vj>原创 2021-08-01 22:01:45 · 342 阅读 · 1 评论 -
《数据结构》-哈夫曼编码的程序实现(五)
存储结构代码实现原创 2021-07-27 08:14:10 · 637 阅读 · 0 评论 -
《数据结构》-哈夫曼编码的基本概念(四)
哈夫曼编码原创 2021-07-27 08:13:02 · 1205 阅读 · 0 评论 -
《数据结构》-哈夫曼树的构造示例(三)
存储结构采用顺序存储结构–一维结构数组哈夫曼树中共有 2n-1 个结点,不使用 0 下标,数组大小为 2n。结点类型定义typedef struct{ int weight; int parent,lchild,rchild;}HTNode,*HuffmanTree;哈夫曼树中结点下标iweightparentlchrch1234……2n-1...原创 2021-07-26 22:10:40 · 1392 阅读 · 0 评论 -
《数据结构》-哈夫曼树的构造算法(二)
哈夫曼算法如何构造哈夫曼树,哈夫曼在 1952 年最早给出了一个带有一般规律的算法,俗称哈夫曼算法,根据 n 个给定的权值{w1 w2 w3 …} 构成 n 棵二叉树的森林F = {T1 T2 T3…} 其中 Ti 只有一个带权为 Wi 的根结点构造森林全是根。在 F 中选取两颗根结点的权值最小的树作为左右子树,构造一棵新的二叉树,且新设置的二叉树的根结点的权值为其左右子树根结点的权值之和。选用两小造新树在 F 中删除这两颗树,同时将得到的二叉树加入森林中。删除两小添新人原创 2021-07-26 21:29:01 · 1843 阅读 · 0 评论 -
《数据结构》-哈夫曼树的基本概念(一)
哈夫曼树原创 2021-07-26 09:11:08 · 716 阅读 · 0 评论 -
《数据结构》-树和森林的遍历
树的遍历树只有三种遍历方式先根遍历后根遍历层次遍历先根遍历若树不空,则先访问根节点,然后依次先根遍历各棵子树。后根遍历若树不空,则先以此后根遍历各棵子树,然后访问根节点层次遍历若树不空,则自上而下自左至右访问树中每个结点森林的遍历...原创 2021-07-25 22:27:39 · 367 阅读 · 0 评论 -
《数据结构》-二叉树、树和森林之间的转换
森林和二叉树的转换由于二叉树和树都可以用二叉链表作为存储结构,则以二叉链表为媒介可导出树与二叉树之间的一个对应关系,也就是说,给定一棵树,可以找到唯一的一棵树二叉树与之对应,将树转换成二叉树加线:在兄弟之间加一连线抹线:对每个结点,除了其左孩子外,去除其与其余孩子之间的关系旋转:以树的根结点为轴心,将整树顺时针旋转 45 度树变二叉树:兄弟相连留长子将二叉树转换成树加线:若 p 结点是双亲结点的左孩子则将 p 的右孩子,右孩子的右孩子…沿分支找到所有的右孩子,都与 p 的双亲用线连起原创 2021-07-25 22:19:12 · 3038 阅读 · 1 评论 -
《数据结构》-树(孩子兄弟表示法)
孩子兄弟表示法或者叫二叉树表示法,二叉链表表示法等实现:用二叉链表作为树的存储结构,链表中每个结点的两个指针域分别指向其 第一个孩子结点 和 下一个兄弟结点C 语言类型描述typedef struct CSNode{ ElemType data; struct CSNode *firstchild, *nextsibling;}CSNode, *CSTree;存储示例...原创 2021-07-25 21:52:35 · 2484 阅读 · 0 评论 -
《数据结构》-树(孩子链表表示法)
孩子链表定义把每个结点的孩子结点排列起来,看成是一个线性表,且以单链表作为存储结构,则 n 个结点又 n 个孩子链表(叶子的孩子链表为空表)。而 n 个头指针又组成一个线性表,为了便于查找,可采用顺序存储结构。示例对应的树为C语言类型描述孩子结点结构typedef struct CTNode{ int child; struct CTNode *next;}*ChildPtr;双亲结点结构typedef struct{ TElemType data; ChildPtr f原创 2021-07-25 21:38:00 · 8104 阅读 · 3 评论 -
《数据结构》-树(双亲表示法)
树的存储结构双亲表示法对应的树为特点找双亲容易,找孩子难C 语言的类型描述/* 结点结构 */struct PTNode{ TElemType data; int parent; // 双亲位置域};/* 树结构 */struct PTree{ PTNode nodes[MAX_TREE_SIZE]; int r; // 根结点的位置 int n; // 结点个数};源码实现...原创 2021-07-25 19:52:00 · 1241 阅读 · 1 评论 -
《数据结构》-线索二叉树
线索二叉树的定义线索二叉树的程序实现原创 2021-07-22 21:05:32 · 340 阅读 · 0 评论 -
《数据结构》-二叉树(三叉链表实现)
main.c/* * Change Logs: * Date Author Notes * 2021-07-21 tyustli first version */#include "tree.h"void visitT(TElemType e){ printf("%d ", e);}int main(int argc, char *argv[]){ printf("this bitree\r\n"); in原创 2021-07-21 08:48:30 · 6913 阅读 · 0 评论 -
《数据结构》-二叉树(二叉链表实现)
main.c/* * Change Logs: * Date Author Notes * 2021-07-20 tyustli first version */#include "tree.h"void visitT(TElemType e){ printf("%d ", e);}int main(int argc, char *argv[]){ printf("this bitree\r\n"); in原创 2021-07-20 08:58:50 · 9224 阅读 · 0 评论 -
《数据结构》-二叉树(静态数组实现)
main.c/* * Change Logs: * Date Author Notes * 2021-07-01 tyustli first version */#include "tree.h"void visit(TElemType e){ printf("%d ", e);}int main(int argc, char *argv){ printf("this is tree sample \r\n");原创 2021-07-07 08:57:51 · 900 阅读 · 0 评论 -
《数据结构》-顺序数组的实现和表示
#include <string.h>#include <malloc.h>#include <stdio.h>#include <stdlib.h>#include <stdarg.h> // 标准头文件,提供宏va_start,va_arg和va_end,用于存取变长参数表#include <math.h>...原创 2020-02-24 21:57:22 · 606 阅读 · 0 评论 -
《数据结构》-算法4.6 KMP算法
int Index_KMP(SString S, SString T, int pos, int next[]){ // 利用模式串T的next函数求T在主串S中第pos个字符之后的位置的KMP算法。 // 其中,T非空,1≤pos≤StrLength(S)。算法4.6 int i = pos, j = 1; while (i <= S[0] &&...原创 2020-02-23 14:48:46 · 493 阅读 · 0 评论 -
《数据结构》-算法4.5 BF算法
int Index(SString S, SString T, int pos){ // 返回子串T在主串S中第pos个字符之后的位置。若不存在,则函数值为0。 // 其中,T非空,1≤pos≤StrLength(S)。算法4.5 int i, j; if (1 <= pos && pos <= S[0]) { i =...原创 2020-02-23 14:42:44 · 450 阅读 · 0 评论 -
《数据结构》-链串的表示和实现
#include <string.h>#include <malloc.h>#include <stdio.h>#include <stdlib.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1typedef int ...原创 2020-02-23 14:35:33 · 290 阅读 · 0 评论 -
《数据结构》-堆串的表示和实现
#include <string.h>#include <malloc.h>#include <stdio.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1typedef int Status; // Status是函数的类型,其...原创 2020-02-23 14:04:57 · 445 阅读 · 0 评论 -
《数据结构》-顺序串的表示和实现
#include <string.h>#include <malloc.h>#include <stdio.h>#include <stdlib.h>// 函数结果状态代码#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1...原创 2020-02-22 21:42:14 · 604 阅读 · 0 评论 -
《数据结构》顺序队列的表示和实现(循环队列)
队列是仅在表尾部进行插入操作,在表头进行删除操作的线性表。表尾即 an 端,称为队尾,表头即 a1 端,称为队头。它是一种先进先出 (FIFO) 的线性表存储结构队列的存储结构分为链式队列和顺序队列 (常用循环顺序队列)原创 2020-02-14 19:01:36 · 606 阅读 · 1 评论 -
《数据结构》链式队列的表示和实现
#include <string.h>#include <malloc.h> // malloc()等#include <stdio.h> // EOF(=^Z或F6),NULL#include <stdlib.h> // atoi()// 函数结果状态代码#define TRUE 1#define FALSE 0#define ...原创 2020-02-14 18:46:38 · 469 阅读 · 0 评论 -
《数据结构》链栈的表示和实现
#include <string.h>#include <malloc.h>#include <stdio.h>#include <stdlib.h>// 函数结果状态代码#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1...原创 2020-02-14 18:21:51 · 504 阅读 · 0 评论 -
《数据结构》-顺序栈的表示和实现
#include <string.h>#include <malloc.h>#include <stdio.h>#include <stdlib.h>// 函数结果状态代码#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1...原创 2020-02-14 15:05:29 · 822 阅读 · 0 评论 -
《数据结构》-循环单链表的表示及实现(尾指针)
#include <string.h>#include <malloc.h>#include <stdio.h>#include <stdlib.h>// 函数结果状态代码#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1...原创 2020-02-12 17:16:31 · 1478 阅读 · 0 评论 -
《数据结构》-静态链表的表示及实现
#include <string.h>#include <malloc.h>#include <stdio.h>#include <stdlib.h>// 函数结果状态代码#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1...原创 2020-02-12 15:00:04 · 160 阅读 · 0 评论 -
《数据结构》-线性表的链式表示及实现(带有头节点)
#include <string.h>#include <malloc.h>#include <stdio.h>#include <stdlib.h>// 函数结果状态代码#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1...原创 2020-02-08 23:27:36 · 285 阅读 · 0 评论 -
《数据结构与算法》-线性表的顺序表示和实现
#include <malloc.h>#include <stdio.h>#include <stdlib.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1typedef int Status;typedef int Boolea...原创 2020-02-04 20:14:56 · 580 阅读 · 0 评论