![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
文章平均质量分 66
数据结构c语言从0基础学完整整一本数据结构的内容
爱睡觉的小馨
Java基础、Java高级、HTML与CSS、JavaScript、数据结构、MYSQL、oracle、android、C++、SSH、离散数学、高数、英语、python
展开
-
数据结构6-1:什么是图
图图的应用:社交网络村庄路线什么是图抽象数据类型定义图的常见术语怎么在程序中表示一个图?邻接矩阵优点(邻接点、度)缺点练习邻接表图的邻接矩阵表示法代码图的邻接表表示法代码图的应用:社交网络在这个社交网络中,每个人占了一个顶点,顶点和顶点之间的边代表着这两个顶点之间的某种关系。六度空间理论:任何两个人之间,可以通过不超过6个人来认识。村庄路线什么是图图是一种多对多的关系图之所以强大是因为图将线性表和树都包含在内了。线性关系表示的是1对1的关系。树表示的是1对多的关系。线性表和原创 2021-12-14 09:44:40 · 744 阅读 · 0 评论 -
数据结构5-4:白白专场——堆中的路径——C语言实现
堆是按照一定顺序组织的完全二叉树,所以堆的表示一种最直接了当也是很完美的一种表示就是用数组来表示。#define MAXN 1001#define MINH -10001int H[MAXN], size;void Create (){ size = 0; H[0] = MINH; /*设置“岗哨”*/ }void Insert ( int X ){ /* 将X插入H。这里省略检查堆是否已满的代码 */ int i; for (i=++size; H[i/2]...原创 2021-12-14 09:44:05 · 197 阅读 · 0 评论 -
数据结构5-3:集合及运算
集合及运算集合的表示集合的表示原创 2021-12-14 09:43:42 · 291 阅读 · 0 评论 -
数据结构5-2:哈夫曼树(最优二叉树)与哈夫曼编码
哈夫曼树(最优二叉树)与哈夫曼编码什么是哈夫曼树(Huffman Tree)?带权路径长度(WPL)、哈夫曼树(最优二叉树)的定义哈夫曼树的构造哈夫曼树的特点哈夫曼编码什么是哈夫曼树(Huffman Tree)?编码这个问题是计算机里面最最基础的一个,也是满核心的一个问题,像我们编码我们有很多种方式,比方说我们的整数我们用二进制的形式0101存在我们计算机里面。那么我们有一种编码呢是叫等长码,每个ASCII字符它可以编码,用7位来进行编码。如果有一篇文章他由若干个字符所构成的,每个abcd两者都用7位原创 2021-12-14 09:42:52 · 1885 阅读 · 0 评论 -
数据结构5-1:堆(heap)
说明:堆不是堆栈堆(heap)什么是堆?什么是堆?原创 2021-12-14 09:42:30 · 229 阅读 · 0 评论 -
数据结构4-4:线性结构之习题选讲Reversing Linked List——链表反转
Reversing Linked List——链表反转重申:什么是抽象的链表?单链表的逆转:测试数据重申:什么是抽象的链表?链表是一个抽象的数据结构,链表中间的节点需要两个阈来存,一块是有地方来存他的基础数据,另外一个很重要的特征是需要有一块地方来存指针,这个指针指向下一个结点。一个抽象的指针指的就是地址,任何一种形式去存了下一个结点的位置,这个东西就叫做指针。单链表的逆转:要求:给你一个单链表的头节点,再给你一个整数K,然后要求你把每K个节点(不足k个不需要逆转)逆转一下,然后最后返回给原创 2021-12-14 09:42:04 · 245 阅读 · 0 评论 -
数据结构4-2:平衡二叉树(AVL树)
平衡二叉树什么是平衡二叉树?平衡二叉树的调整。右右旋转:(RR旋转、右旋转)左左旋转:(LL旋转、右旋转)左右旋转:(LR旋转、左-右双旋)右左旋转:(RL旋转、右-左旋转)练习训练:讨论:是否可以用左右子树结点数差来衡量二叉树是否平衡?代码:什么是平衡二叉树?上面的三个搜索树的表示方法都是按照“字典顺序”比较大小。不同的结点插入顺序会形成不同的二叉搜索树,那么不同的二叉搜索树的查找效率是不同的,所谓的查找效率我们就称之为一个衡量指标叫平均查找长度平均查找长度ASL越小越好。(左右子树的结点个数分原创 2021-12-14 09:40:46 · 752 阅读 · 0 评论 -
数据结构4-3:白白专场——判别是否是同一棵二叉搜索树的问题(C语言实现)
判别是否是同一棵三叉搜索树的问题题意理解求解思路搜索树表示程序框架搭建:如何建搜索树?如何判别两个序列的搜索树是一致的?题意理解求解思路采用上面的第三种实现方法去求解:搜索树表示typedef struct TreeNode *Tree; struct TreeNode { int v; Tree Left, Right; int flag;};Left、Right使用链表的形式来表示我们的树。用v来表示这个结点的基本信息。flag阈用来判别一个序列是不是跟原创 2021-12-14 09:41:19 · 174 阅读 · 0 评论 -
数据结构4-1:二叉搜索树
二叉搜索树什么是二叉搜索树?二叉搜索树操作的特别函数:二叉搜索树的查找操作:Find查找最大和最小元素:FindMin、FindMax二叉搜索树的插入:Insert二叉搜索树的删除:Delete什么是二叉搜索树?静态查找就是我们要找的元素是不动的。也就是说在一个集合上主要做的是find操作,而没有delete一个映射的这种操作发生。静态查找我们讲过的一个例子:二分查找就很nice另外一种查找就是我们要找的这个对象的集合呢本身会动态的发生变化,也就是说经常要发生插入删除,除了查找之外还有插入删除操作发原创 2021-12-13 14:00:17 · 254 阅读 · 0 评论 -
数据结构3-4:白白专场——树的同构(C语言实现)
树的同构:题意理解:求解思路:二叉树表示:链表结构的表示方法:数组的最基本表示方法:把二叉树看作完全二叉树结构数组的表示方法:静态链表程序框架搭建:如何建二叉树:如何判别两二叉树同构:题意理解:我们可以从上图中看出,第一个是同构的原因是因为仅仅只变换了每个结点的左右子树的顺序,不影响树的同构。第二个图不是同构的原因是,原本B的左右子树分别是D、E,但是通过变换后B只有子树G,很显然结构发生了变化,所以不属于树的同构。上面这种方式是按照一定的顺序进行编号的,每个字母后面的两个数字分别表示该字母原创 2021-12-13 13:59:51 · 254 阅读 · 0 评论 -
数据结构3-3:二叉树的遍历
先序遍历:中序遍历:后序遍历:我们上面的先序遍历、中序遍历、后序遍历建立的基础都是递归。是在递归的基础上面我们根据递归的一些原理,一些规则,我们知道是这样的一个执行过程,世实际上递归的实现是用堆栈完成的。后面我们会学习,怎么借助堆栈把递归变成非递归。二叉树的中序遍历非递归遍历算法:二叉树的先序遍历非递归遍历算法:层次遍历:实现步骤:先把A放入队列,然后之后就开始做循环了,此时队列中元素:A1、取出第一个元素A,放入它的左右孩子结点:B、C,此时队列中元素:B、原创 2021-12-13 13:59:18 · 266 阅读 · 0 评论 -
数据结构3-2:二叉树及存储结构
二叉树的定义:斜二叉树:往一边倒,要么只有左儿子没有右儿子,要么只有右儿子没有左儿子。这样的一种二叉树实际上就相当于是个链表。完美二叉树(满二叉树):除了叶子结点都有左右孩子。 完全二叉树:完全二叉树就是允许满二叉树的叶子结点缺失,但缺失的叶子结点一定是最后面的,因为要保证缺失后的二叉树的编号和缺失前同一位置的的满二叉树的编号是一致的。看一个完全二叉树:再看一个非完全二叉树:因为编号8后面缺少了一个叶子结点,所以原本编号为10和11的位置变成了编号为9和10的位置,编号位置发生了变化,原创 2021-12-13 13:58:52 · 311 阅读 · 0 评论 -
数据结构3-1:树与树的表示
什么是树?像我们平时使用的U盘,里面的目录和子目录之间的关系就是有层次关系的树。顺序查找:(哨兵的设立)说明:下标为0的位置不是我们要查找的数据,而是我们所设立的哨兵,我们要查找的数据是在Element[1]~Element[10]之间查找的。建立哨兵还有一个作用就是防止数组下标越界,也就是不需要添加i>0的条件了。当从Element[10]开始找,找到Element[1],如果还没有找到,再往上找就碰到了Element,此时设置的哨兵就拦截了,停止查找。这样也防止了每一次循环就要去判原创 2021-12-13 13:58:28 · 196 阅读 · 0 评论 -
数据结构训练专场:2-5: 一元多项式的 加法与乘法运算
原创 2021-12-13 13:18:32 · 97 阅读 · 0 评论 -
数据结构2-4:应用实例:多项式加法运算
多项式加法运算怎么在计算机中怎么实现?多项式加法运算步骤分析:最开始,p1、p2分别指向两个多项式的第一个结点:p1所指向的指数5>p2指向的指数4,把这一项复制到结果多项式中,然后p1指针向后挪:p1指向的指数与p2指向的指数相等,那么系数相加后,再放入结果多项式中,然后p1、p2指针都向后挪:以此类推,得到下面的结果:说明:1、rear一开始开辟的是一个临时的“空的”结点,作为多项式链表头。2、紧接着的front=rear是用front存储rear这个表头.原创 2021-12-12 09:22:21 · 838 阅读 · 0 评论 -
数据结构2-3:队列
rear、front相当于记录元素位置的下标。队列为空的时候:加入一个工作到队列中:再加入一个工作到队列中:再加入一个工作到队列中:删除队列中的一个工作:说明:front值为-1,因为没有删除,所以front一直保持不动,所以实际上这个front是指向队列的头一个元素的再前面一个。也就是头一个元素是0,再前面一个-1,这个时候front是-1,然后我们删除队列中的一个工作(先进先出),那么队列头就在下标为1的位置,所以front指向头一个元素再前面的一个位置,即下标为0的位置...原创 2021-12-12 09:05:54 · 965 阅读 · 0 评论 -
数据结构2-2:堆栈
S.Top1=-1表示的是左边栈顶为空的时候的下标S.Top2=MaxSize表示的是左边栈顶为空的时候的下标原创 2021-12-12 09:05:22 · 100 阅读 · 0 评论 -
数据结构2-1:数据表及其实现
多项式的表示:对于这2001个分量,我们可以看到,只有2项是非0的,其余全是0,这会造成很大的空间浪费。而且做加法的时候,怎么也要做一个循环,从0开始一直做到2000,实际上还有很多是在加无效的0,所以虽然方便但是也有很大的问题。只表示非0项——结构数组:这样的一种方法显然是用指数、系数构成的结构存储在数组里面,来表示非零项。这种方法是一种节省空间的方法,而且操作效率也不算差。同时表示非零项的这种方法,不一定非要用数组来做,也可以用另外一种方法:链表上面是按照指数系数从大到原创 2021-12-11 20:19:59 · 507 阅读 · 0 评论 -
数据结构1-3-应用实例:最大子列和问题(分而治之、在线处理)
我去,我看完这个分而治之,感觉好神奇啊,但是我不是很懂,所以学习这个地方的时候要好好的品,上网去查资料,那下面讲一下我的理解:就是在这8个数中间进行分开,左边的再依次分开,右边的依次分开:就是先把整个分成一半,左边继续分一半,再继续分一半,右边继续分一半,再继续分一半。分完之后:的左边的最大子列和就是4,而右边是一个负数,所以返回一个0;的左边的最大子列和就是5,而右边是一个负数,所以返回一个0;所以出现了这样一个结果。的左边是一个负数,所以返回一个0,而右边的最大子列和为2的左...原创 2021-12-11 20:18:18 · 410 阅读 · 0 评论 -
数据结构1-2:什么是算法
什么是算法怎么理解描述应不依赖于任何一种计算机语 言以及具体的实现手段?什么是好的算法如果空间复杂度太大的话,程序可能直接爆掉了。如果时间复杂度很大的话,可能等到世界末日都等不出结果。当n很大的时候,它的空间是有限的,那么空间用爆了,那么它就非正常退出了。pow()这个方法是计算累乘的方法,需要做i-1次乘法,加上这一次跟前面的系数相乘,所以每一次循环里面都执行的是i次乘法。平均复杂度肯定是比最坏情况复杂度是要小的,但是我们一般都是分析最坏情况复杂度,因为平均复杂度的原创 2021-12-11 20:17:54 · 336 阅读 · 0 评论 -
数据结构1-1:什么是数据结构
数据结构定义数据结构是没有统一定义的。看不懂没关系,刚开始学,等到学完再回过来头看就好啦。数据结构和算法是经常挨在一起的东西。例1:如何在书架上摆放图书这个问题问的很不科学,因为没有说给的书架是什么样子的,书架可以是:所以,当我问你一个数据怎么组织的时候,就是跟这个数据的规模有关系的。不一样的规模的问题,它处理起来的难度就是不一样的。方法2插入一本新书:《阿Q正传》,那就要在a开头的找到位置,后面的书往后移,如果书很多,这还是很难。这个例子想说明的是:解决问题方法的效率,跟原创 2021-12-06 16:45:14 · 338 阅读 · 0 评论 -
数据结构——二叉排序树(BST)+图文精讲
二叉排序树(简称BST) 又称二叉查找(搜索)树,其定义为:二叉排序树或者是空树,或者是满足如下性质(BST性质)的二叉树:①: 若它的左子树非空,则左子树上所有结点值(指关键字值)均小于根结点值;②: 若它的右子树非空,则右子树上所有结点值均大于根结点值;③: 左、右子树本身又各是一棵二叉排序树。注意:二叉排序树中没有相同关键字的结点。二叉排序树的中序遍历序列有什么特点?答:中序遍历二叉排序树会得到一个升序的序列。二叉排序树的结点类型如下:typedef struct node {原创 2020-08-17 16:01:35 · 6819 阅读 · 5 评论 -
数据结构——线性表的查找——索引顺序表的分块查找
索引存储结构=数据表 + 索引表索引表中的每一项称为索引项,索引项的一般形式是:(关键字,地址)关键字唯一标识一个结点,地址作为指向该关键字对应结点的指针,也可以是相对地址。①:首先你找到索引表就可以在某一区域进行查找。②:根据索引表的地址再去数据表中去查。...原创 2020-08-17 16:01:17 · 964 阅读 · 0 评论 -
数据结构——线性表的查找——二分查找的判定树方法
二分查找过程可用二叉树来描述: 这样的二叉树称为判定树。外部结点即查找失败对应的结点,是虚拟的n个关键字:内部结点为n个,外部结点为n+1个怎么画判定树?例如给出11个数据元素的有序表:(2,3,10,15,20,25,28,29,30,35,40)怎么求成功时与不成功时的平均查找长度?注意:必须是已经排好序的才能够有判定树(因为利用到了二叉排序)当n比较大时,将判定树看成内部结点的总数为n=2h-1、高度为h=log2(n+1)的满二叉树(高度h不计外部结点)。树中第i层上的记录个数原创 2020-08-17 16:01:00 · 9697 阅读 · 6 评论 -
数据结构——查找基本概念
查找的概念:数据的组织和查找是大多数应用程序的核心,而查找是所有数据处理中最基本、最常用的操作。查找表(Search Table): 相同类型的数据元素(对象)组成的集合,每个元素通常由若干数据项构成。关键字(Key,码): 数据元素中某个(或几个)数据项的值,它可以标识一个数据元素。若关键字能唯一标识一个数据元素,则关键字称为主关键字;将能标识若干个数据元素的关键字称为次关键字。查找/检索(Searching): 根据给定的K值,在查找表中确定一个关键字等于给定值的记录或数据元素。◆ 查找表中存原创 2020-08-17 16:00:38 · 981 阅读 · 0 评论 -
数据结构之 不基于比较的排序算法——基数排序
对于基于比较的排序算法 我们知道有插入排序、交换排序、选择排序、归并排序等那么现在介绍一种比较简单的不需要比较的排序算法——基数排序基数排序的概念:基数r:对于二进制数r为2,对于十进制数r为10。基数排序有两种:最低位优先(LSD)和最高位优先(MSD)。选择哪种基数排序,需要根据数据的特点来定。例如,对整数序列递增排序,选择最低位优先,越重要的位越在后面排序。最低位优先排序过程如下:对i = 0,1,…,d-1,依次做一次“分配”和“收集”(使用r个队列Q0,Q1,…,Qr-1。 )原创 2020-08-17 15:58:29 · 2934 阅读 · 0 评论 -
数据结构十大排序算法之一:堆排序(主要)与树形选择排序(次要)
堆排序:堆的定义:一个序列R[1…n],关键字分别为k1、k2、… 、kn。该序列满足如下性质(简称为堆性质):① ki≤k2i 且ki≤k2i+1 (即结点的左右孩子均大于该节点-----又称最小堆)或 ② ki≥k2i 且ki≥k2i+1 (1≤i≤ | n/2 |)(即结点的左右孩子均小于该节点-----又称最大堆)满足第①种情况的堆称为小根堆 ,满足第② 种情况的堆称为大根堆。下面讨论的堆是大根堆。大根堆 对应的完全二叉树中,任意一个结点的关键字都大于或等于它的孩子结点的关键.原创 2020-08-17 15:58:11 · 1919 阅读 · 1 评论 -
数据结构——希尔排序(图文精选)
希尔排序:希尔排序(Shell Sort,又称缩小增量法)是一种分组插入排序方法。排序思想:① 先取一个正整数d1(d1<n)作为第一个增量,将全部n个记录分成d1组,把所有相隔d1的记录放在一组中,即对于每个k(k=1, 2, … d1),R[k], R[d1+k], R[2d1+k] , …分在同一组中,在各组内进行直接插入排序。这样一次分组和排序过程称为一趟希尔排序;② 取新的增量d2<d1,重复①的分组和排序操作;直至所取的增量di=1为止,即所有记录放进一个组中排.原创 2020-08-17 15:57:46 · 3628 阅读 · 1 评论 -
数据结构中的最短路径、拓扑排序与关键路径问题
最短路径:从一个顶点到其余各顶点的最短路径:问题描述: 给定一个带权有向图G与源点v,求从v到G中其他顶点的最短路径,并限定各边上的权值大于或等于0。单源最短路径问题: Dijkstra算法狄克斯特拉(Dijkstra)求解思路:设G=(V,E)是一个带权有向图, 把图中顶点集合V分成两组:第1组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径v,… ,u,就将u加入到集合S中,直到全部顶点都加入到S中,算法就结束了)。第2组为其余未求出最短路径的顶点.原创 2020-08-17 15:56:50 · 1524 阅读 · 0 评论 -
高效查找方式——二分查找(拆半查找算法)
#include "stdio.h"int search (int *p , int length , int n);int main(){ //二分查找,一定是在已经排好序的数组中进行查找 int a[] = {1,2,5,8,23,56,89,123} ; int *p = a ; int length = sizeof(a)/sizeof(int) ; int n , t ; printf(" 请输入你要查找的数:") ; scanf("%d",&n) ;原创 2020-06-27 12:28:34 · 720 阅读 · 1 评论 -
面试时经常被提问到的——快速排序算法
#include "stdio.h"int sort (int *p , int low , int high);void quickSort (int *p , int low , int high ) ;void printIt (int *p , int length);int main(){ int a[] = {6,7,1,9,2,5,3,8} ; int length = sizeof(a)/sizeof(int) ; //数组长度 int *p = a ; qui原创 2020-06-27 12:18:17 · 231 阅读 · 0 评论 -
数据结构c语言——有关图的遍历、图的算法、最小生成树
从给定图中任意指定的顶点(称为初始点)出发,按照某种搜索方法沿着图的边访问图中的所有顶点,使每个顶点仅被访问一次,这个过程称为 图的遍历。图的遍历得到的顶点序列称为图遍历序列。图的遍历算法有深度优先搜索算法和广度优先搜索算法。深度优先搜索(Depth First Search–DFS)遍历类似树的先序遍历,是树的先序遍历的推广。深度优先搜索算法思想:设初始状态时图中的所有顶点未被访问,则:⑴ :从图中某个顶点vi出发,访问vi;然后找到vi的一个邻接顶点vi1 ;⑵:从vi1出发,深度优先搜索原创 2020-06-26 16:47:23 · 1059 阅读 · 0 评论 -
数据结构c语言——掌握 ”图“你所必须掌握 ”图“ 的存储结构
1.邻接矩阵存储:邻接矩阵是表示顶点之间相邻关系的矩阵。设G=(V,E)是具有n(n>0)个顶点的图,顶点的编号依次为0~n-1。G的邻接矩阵A是n阶方阵,其定义如下:1)如果G是无向图,则: A[i][j]=1:若(i,j)∈E(G) 0:其他 (2)如果G是有向图,则: A[i][j]=1:若<i,j>∈E(G) 0:其他(3)如果G是带权无向图,则: A[i][j]= wij :若i≠j且(i,j)∈E(G) 0:i=j ∞:原创 2020-06-21 10:04:29 · 361 阅读 · 0 评论 -
数据结构c语言——掌握 ”图“ 你所必需掌握的定义与概念
图的定义:图(Graph) G由顶点集合V(G)和边集合E(G)构成。说明: 对于n个顶点的图,对每个顶点连续编号,即顶点的编号为0~n-1。通过编号唯一确定一个顶点。在图G中,如果代表边的顶点对是无序的,则称G为 无向图。用圆括号序偶表示无向边。如果表示边的顶点对是有序的,则称G为 有向图。用尖括号序偶表示有向边。在无向图中,若对所有的<v,w>∈E(G) ,有<w,v>∈E(G) ,即E(G)是对称,则用无序对(v,w) 表示v和w之间的一条边(Edge),因此(v,原创 2020-06-20 15:54:03 · 556 阅读 · 0 评论 -
数据结构c语言——树的三种存储结构(双亲表示法、孩子表示法、兄弟表示法)
在大量的应用中,人们曾使用多种形式的存储结构来表示树。这里,我们介绍3种常用的链表结构。1.双亲表示法:假设以一组连续空间存储树的结点,同时在每个结点中附设一个指示器指示其双亲结点在链表中的位置,其形式说明如下:例如,图6.13展示一棵树及其双亲表示的存储结构。这种存储结构利用了每个结点(除根以外)只有惟一的双亲的性质。PARENT(T,x)操作可以在常量时间内实现。反复调用PARENT操作,直到遇见无双亲的结点时,便找到了树的根,这就是ROOT(x)操作的执行过程。但是,在这种表示法中,求结点原创 2020-06-20 12:06:06 · 12069 阅读 · 0 评论 -
图文速览——数据结构c语言之——树、森林与二叉树的转换——树和森林的遍历
树、森林转换成二叉树将一棵树转换成二叉树的方法:将一棵树转换成二叉树实际上就是将这棵树用孩子兄弟表示法存储即可,此时,树中的每个结点最多有两个指针:一个指针指向第一个孩子(即左孩子),另一个指针指向右侧第一个兄弟。当你将这两个指针看作是二叉树中的左孩子指针和孩子右指针时,就是一棵二叉树了。特点:一棵树转换成二叉树后,根结点没有右孩子。将森林转换成二叉树的方法与一棵树转换成二叉树的方法类似,只是把森林中所有树的根结点看作兄弟关系,并对其中的每棵树依依地进行转换。树转换为二叉树方法:1)树中所有相原创 2020-06-19 00:24:34 · 465 阅读 · 0 评论 -
精讲数据结构c语言之——赫夫曼树(又称哈夫曼树)与赫夫曼编码
1、哈夫曼树的概念路径: 从一个结点到另一个结点之间的若干个分支路径长度: 路径上的分支数目称为路径长度;结点的路径长度: 从根到该结点的路径长度树的路径长度: 树中所有叶子结点的路径长度之和;一般记为PL。在结点数相同的条件下,完全二叉树是路径最短的二叉树。上面的图中,1 ~ 5的路径长度为2, 1~8的路径长度为3上面图中的左边的图的树的路径长度=2+3+3+2=10(相加的分别是4、7、8、6叶子结点的路径长度)右边的图树的路径长度=3+2+2+2=9(相加的分别是8、5、6、7叶子原创 2020-06-14 11:32:39 · 1136 阅读 · 0 评论 -
数据结构c语言——遍历二叉树更加方便,简洁,有效的 ”线索二叉树“
遍历二叉树实质上是对一个非线性结构进行线性化操作的过程如何保存这种在遍历过程中得到的信息呢?当以二叉链表作为存储结构时,只能找到结点的左右孩子信息,而不能直接得到结点在任一序列中的前驱和后继信息,这种信息只有在遍历的动态过程中才能得到。在每个结点上增加两个指针域,分别指示结点在任一次序遍历时得到的前驱和后继信息,使得存储密度大大降低。有n个结点的二叉链表中必定存在n+1个空链域注意:在任意一颗二叉树中,有n个结点的二叉树必定有n+1个空链怎么得出来的呢?想一想我上一个博客中写到的原创 2020-06-13 19:19:38 · 468 阅读 · 0 评论 -
数据结构c语言之十大经典排序之一 “直接插入排序” (插入升序、插入降序)
直接插入排序基本思想是每一步将一个待排序的记录,插入到前面已经排好序的有序序列中去,直到插完所有元素为止。插入排序之插入升序:int main(){ int arr[6] = {4,1,7,2,9,8}; int n = sizeof(arr)/sizeof(int); int i,j,k; for(i=1;i<n;i++){ j = i-1; k = arr[i]; while(j>=0&&k<arr[j]){ arr[j+1] = arr原创 2020-06-10 00:03:15 · 1382 阅读 · 0 评论 -
图文精讲+代码实战 清晰透彻理解数据结构c语言——二叉树的存储结构+二叉树的遍历
二叉树也可以采用两种存储方式:顺序存储结构和链式存储结构1. 顺序存储结构这种存储结构适用于完全二叉树。其存储形式为:用一组连续的存储单元按照完全二叉树的每个结点编号的顺序存放结点内容。下面是一棵二叉树及其相应的存储结构。2. 链式存储结构在顺序存储结构中,利用编号表示元素的位置及元素之间孩子或双亲的关系,因此对于非完全二叉树,需要将空缺的位置用特定的符号填补,若空缺结点较多,势必造成空间利用率的下降。在这种情况下,就应该考虑使用链式存储结构。这种存储结构的特点是寻找孩子结点容易,双亲比较困原创 2020-06-09 18:40:03 · 373 阅读 · 0 评论