![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
燕雀于鸿鹄
不积跬步无以至千里
不积小流无以成江海
展开
-
四、数据结构之栈的单栈存储结构
**由于单栈的代码实现比较简单,所以没有加注释,不理解的地方请参照线性表的顺序存储结构的实现**#include <stdio.h>#include <stdlib.h>#define OK 1#define ERROR 0#define MAXSIZE 10typedef int Status;typedef int ElemType;typedef...原创 2019-06-05 11:21:28 · 242 阅读 · 0 评论 -
十九、数据结构之二叉查找树
这里不做解释了,可以看前面的二叉树的实现,思想大同小异,具体可以看代码去理解#include <stdio.h>#include <stdlib.h>//定义二叉查找树的存储结构typedef struct TreeNode{ int data; //数据域 struct TreeNode *leftChild; //左孩子指针域 struct ...原创 2019-06-21 11:23:38 · 114 阅读 · 0 评论 -
十三、数据结构之二叉树的存储结构(基础二叉树)
由于二叉树的基础思想还是比较简单的,所以这里不做过多的讲解,只需要记住一个二叉树每个节点的度(子结点数)至多为2,至少为0。满二叉树就是除叶结点外,每个结点的度都为2;完全二叉树就是与同深度的满二叉树的节点顺序是一致的就是完全二叉树。这里直接上图,对于二叉树的遍历方式,这里不做讲解,后面会有单独文章进行说明。1、满二叉树2、完全二叉树 其实二叉树的...原创 2019-06-12 10:06:10 · 303 阅读 · 2 评论 -
十四、数据结构之链表
#include <stdio.h>#include <stdlib.h>//数据类型typedef int ElemType;//节点存储结构, 头结点用来存储长度typedef struct Node{ ElemType data; struct Node *next; }Node;typedef Node *PtrToNode;//节点指...原创 2019-06-18 10:14:18 · 113 阅读 · 0 评论 -
二十五、数据结构之二项队列(堆序森林)
太晚了,不想码字,其实这个思想真的很精妙,对于数字的应用,逻辑思路真的很巧妙清晰,如果有时间真的可以看看(数据结构与算法分析)这本书的二项队列的思路讲解,但是我的代码已经写的很清晰了,对于d-堆永远都离不开合并操作,所以不管出于什么样的设计思想,合并永远是重中之重,而二项队列相比较前两种实现,他的合并操作完全可以达到常数时间,所以有必要研究通他的设计思想。我的合并操作的注释很清晰,完全可以理解...原创 2019-07-08 00:14:57 · 128 阅读 · 0 评论 -
二十一、数据结构之散列(哈希表) - 分离链接法,开放定值法,再散列
针对于Hash表其实就是将键值经过一系列计算(Horner运算法则,不懂得请自行百度),在规定大小(可进行再散列,这里只是做讲解)的散列表中进行存储,散列表的长度一般为素数(具体原因个人也没理解,但如果用非素数,那需要进行散列的key将集中在与之本身Mod值为0的数)。而对于进行通过Hash算法得到的值也许会有冲突,这种情况并且经常发生,所以下面讲解解决冲突的两种方法,对于哈希表本身的...原创 2019-07-02 21:42:40 · 785 阅读 · 0 评论 -
二十、数据结构之VAL树
所谓的VAL树就是左子树与右子树的深度差最大为一,关于他的单旋转和双旋转其实就是为了保持平衡,每棵树的平衡都要维持左小右大的原则,如果我前面写的文章你都看懂了,这篇文章只需要看代码就可以理解,所以这里不做讲解了,直接上代码了,解开main函数注释即可看到效果!#include <stdio.h>#include <stdlib.h>//定义Val树的存储...原创 2019-06-24 22:17:58 · 1647 阅读 · 0 评论 -
二十二、数据结构之优先队列(二叉堆)-- 基础知识
所谓的优先队列通俗点讲就是,当我们处理一些事情的时候我们通常会先处理比较重要或者需要处理的时间比较短的事情,而这个优先队列实现的就是这个思想,我们通过采取二叉搜索树的方式来进行实现二叉堆(数组实现)。学过二叉树的我们一定应该知道在一颗二叉树中一个结点X(根节点除外)所在的位置为i,那么他的父节点所在位置为i/2,左孩子为i*2,有孩子为i*2+1。由此性质,我们完全可以用数组来实现。 如...原创 2019-07-04 16:28:53 · 155 阅读 · 0 评论 -
二十三、数据结构之左式堆
不想进行过多的解释。左式堆:顾名思义,左树一定大于右树,就这一个定理,时刻满足这个定理就是坐式堆,再加个从上到下,权重逐渐递减就是个优先坐式堆。手动滑稽。。。。。。。。。。。。。直接上代码了,自己研究吧,蛮简单的,手动狗头。。。。。。。。。。#include <stdio.h>#include <stdlib.h>//定义数据类型typedef int...原创 2019-07-06 14:03:05 · 187 阅读 · 0 评论 -
二十四、数据结构之斜堆
和左式堆性质差不过,只不过去掉了NPL的限制,每对右子树进行一次操作将交换一下该结点的两儿子。#include <stdio.h>#include <stdlib.h>//定义数据类型typedef int ElemType;typedef struct HeapNode *PriorityQueue;PriorityQueue Merge(Priorit...原创 2019-07-06 15:19:36 · 175 阅读 · 0 评论 -
十二、数据结构之树的存储结构(基础讲解)
本次主要介绍树的三种基础存储结构:双亲表示法,孩子表示法(孩子双亲表示法),孩子兄弟表示法(孩子兄弟双亲表示法)树的结构图 双亲表示法 :由图可以看出B、C的双亲是A,D的双亲也就是B以此类推,我们便可以设计出一种存储结构,用一个双亲指针来指向双亲节点,比如B、C的结构里就可以存储A的指针位置,和他们的数据,这样我们很快就能找到某个节点的双亲了,但这样想查找孩子节点就会很...原创 2019-06-11 12:32:40 · 1384 阅读 · 0 评论 -
三、数据结构之线性表的静态单链表存储结构(游标链表)
该代码方法的实现的参数请参考第一个文章#include <stdio.h>#define OK 1#define ERROR 0#define MAXSIZE 100typedef int Status;typedef int ElemType;//定义静态链表的存储结构typedef struct { ElemType data; int cursor; ...原创 2019-06-04 16:50:48 · 196 阅读 · 0 评论 -
五、数据结构之栈的共享栈存储结构
**关于该代码的理解,请参照下图**![出自大话数据结构](https://img-blog.csdnimg.cn/20190605142444294.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3gyMzU3MTE=,size_16...原创 2019-06-05 14:26:07 · 390 阅读 · 0 评论 -
六、数据结构之栈的链栈的存储结构
**方法的具体实现思想请看下图,以及查看第二个文章的单链表的实现,思想大同小异**#include <stdio.h>#include <stdlib.h>#define OK 0#define ERROR 1typedef int Status;typedef int ElemType;//定义链栈节点的存储结构typedef struct St...原创 2019-06-05 16:21:12 · 209 阅读 · 0 评论 -
七、数据结构之用栈实现四则运算表达式求值(逆波兰)
该计算器的实现只针对于一位数的整数,没有对浮点数和多位整数进行方法实现,该程序只是进行阐述逆波兰求值法的核心思想,对于栈的操作可以参考第四个文章(单栈的存储结构)。操作步骤:1、将中缀表达式(3+4)转换为后缀表达式(34+)- 转换过程:2、对后缀表达式进行运算- 运算过程 :#include <stdio.h>#define OK 1#define ERRO...原创 2019-06-06 13:01:48 · 491 阅读 · 0 评论 -
八、数据结构之队列的循环队列的存储结构
由于循环队列的实现思想比较简单,这里不做过多的阐述,可以参考第一个文章的顺序链表存储结构的实现#include <stdio.h>#define OK 1#define ERROR 0#define MAXSIZE 30typedef int ElemType;typedef int Status;//循环队列的存储结构typedef struct{ Elem...原创 2019-06-06 15:20:46 · 802 阅读 · 0 评论 -
九、数据结构之队列的链队列的存储结构
代码的具体实现请参考第二个文章的单链表存储结构和第八章的循环队列存储结构,实现思想近似#include <stdio.h>#include <stdlib.h>#define OK 1#define ERROR 0typedef int Status;typedef int ElemType;typedef struct QueueNode{ Ele...原创 2019-06-06 16:24:34 · 152 阅读 · 0 评论 -
一、数据结构之线性表的顺序存储结构
直接上代码#include <stdio.h>#include <stdlib.h>#define OK 1 //成功 #define ERROR 0 //失败#define MAX_SIZE 20 //存储空间初始分配大小typedef int Status; //状态 用OK 和 ERROR来表示typedef int ElemType; //存储的数...原创 2019-06-03 13:33:46 · 222 阅读 · 0 评论 -
二、数据结构之线性表的单链表存储结构
代码的方法的参数和第一个的顺序存储的方法参数大同小异,如有疑问,请参考第一个文章#include <stdio.h>#include <stdlib.h>#include <time.h>#define OK 1#define ERROR 0typedef int ElemType;typedef int Status;//线性表的单链表...原创 2019-06-03 16:16:13 · 159 阅读 · 0 评论 -
十八、后缀表达式转二叉树
后缀表达式的问题请看第七篇文章,二叉树的问题请看第十三篇文章 ,这里直接上代码#include <stdio.h>#include <stdlib.h>typedef enum Child{ leftChild, rightChild}Child;//定义二叉树节点存储结构typedef struct TreeNode{ char dat...原创 2019-06-19 16:08:38 · 1139 阅读 · 1 评论 -
二十九、图论算法(图的存储结构)
图常用的存储结构设计方式为 :邻接矩阵(二维数组),邻接表(链表)其实两种的存储结构可以参考二叉树的存储结构设计方式,思想大同小异,所有的数据结构都是由链表构成的,只不过时思想的升华而已这里代码给出了一种十字链表法,对于有向图的一种合理的实现方式,并且个人感觉没必要纠结与图的存储结构该去怎么实现,最主要的时贯通思想。#include <stdio.h>#inclu...原创 2019-07-23 22:23:08 · 133 阅读 · 0 评论