![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 52
perry0528
这个作者很懒,什么都没留下…
展开
-
c语言实现带头结点和尾节点的双向链表
c语言实现带头结点和尾节点的双向链表接口参考严蔚敏老师的数据结构编译环境:linux数据结构 :typedef struct LNode { Item data; struct LNode *prior; struct LNode *next;}Link;typedef struct { Link *head, *tail; in...原创 2018-08-23 17:52:33 · 1442 阅读 · 2 评论 -
数据结构 || 图中两点的最短路径(迪杰斯特拉算法)
从某个顶点出发到其他所有各点的最短路径迪杰斯特拉算法数据结构采用有向图的邻接矩阵存储。算法基本思想:依路径长度递增的次序来求各个路径。长度最短的路径一定是一条从源点直达的弧。其他长度的路径求原点到其最短路径一定是以下两种情况之一:源点到此点一条直通弧。前面已经求得的最短路径中的其他顶点中到它的直通弧。代码实现:#include <iostream>#inc...原创 2019-01-24 13:22:27 · 2949 阅读 · 0 评论 -
数据结构 || 图中两点间的最短路径(弗洛伊德算法)
原理讲解参考:https://www.cnblogs.com/wangyuliang/p/9216365.html代码实现:#include <iostream>#include <limits.h>#include <string>#include <vector>#include <iomanip>using names...原创 2019-01-25 15:47:09 · 1430 阅读 · 0 评论 -
数据结构 || 图深度优先搜索遍历以及求两点间的简单路径
本文图的存储结构是基于无向图的邻接多重表实现的图的深度优先搜索的递归遍历void DFS(AMLGraph G, int i) { cout << G.adjmulist[i].data << endl; visit[i] = visited; for (int w = FirstAdjVex(G, i); w >= 0; w = NextAdjVex(G,...原创 2019-01-21 16:43:23 · 3678 阅读 · 4 评论 -
数据结构 || 图的广度优先搜索遍历以及求两点间的最短路径
图的广度优先搜索遍历:存储的数据结构为无向图的多重邻接表类似于树的层序遍历,依次按照路径为1,2,3…进行遍历,因而每次要获得一个节点然后得到这点的未经访问的邻近点后再将此点抛弃,因此我们用队列这一结构。void BFSReverse(AMLGraph G) { queue<int> a; for(int i = 0; i < G.vexnum; ++i) { ...原创 2019-01-21 21:49:59 · 3747 阅读 · 0 评论 -
图的最小生成树 || Prim算法和Kruskal算法的c++实现
Prim算法和Kruskal都是典型的贪心算法,也就是在求解最小生成树时,我们总是不从全局考虑,而每次仅仅是考虑局部最优解。下面的算法都基于无向图的邻接多重表。Prim算法:算法描述:基本步骤:设R是有n个定点的对称连通关系。1)选取R的一个定点v1,设V = {v1}, E={}。2)选取与vj ∈ V邻接的V的最近邻元vi, 并且边(vi, vj)不与E中元素形成回路。添加vi到...原创 2019-01-23 01:42:25 · 1767 阅读 · 0 评论 -
数据结构 || 求连通图的关节点
对图的存储结构基于无向图的邻接多重表。关节点和重连通图:假若在删去顶点v以及v相关联的各边之后,将图的一个连通分量分割成两个或两个以上的连通分量,则称顶点v为该图的一个关节点。如果没有关节点的连通图则称为重连通图(双连通图)。算法实现:1. 方法一:最简单也是最直接的算法是,删除一个点然后判断连通性,如果删除此点,图不再连通,则此点是关节点,反之不是关节点(图的连通性一般通过深搜来判定...原创 2019-01-23 15:06:21 · 2945 阅读 · 0 评论 -
数据结构 || 次优查找树的c++实现
参考严蔚敏老师的数据结构(c语言版),并用c++加以实现//// main.cpp// Search_Optimal//// Created by peiyu wang on 2019/3/19.// Copyright © 2019 peiyu wang. All rights reserved.//#include <iostream>#includ...原创 2019-03-19 23:18:05 · 262 阅读 · 0 评论 -
动态查找表 || 二叉排序树的c++实现
二叉排序树的特性:若左子树不空,左子树上所有结点的值均小于它的根结点值。若右子树不空,右子树上所有结点的值均大于它的根结点值。左右子树分别为二叉排序树。删除算法:被删除的结点是叶子结点。被删除的结点只有左子树或有右子树。被删除的结点既有左子树又有右子树。对于第三种我们选择删除结点的左子树的最右结点。查找性能的分析:(平均查找长度)不同树的平均查找长度不同,即使是相同序...原创 2019-03-21 17:02:05 · 408 阅读 · 0 评论 -
动态查找树 || 平衡二叉树的c++实现
在满足二叉查找树的特性上,还要满足左右子树深度之差绝对值不大于1。构造方法:插入过程中,采用平衡旋转技术获得。原创 2019-03-22 12:58:31 · 336 阅读 · 0 评论 -
动态查找树 || B-树的c++实现
B-树是一棵平衡的多路查找树,它在文件系统中很有用。一棵m阶的B-树或为空树或为满足以下特性的m叉树:树中的每个结点至多有m棵子树。若根结点不是叶子结点,则至少有两颗子树。除根结点外的所有非终端结点至少有Ceiling(m/2)(向上取整)棵子树所有的非终端结点中包含下列信息数据:(n, A0, K1, A1, K2, A2, … , Kn, An)n表示有n个结点...原创 2019-03-26 13:04:32 · 466 阅读 · 0 评论 -
算法 || c++实现各种经典内部排序
经典的排序算法如下:插入排序直接插入排序折半插入排序希尔排序交换排序冒泡排序鸡尾酒排序(双向冒泡)快速排序选择排序简单选择排序堆排序归并排序基数排序 / 桶排序代码实现://// main.cpp// sort//// Created by peiyu wang on 2019/3/28.// Copyright © 2019 ...原创 2019-03-29 18:28:09 · 190 阅读 · 0 评论 -
动态查找树 || 键树的c++实现(双链树)
概念:键树又称为数字查找树,树中的每个结点中不是包含一个或几个关键字,而是只含有组成关键字的符号。例如,若关键字为数值,则结点中只包含一个数位;若关键字为单词,则结点中只包含一个字母字符。这种树会给某种类型关键字的表的查找带来方便。举例:{CAI,CAO,LI,LAN,CHA,CHANG,WEN,CHAO,YUN,YANG,LONG,WANG,ZHAO,LIU,WU,CHEN}我们先针对首...原创 2019-03-27 15:06:58 · 482 阅读 · 1 评论 -
外部排序 || c++实现多路归并的败者树算法
算法概念:如果我们要对大规模文件进行排序,不能一次装入内存中,只能从外存一次次读取分别排序,而外存的IO时间复杂度很高,所以我们应该尽量减少针对外存读写的次数。如果我们只是简单地进行二路归并的话,归并路数越少归并的次数就越多,每次归并都要进行一次IO操作。所以我们考虑尽量进行多路归并,而多路归并不同于简单地二次归并只需对两组数进行指针移动归并,为了降低多路归并中归并的时间复杂度。我们考虑使用...原创 2019-04-01 17:33:30 · 1691 阅读 · 1 评论 -
C || 图的四种存储结构实现
1. 数组表示法:#include &amp;amp;lt;stdio.h&amp;amp;gt;#include &amp;amp;lt;limits.h&amp;amp;gt;#define INFINITY INT_MAX#define Maxvex 100typedef struct graph { int vexs[Maxvex+1]; //顶点 int AdjMatrix[Maxvex+1][Maxvex+1];原创 2018-09-21 21:00:26 · 2206 阅读 · 0 评论 -
c语言实现循环队列
接口参考严蔚敏老师的数据结构难点 开始队列为空时front = rear = 0,队列满时如果也是front = rear,则很难判断空满两个状态,因此队列空出一个空间专门用来放尾指针。循环队列如何达到循环状态,接口函数实现的过程最好画图来形象的展示,实现后一个个调试,因为一不小心就可能出错误。实现环境:linux下面是实现过程数据结构:typedef struct {...原创 2018-08-24 00:09:32 · 10383 阅读 · 1 评论 -
c语言实现顺序表
c语言实现顺序表实现方法参考严蔚敏老师的数据结构教材采用动态分配内存的方法list.h/* list.h--顺序表接口 */#ifndef LIST_H_#define LIST_H_#include <stdbool.h>#define LIST_INIT_SIZE 2#define LIST_INCREMENT 10typedef int ...原创 2018-08-21 19:37:54 · 502 阅读 · 0 评论 -
栈的动态顺序存储实现(Stack)
接口参考严蔚敏老师的数据结构课本实现环境为linuxStack.h// ======== ADT the representation of the STACK(Sequential Storage) ======== //#ifndef STACK_H_#define STACK_H_#include <stdbool.h>#define STACK_IN...原创 2018-08-24 21:44:58 · 712 阅读 · 0 评论 -
c语言实现string(字符串)& 二级指针的用法
接口参考严蔚敏老师的数据结构课本这个类bug de了好长时间,在于二级指针的使用(C语言学的不好用指针真的伤)实现环境为linux下面先讲一点关于二级指针的知识点void change(char** x){ *x = "bbb";}int main(void){ char *y = "aaa"; change(&y); print...原创 2018-08-25 15:15:13 · 2238 阅读 · 0 评论 -
C | 二叉树的创建销毁遍历,计算叶子数,深度以及对二叉树进行拷贝等基本操作
二叉树是一块比较重要的知识点,而且是从线性结构到树形结构的一个跨越,建议大家动手实现以下。树是递归算法最好的应用,当然不嫌麻烦的话也可以用栈。前序遍历初始化树:void InitializeTree(Tree *T) { char ch; scanf("%c",&amp;ch); if (ch == '*') { (*T) = NULL...原创 2018-09-08 01:26:17 · 330 阅读 · 0 评论 -
C 线索化二叉树的实现
n个结点一定有n+1个指针域是空的如果结点左指针为空则作为前驱指针若右指针为空则作为后继指针指向线索序列的前序后继指针即为线索同时为了区分指针是作为线索指向前驱后继还是指向子树,我们约定设置一个标志位,若为0指向子树,为1作为线索每个节点除原来的数据域以及左右子孩子节点指针外,还需要增加两个标志域 lchild L.Tag data R.Tag rchil...原创 2018-09-08 01:39:03 · 198 阅读 · 0 评论 -
C++ | Tree的实现(适用于一般的树)
其实主要是采用类似c这种面向过程的语言的接口实现办法,用c++更多只是为了调用队列,栈等一些接口网上资料大部分树的实现都是二叉树,而实际常见的树一般是普通的树所以我们要学会通过二叉树的思想来转换到普通的树来使用本文采用的存储结构为(孩子-兄弟)结点表示法,也叫二叉链表,有不懂得地方可以查看我的另外一篇关于树的存储结构的文章本文重点讨论三个函数,其他实现函数都大同小异 求树的深度打印树...原创 2018-09-11 11:32:13 · 26016 阅读 · 1 评论 -
树的常见的三种链表存储结构
1.双亲表示法:// - - - - - 树的双亲表存储表示 - - - - -#define MAX_TREE_SIZE 100typedef struct PTNode { //结点结构 ElemType data; int parent; //双亲位置域}PTNode;typedef struct { //树结构 PTNode nodes[MAX_TR...原创 2018-09-08 11:16:11 · 7849 阅读 · 2 评论 -
C//C++ 二叉树的遍历递归与非递归的实现
有句话说得好,一切递归皆可用栈来实现。关键是理解好递归以及栈的基本原理。这里以最为典型的中序遍历为例,其他的实现类似直接调用c++STL中的stack树的知识点用到大量的递归知识,建议大家不太理解的去找一下典型二叉树的例子然后一一步的去遍历尝试一下算法数据结构:typedef char ElemType;typedef struct BiTNode { ElemT...原创 2018-09-06 01:24:47 · 274 阅读 · 0 评论 -
c//c++二叉树的层序遍历
层序遍历即从一棵树的每一层由上到下开始依次从左到右遍历输出从上面一句话的原理不难看出这就是一个FIFO算法,也就是一个基本的先进先出队列,因此我们考虑调用STL的queue数据结构:typedef struct BiTNode { ElemType data; struct BiTNode *lchild, *rchild;} Node, *Tree;算法:...原创 2018-09-06 01:32:36 · 3319 阅读 · 0 评论 -
稀疏矩阵的实现
主要实现的难点在于稀疏矩阵的转置以及矩阵乘法。对用到的数据结构定义不懂的可参考严蔚敏老师的数据结构书籍,这里讲严老师讲的两种数据结构三元组结构 和行逻辑结构 整合到一起。稀疏矩阵是线性结构中比较难的一块知识点,不懂的建议去b站看看严老师的视频。实现环境:linux数据结构typedef struct { int i, j; //行坐标,列坐标 Elem e...原创 2018-09-03 23:42:34 · 695 阅读 · 0 评论 -
C || 哈夫曼树及哈夫曼编码的实现
代码带有注释,不详细解释,检测采用严蔚敏老师数据结构的一个范例HuffmanCode.h#ifndef _HUFFMANCODE_H_#define _HUFFMANCODE_H_#include <stdbool.h>typedef struct { unsigned int weight; unsigned int parent, lchild, rchild;...原创 2018-09-18 11:26:16 · 718 阅读 · 0 评论 -
C || 图的遍历
图的深度遍历和广度遍历基于的数据结构是图的邻接表结构,详细可以看上一章节(图的存储结构)深度遍历:bool visited[100]; //用于表示节点是否被访问的标志位void DFS(Graph G, VertexType v) { visited[v] = 1; printf("%d\n",v); ArcNode *e = G.vertices[v].first; w...原创 2018-09-25 21:17:37 · 931 阅读 · 0 评论 -
查找 || 哈希表的c++实现
哈希表的构造方法:直接定址法数字分析法平方取中法折叠法除留余数法随机数法处理冲突的方法:开放地址法线性探测再散列二次探测再散列伪随机探测再散列再哈希法链地址法建立一个公共溢出区装填因子:平均查找长度ASL跟哈希表构造方法和处理冲突的方法都有关。一般情况下,处理冲突方法相同的哈希表,其平均查找长度依赖于哈希表的装填因子:α=表中填入的记录数哈希表的长度...原创 2019-03-28 17:17:49 · 1034 阅读 · 0 评论