数据结构
文章平均质量分 82
新西兰做的饭
Here we go!
展开
-
PTA——1075 链表元素分类、1105 链表合并、1110 区块反转
这三道题换汤不换药,总结下来就是首先利用结构体存储节点,利用map存储地址,将地址下标映射到结点。然后用利用头结点的地址将链表串起来,存进vector中,这里每个节点的前后关系就是他们在数组中的位置。所以存进vector时不用考虑结点的next值了,这只在得到链表时有用。最后根据题意按照输出次序将结点存进另一个vector中,由于链表中结点前后关系就是链表的关系,因此遍历这个vector即可,遍历即按照链表顺序输出。原创 2024-03-20 21:04:35 · 212 阅读 · 0 评论 -
探究如何计算哈希表查找成功、失败时的平均查找长度(附实例)
对于查找成功时的平均查找长度,书上有明确的定义:而题目设定条件都是在等概率下查找,所以ASL=(C0+C1+...+Cn)*1/n.这就说明了查找成功是针对关键字查找的,最后除以关键字的总个数。我们来看一道书上的例题:构建出来的哈希表有八个元素,针对这八个元素的比较次数,得出ASLsuccess=(1+1+1+2+1+2+1+2)/8=11/8.而查找失败时的平均查找长度,却是针对位置的查找。为什么呢,因为如果我们要查找表中的元素,那么一定可以找到,所以讨论查找失败就没有意义。我们讨论查找失原创 2021-06-06 19:37:35 · 26353 阅读 · 15 评论 -
图文详解最小生成树算法并利用并查集实现Kruskal算法(C++实现)
最小生成树Prim算法Kruskal算法最小生成树即在连通图中用n-1条边连接全部n个顶点,生成无环路的树形结构,并使得连接边的权值之和最小。我们介绍最小生成树的经典算法:普里姆算法和克鲁斯卡尔算法。Prim算法普里姆算法从图的一个顶点出发,将此顶点归入集合,并不断选取图中其他顶点到已添加顶点的最短路径,将添加的最短路径归入最小生成树中,待所有顶点归入集合,即生成n个顶点n-1条边的最小生成树。//针对图的邻接矩阵的普里姆算法void MiniSpanTree_Prim(MGraph G){原创 2021-05-14 20:10:43 · 761 阅读 · 2 评论 -
图文详解图的表示及DFS和BFS
#define MAXVEX 100#define INFINITY 65535//邻接矩阵typedef struct { char vexs[MAXVEX]; int arc[MAXVEX][MAXVEX]; int numVerTexes,numEdges;}MGraph;//建立无向网图的邻接矩阵void CreateMGraph(MGraph *G){ int x,y,w; cout<<"输入顶点数和边数:"<<endl; cin>>原创 2021-05-10 10:40:12 · 2164 阅读 · 0 评论 -
详解哈夫曼树和哈夫曼编码
哈哈夫曼树一、初始化函数init()二、合并操作unite()三、查询树根函数find()四、改进后的合并操作unite()五、改进后的find()六、判断是否属于同一集合same()并查集的复杂度并查集的实现代码哈夫曼树并查集是一种用来管理元素分组情况的数据结构,可以高效地进行查询、合并操作,但无法进行分割操作。1.查询元素a和元素b是否属于同一组2.合并元素a和元素b所在的组并查集使用树形结构实现,但不是二叉树。在并查集中,无需关注元素的兄弟、父亲是谁或树的结构如何,只需要关注元.原创 2021-04-25 20:46:30 · 8122 阅读 · 0 评论 -
图文详解并查集
并查集并查集一、初始化函数init()二、合并操作unite()三、查询树根函数find()四、改进后的find()五、判断是否属于同一集合same()总结测试代码及运行实例并查集并查集是一种用来管理元素分组情况的数据结构,可以高效地进行查询、合并操作,但无法进行分割操作。1.查询元素a和元素b是否属于同一组2.合并元素a和元素b所在的组并查集使用树形结构实现,但不是二叉树。在并查集中,无需关注元素的兄弟、父亲是谁或树的结构如何,只需要关注元素的祖先。一、初始化函数init().原创 2021-03-24 18:28:12 · 603 阅读 · 0 评论 -
详解KMP算法
字符串与KMP算法串的存储结构一、BF算法二、KMP模式匹配算法三、KMP模式匹配算法改进总结测试代码及运行实例串的存储结构#define MAXLEN 255typedef struct{ char ch[MAXLEN+1]; int length;}SString;结构由一个字符数组和代表长度的length组成一、BF算法目的:从S中匹配子串T,并返回第一个匹配字符的位置实现:这是最简单直观的模式匹配算法①从两个串逐个字符相匹配,如果相同继续匹配,不同则S串指针退.原创 2021-02-24 19:53:47 · 773 阅读 · 2 评论 -
详解线索二叉树
线索二叉树的操作线索二叉树的存储结构一、先序遍历建立二叉链表二、二叉树的遍历先序遍历中序遍历后序遍历三、复制二叉树四、计算二叉树的结点个数五、计算二叉树高六、清空二叉树总结测试代码及运行实例线索二叉树的存储结构二叉树的存储结构typedef struct BiTNode{ char data; struct BiTNode* lchild,*rchild;}BiTNode,*BiTree;结点由存放数据元素的数据域和存放放左右孩子结点地址的指针域组成线索二叉树的存储结构type.原创 2021-02-05 16:58:24 · 7192 阅读 · 3 评论 -
图文详解二叉树
二叉链表二叉树的存储结构一、先序遍历建立二叉链表二、二叉树的遍历先序遍历中序遍历后序遍历三、复制二叉树四、计算二叉树的结点个数五、计算二叉树高六、清空二叉树总结测试代码及运行实例二叉树的存储结构typedef struct BiTNode{ char data; struct BiTNode* lchild,*rchild;}BiTNode,*BiTree;结点由存放数据元素的数据域和存放放左右孩子结点地址的指针域组成一、先序遍历建立二叉链表目的:以先序遍历的方法建立二叉链.原创 2021-02-03 20:31:40 · 1217 阅读 · 0 评论 -
冒泡排序、选择排序、插入排序
简单排序排序用到的结构与函数冒泡排序最简单的冒泡排序真正的冒泡排序优化的冒泡排序选择排序简单选择排序直接插入排序总结测试所用函数测试代码及运行实例排序用到的结构与函数提供一个排序所用的顺序表结构#define MAXSIZE 10typedef struct{ int r[MAXSIZE+1]; int length;}SqList;排序常用的两个数交换,我们将它写成函数void swap(SqList *L,int i,int j){ int temp=L->r[i];.原创 2021-01-26 18:00:58 · 108 阅读 · 0 评论 -
队列的链式存储结构
链队列队列的存储结构一、队列的初始化操作二、队列的相关函数判断队列是否为空获得队列的长度三、获得获得队列头元素四、队列的插入五、队列的删除六、清空队列七、销毁队列总结测试代码及运行实例队列的存储结构队列是只允许在一端进行插入操作,在另一端进行删除操作的线性表,即“先进先出”typedef struct QNode{ int data; struct QNode *next;}QNode,*QueuePtr;typedef struct{ QueuePtr front,rear;}L.原创 2021-01-19 16:53:38 · 1023 阅读 · 0 评论 -
使用静态数组创建循环队列
使用静态数组创建循环队列循环队列的存储结构一、队列的初始化操作二、队列的相关函数判断队列是否为空判断队列是否已满获得队列的长度三、获得队列头元素四、队列的插入五、队列元素的删除总结测试代码及运行实例循环队列的存储结构队列是只允许在一端进行插入操作,在另一端进行删除操作的线性表,即“先进先出”typedef struct { int data[MAXSIZE]; int front; int rear;}SqQueue;节点由存放数据元素的数据域和存放队头元素和第一个空闲位置的指针组.原创 2021-01-18 17:03:28 · 210 阅读 · 0 评论 -
栈的链式存储结构
链栈栈的存储结构一、栈的初始化操作二、栈的相关函数判断栈是否为空获得栈的长度三、获得栈顶元素四、栈的插入五、出栈操作六、清空栈七、销毁栈总结测试代码及运行实例栈的存储结构栈是限定仅在表尾进行插入和删除操作的线性表typedef struct StackNode{ int data; struct StackNode *next;}StackNode,*LinkStackPtr;typedef struct LinkStack{ LinkStackPtr top; int count.原创 2021-01-16 18:38:03 · 394 阅读 · 0 评论 -
栈的顺序存储结构
栈的操作栈的存储结构一、栈的初始化操作二、栈的销毁三、栈的清空四、单链表的删除五、单链表的整表删除六、显示链表中的数据总结测试代码及运行实例栈的存储结构栈是限定仅在表尾进行插入和删除操作的线性表typedef struct{ int data[MAXSIZE]; int top;}SqStack;节点由存放数据元素的数据域和存放栈顶元素的指针组成同线性表,元素具有相同的类型,相邻元素具有前驱和后继关系。一、栈的初始化操作目的:初始化栈实现:top=-1代表此时栈为空.原创 2021-01-15 16:09:02 · 291 阅读 · 0 评论 -
线性表之双向链表
双向链表的操作双向链表存储结构一、双向链表的创建尾插法二、单链表的读取三、双向链表的插入四、单链表的删除五、单链表的整表删除六、显示链表中的数据总结测试代码及运行实例双向链表存储结构typedef struct DulNode{ int data; struct DulNode *prior; struct DulNode *next;}DulNode, *DuLinkList;结点由存放数据元素的数据域和存放前驱结点和后继结点地址的两个指针组成一、双向链表的创建在前面单链.原创 2021-01-11 17:21:31 · 154 阅读 · 0 评论 -
线性表之静态链表
静态链表的操作静态链表存储结构一、静态链表的初始化二、静态链表的插入实现Malloc_SLL()函数三、静态链表的读取四、静态链表的删除实现Free_SSL()函数五、静态链表的整表删除六、显示静态链表中的数据总结测试代码及运行实例静态链表存储结构typedef struct { int data; int cur;}Component,StaticLinkList[MAXSIZE];用数组描述链表叫做静态链表结构由存放数据元素的数据域data和存放后继节点地址的cur作为游标组成.原创 2021-01-09 18:59:27 · 277 阅读 · 0 评论 -
线性表之单链表
文章目录头文件一、单链表的创建头插法尾插法二、使用步骤1.引入库2.读入数据总结头文件提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。一、单链表的创建头插法void CreateListHead(LinkList &L,int n){ LinkList p; L=(LinkList)malloc(sizeof(Node)); (L)->next=NULL;.原创 2021-01-07 16:11:35 · 224 阅读 · 0 评论