![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 86
小杨树林
新的开始-记录工作中的所学所思所想
展开
-
树———二叉树
定义:二叉树是另一种树形结构,它的特点是每个结点至多只有两棵子树(即二叉树中的度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。二叉树的三种遍历方式:先序遍历:遍历顺序规则为【根左右】中序遍历:遍历顺序规则为【左根右】后序遍历:遍历顺序规则为【左右根】例:如上图先序遍历:a b d e c f g h i 中序遍历:d b e a f h g i c 后序遍历:d...原创 2018-04-08 21:14:59 · 165 阅读 · 0 评论 -
堆排序(大堆)
前言:堆排序可分为大堆和小堆。 其实堆的空间结构实际上就是一棵完全二叉树,不过堆有它自己的限定条件。大堆就是树中每个父亲节点都要比孩子节点大,并且两个兄弟之间是没有大小区分的。小堆与之相反,就是每个父亲节点都要比孩子节点小。 堆的空间结构虽然是个完全二叉树,但是这样的结构也是我们为了好理解才想出来的,实际上堆是通过数组的下标进行相应的排序,因为完全二叉树中的结点的编号可以算出来,这...原创 2018-05-08 08:25:04 · 15114 阅读 · 0 评论 -
红黑树整理
BST特点:1.每个节点的颜色非黑即红2.根节点是黑色3.树中终端节点(NIL)也称哨兵均为黑色4.没有两个红节点互为父子关系5.从任意节点出发到其所能到达的所有终端节点的各条路径上的黑节点的数目完全相同添加结点情况分类:1.若树为空,则添加的结点X为树的根,并且X的颜色为黑色2.若父亲节点为黑节点,则将X插入3.若父亲节点是红色 3.1 若叔叔节点是红的,则将父亲变黑,将叔叔变黑,将爷爷变红...原创 2018-04-23 23:26:24 · 147 阅读 · 0 评论 -
用两个栈实现队列的操作代码
#include<stdio.h>#include<stdlib.h>typedef struct node{ int nValue; struct node *pNext;}MyStack;typedef struct node2{ MyStack *pTop; int nCount;}Stack;typedef struct node3 ...原创 2018-04-05 19:09:09 · 115 阅读 · 0 评论 -
队列的基本操作
首先 我认为队列就是对链表进行尾插入头删除实现代码如下:#include<stdio.h>#include<stdlib.h>typedef struct node3{ int nValue; struct node3 *pNext;}MyQueue;typedef struct node4{ int nCount; MyQueue *pHead;...原创 2018-04-05 17:44:16 · 389 阅读 · 0 评论 -
栈的基本操作及实际应用
#include<stdio.h>#include<stdlib.h>typedef struct node{ int nValue; struct node *pNext;}MyStack;typedef struct node2{ MyStack *pTop; int nCount;}Stack;void s_Init(Stack **p...原创 2018-04-05 16:47:13 · 540 阅读 · 0 评论 -
排序二叉树节点的删除
首先先看看这个删除节点12后的树,还要保证该平衡二叉树的特性保持不变删除节点详细分为三类:第一类.所删除的节点是叶子节点,这样就可以先遍历这个树,然后找到需要删除的节点,把它free掉就好第二类:就是所删除的节点只有一个左孩子,或者只有一个右孩子,则把该节点的孩子变为它父亲的孩子 ,然后删除这个结点在这个例子把28删除,就是把30连接到12上第三类:就是最麻烦的一类,假如我们要删除节点12,直接删...原创 2018-04-17 20:26:48 · 8371 阅读 · 1 评论 -
二叉树的翻转代码
代码如下:#include<stdio.h>#include<stdlib.h>typedef struct node{ int nValue; struct node *pLeft; struct node *pRight; struct node *pFather;}BinaryTree;BinaryTree *CreateBinaryTree()...原创 2018-04-15 22:22:49 · 830 阅读 · 1 评论 -
二叉树的层次遍历
思路:二叉树的层次遍历思路,借助队列来实现。相当于广度优先搜索,使用队列(深度优先搜索的话,使用栈)。 若根节点为空,直接返回; 若根节点非空,则将根节点入队,然后,判断队列是否为空,若不为空,则将队首节点出队,访问, 并判断其左右子节点是否为空,若不为空,则压入队列。步骤:1.申请一个辅助队列,并且先把根节点入队2.判断队列是否为空3.队列不为空则进入循环,循...原创 2018-04-14 20:28:43 · 186 阅读 · 0 评论 -
二叉树的非递归遍历
1.非递归前序遍历步骤: 1.申请一个辅助栈 2.循环遍历二叉树:如果二叉树结点非空,则打印,结点入栈,二叉树向左走 3. 栈顶元素弹出 ...原创 2018-04-14 20:12:45 · 136 阅读 · 0 评论 -
两个队列实现一个栈
思路 q1是专职进出栈的,q2只是个中转站 入栈:直接入队列q1即可 出栈:把q1的除最后一个元素外全部转移到队q2中,然后把刚才剩下q1中的那个元素出队列。之后把q2中的全部元素转移回q1中。(偷得(*^▽^*))图示:实现代码如下:#include<stdio.h>#include<stdlib.h>typedef struct node...原创 2018-04-08 21:31:37 · 110 阅读 · 0 评论 -
图的创建以及遍历
首先图分为有向图和无向图。我们先来介绍无向图:无向图定义:若图中所有的边均满足的两个顶点没有次序关系和方向性,即(v1,v2)和(v2,v1)代表同一条边,则称为无向图。图所示无向图就是由结点V={1,2,3,4,5},和边E={(1,2),(1,4),(2,3),(3.4),(3,5),(2,5)},构成的。我们也不难观察到该图是沿着对角线对称的,即如果图的邻接矩阵是沿对角线对...原创 2018-08-08 17:04:47 · 11425 阅读 · 2 评论