数据结构c语言
文章平均质量分 50
数据结构和算法
逍逍430
在校大学生
展开
-
赫夫曼树思路,代码(C语言)
同时设置新的结点为当前结点的父节点,parent结点为当前结点的父节点的parent结点,循环直到该树的根节点结束。此时得到的数组为数组结点中结点的赫夫曼编码。3 遍历结点数组找到权值最小的两个结点,称为最小结点和次结点,将两节点权值相加构造一个新的结点作为parent结点。1 前提需要一个char类型的数组来对每个结点的编码值进行存储,char类型的数组设计,数组长度设置为n,最大索引值使用temp变量存储为n-1,假设char数组为hc,设置hc[n] = '\0',初始化数组所有值为0。原创 2023-06-19 12:35:33 · 53 阅读 · 0 评论 -
平衡二叉树-代码详解
平衡二叉树是一种特殊的搜索二叉树,普通的搜索二叉树没有限制左右子树的高度关系,当搜索二叉树时斜树时查找效率了低,为了解决这种极端问题就考虑左右子树的高度关系,平衡二叉树就是限制左右子树高度差不超过1。这种情况3是一个不平衡点,3的右子树函数中时L,L时平衡的看似没什么问题但是问大家,加入1是新节点,请问1是怎么插入在一个原来就不平衡的棵树上的。双旋转:当9作为新节点插入时,4,6,7,均为R,而10未L,这是需要10右旋转,9替代原来的10,此时9未R,这时对7进行左旋即可。原创 2023-06-17 15:17:05 · 118 阅读 · 1 评论 -
搜索二叉树
这些特性使得在搜索二叉树中进行查找,插入,删除等错做的时间复杂度为(logn),其中n是节点的个数。1 插入操作 2 查找:在树中查找一个给定的值。3 删除:删除特定节点。1 左子树上所有节点的值均小于它的根节点的值。2 右子树上所有节点的值均大于它的根节点。前序遍历结果:1,2,4,5,3,6,7。中序遍历结果:4,2,5,1,6,7,3。后序遍历结果:4,5,2,6,7,3,1。3 左右子树也分别为二叉搜索树。原创 2023-06-15 21:48:20 · 42 阅读 · 1 评论 -
C语言指针
C语言指针原创 2023-06-12 19:06:46 · 39 阅读 · 0 评论 -
二叉树,完全二叉树,满二叉树
由①、②两式把n2消去得:n= 2n0+n1-1,由于完全二叉树中度为1的结点数只有两种可能0或1,当n为奇数n0=1;度为1的节点有1个子节点,度为2的节点有2个子节点,,度为0有0个,加上根节点(1)。又因为一个度为2的结点会有2个子结点,一个度为1的结点会有1个子结点,除根结点外其他结点都有父结点。:叶子节点(就是没有子节点的节点),子树(跟节点的左子树和右子树),深度(从根节点所在的那一层从1开始数有几层深度就是几)n代表总结点,n0代表度为0的节点,1代表度为1的节点,2代表度为2的节点。原创 2023-06-14 18:21:19 · 364 阅读 · 0 评论 -
数据结构-队列:顺序队列和循环队列
返回false同理当front走到数组最大索引处,取余运算同样会使得front回归到索引为0的位置来读取0索引上的数据。队列的实现方式有两种这里是使用数组来实现,顺序队列实现和循环队列,循环队列解决了顺序队列浪费空间的问题,队列特点时在队列尾部进行加入,在队列头部进行删除操作,所以当删除操作进行后,数组有空出来的位置,但是数据只能在队列尾部进行插入所以这部分被队列释放的空间不可用,为了解决这个问题循环队列采用动态取模来修改队头,队尾的值来进行循环利用被队列释放的空间。原创 2023-06-14 13:24:53 · 51 阅读 · 0 评论 -
详解搜索二叉树的中序遍历(前驱后继增强树效率)
例如中序遍历顺序是ABCD当B为当前节点,B的前驱就是A,A先于B获取,pre保存A的值可以将B的前驱设置为A。同样的后继此时注意后继指的是A的后继是B,现在要做的是将A的后继设置成B当然此时要判断A是否有右孩子,右孩子不存在才可以作为线索指向A的后继B。此时该节点的线索化操作结束。搜索二叉树是对于普通二叉树空间浪费的空间的利用,树的遍历方式前序遍历,中序遍历后序遍历,层序遍历,只有进行中序遍历时,造成空间浪费的节点是有规律的因此搜索二叉树采取的是利用中序遍历来线索化二叉树达到有效利用空间的目的。原创 2023-04-04 21:25:49 · 438 阅读 · 1 评论 -
KMP算法
kmp算法思路原创 2023-04-02 10:57:27 · 67 阅读 · 0 评论 -
数据结构-栈详解附具体应用案例:表达式求值,括号匹配,函数调用。
数据结构栈原创 2023-06-13 18:26:01 · 100 阅读 · 1 评论 -
数据结构-链表
头节点就是节点只有指针的节点没有数据,头指针通过指向头节点利用->next来增加或者删除修改值。所以必须为头节点申请内存空间没有头节点就意味着头指针直接指向带有数据的节点,有头节点不需要进行头插或者修改头部时进行头指针的重定向,没有头节点相对来说写代码稍微复杂一点。顺序表节点中存放数组和数组长度,通过节点指针指向该节点对数组做修改,顺序表是静态申请内存空间的而链表是动态的,静态就代表搜索简单但是删改难,动态很明显就是增删改简单,查找需要从头节点依次进行(对于单向链表而言),双链表可以从任意节点搜索。原创 2023-06-13 18:14:30 · 97 阅读 · 1 评论