数据结构
数据结构
跑不动的码农
IF(BOOL 学习= =FALSE)BOOL 落后=TRUE;不断的学习,我们才能不断的前进
展开
-
哈夫曼树(Huffman Tree)
哈夫曼树是一种特殊的二叉树,它是由美国计算机科学家David A.Huffman于1952年提出的。哈夫曼树广泛应用于数据压缩、编码等领域,因为它可以有效地减少数据的存储空间和传输时间。原创 2024-04-19 16:03:20 · 1091 阅读 · 0 评论 -
树和森林的遍历
森林是m (m>0)棵互不相交的树的集合。后根遍历:若树非空,先依次对每棵子树进行后根遍历,最后再访问根结点。先根遍历:若树非空,先访问根结点,再依次对每棵子树进行先根遍历。若森林为非空,则按如下规则进行遍历:访问森林中第一棵树的根结点。中序遍历森林中第一棵树的根结点的子树森林。树的先根遍历序列与这棵树相应二叉树的先序序列相同。树的后根遍历序列与这棵树相应二叉树的中序序列相同。先序遍历除去第一棵树之后剩余的树构成的森林。中序遍历除去第一棵树之后剩余的树构成的森林。先序遍历第一棵树中根结点的子树森林。原创 2024-04-19 15:25:51 · 286 阅读 · 0 评论 -
树的存储结构
树是一种递归定义的数据结构。树是n (n>=0)个结点的有限集合,n =0时,称为空树,这是一种特殊情况。在任意一棵非空树中应满足:1)有且仅有一个特定的称为根的结点。2)当n > 1时,其余结点可分为m (m>0)个互不相交的有限集合T1, T2... Tm,其中每个集合本身又是一棵树,并且称为根结点的子树。原创 2024-04-18 16:56:43 · 294 阅读 · 0 评论 -
在线索二叉树中找前驱后继
在线索二叉树中,每个节点除了左右子节点指针外,还增加了两个标记位:ltag和rtag。其中,ltag表示左子节点是否为前驱,rtag表示右子节点是否为后继。通过这两个标记位,我们可以方便地找到任意节点的前驱和后继节点。原创 2024-04-18 11:06:01 · 1492 阅读 · 1 评论 -
线索二叉树
二叉树是一种非常重要的数据结构。它是由节点组成的有限集合,每个节点最多有两个子节点,通常被称为左子节点和右子节点。线索二叉树是一种特殊的二叉树,它在原有二叉树的基础上增加了指向前驱和后继的指针,使得对二叉树的操作更加高效。本文将详细介绍线索二叉树的概念、构造方法以及相应的C语言实现代码。原创 2024-04-18 10:36:14 · 259 阅读 · 0 评论 -
二叉树的层序遍历
层序遍历,也称为广度优先搜索(BFS),是一种树的遍历方法,它从根节点开始,先访问上一层的所有节点,再访问下一层的所有节点。这种遍历方式就像我们阅读一本书一样,从左到右,从上到下。原创 2024-04-16 15:37:15 · 183 阅读 · 0 评论 -
二叉树的先中后序遍历
什么是遍历呢?遍历:按照某种次序把所有结点都访问一遍先/中/后序遍历:基于树的递归特性确定的次序规则二叉树的递归特性:①要么是个空二叉树②要么就是由“根节点+左子树+右子树”组成的二叉树先序遍历:根左右(NLR) ——先访问根结点,在访问左子树,最后访问右子树中序遍历:左根右(LNR) ——先访问左子树,在访问根结点,左后放稳右子树后序遍历:左右根(LRN) ——先访问左子树,在访问右子树,最后访问根节点例如:先序遍历:AB DECFG。原创 2024-04-16 14:53:13 · 380 阅读 · 0 评论 -
二叉树的链式存储——补充
所以,一个二叉树有n个结点的话,那总共就会有2n个指针域,n个结点的二叉链表共有n+1个空链域。原创 2024-04-14 20:36:37 · 147 阅读 · 0 评论 -
二叉树的顺序存储结构
定义一个长度为MaxSize的数组t,按照从上至下、从左至右的顺序依次存储完全二叉树中的各个结点。几个重要常考的基本操作:1. i的左孩子—2i2. i的右孩子—2i+13. i的父节点—[i/2]4. i所在的层次——[log2(n + 1)]或[log2n]+ 1。原创 2024-04-14 20:22:35 · 628 阅读 · 0 评论 -
KMP算法
KMP算法(Knuth-Morris-Pratt算法)是一种高效的字符串匹配算法,用于在一个文本串中查找一个模式串。KMP算法的核心思想是利用已经匹配的部分信息,避免在文本串中进行不必要的回溯。KMP算法的时间复杂度为O(m+n),其中m和n分别为文本串和模式串的长度。原创 2024-04-11 19:54:16 · 591 阅读 · 0 评论 -
朴素模式匹配算法
什么是字符串的模式匹配?字符串模式匹配:在主串中找到与模式串相同的字串,并返回其所在位置。原创 2024-04-11 10:24:35 · 190 阅读 · 0 评论 -
串的存储结构
串其实是一种特殊的线性表,用什么样的存储结构实现线性表就可以类似的用什么样的方法实现串。原创 2024-04-10 16:05:27 · 327 阅读 · 0 评论 -
队列链式实现
链式存储实现的队列:链队列带头结点:不带头结点:step1:step2:step3: step4: step5: tips:若p是最后一个结点还需要修改表为指针,让它指向头结点。如图:顺序存储———预分配的空间耗尽时队满链式存储———一般不会队满,除非内存不足原创 2024-04-02 17:09:52 · 676 阅读 · 0 评论 -
队列的顺序实现
每次删除操作成功时,都令tag=O;每次插入操作成功时,都令tag=1;只有删除操作,才可能导致队空只有插入操作,才可能导致队满。队空条件:front==rear && tag ==0。初始化时rear=front=0;队满条件:front==rear && tag==1。初始化时rear=front=0;插入成功size++;删除成功size--;队满条件:size==MaxSize。队空条件size==0;原创 2024-04-02 16:28:18 · 257 阅读 · 0 评论 -
链栈的实现
可以联系到对头结点的“后删“操作。可以联系对头结点的后插操作。原创 2024-03-31 19:08:39 · 121 阅读 · 0 评论 -
顺序栈的实现
define MaxSize 10 //定义栈中元素的最大个数//静态数组存放栈中元素int top;//栈顶指针}SqStack;SqStack S;//声明一个顺序栈(分配空间)// ...后续操作...原创 2024-03-30 17:04:34 · 322 阅读 · 1 评论 -
循环链表的基本操作
【代码】循环链表的基本操作。原创 2024-03-29 15:42:50 · 91 阅读 · 0 评论 -
双链表的基本操作
判断双链表是否为空(带头结点)原创 2024-03-29 10:56:23 · 832 阅读 · 0 评论 -
单链表的查找
GetElem(L,i):按位查找操作。获取表l中第i个位置的元素的值。LocateElem(L,e):按值查找操作。在表L中查找具有给定关键字值的元素。原创 2024-03-28 17:56:23 · 240 阅读 · 0 评论 -
顺序表的定义
C语言中用了malloc函数来动态申请内存空间,用free函数来动态释放内存空间。malloc函数返回一个指针,需要强制转型为你定义的数据元素类型指针。顺序表的实现--静态分配。顺序表的实现--动态分配。原创 2024-03-28 10:49:28 · 195 阅读 · 0 评论 -
顺序表的查找
LocateElem(L,e):按值查找操作。在表L中查找具有给定关键字值的元素。GetElem(L,i):按位查找操作。获取表L中第i个位置的元素的值。注意:C语言中两个结构类型的比较是不能用“==”来进行比较的。原创 2024-03-28 15:10:58 · 228 阅读 · 0 评论 -
顺序表的基本操作--插入
Listlnsert(&L,i,e):插入操作。在表L中的第i个位置上插入指定元素e。原创 2024-03-28 11:09:27 · 110 阅读 · 0 评论 -
顺序表的基本操作--删除
【代码】顺序表的基本操作--删除。原创 2024-03-28 14:44:57 · 113 阅读 · 0 评论 -
单链表的定义
typedef 关键字 --数据类型重命名。typedef原创 2024-03-28 15:50:37 · 461 阅读 · 0 评论 -
单链表的插入和删除
可以申请一个新的节点s作为p的后继节点,把p中的数据复制到s中再把插入的数据放到p中完成前插操作。ListDelete(&L,i,&e):删除操作。删除表L中第i个位置的元素,并用e返回删除元素的值。ListInsert(&L,i,e):插入操作。在表L中的第i个位置上插入指定元素e。ListInsert(&L,i,e):插入操作。在表L中的第i个位置上插入指定元素e。注意:上述代码s->next=p->next与p->next=s不能颠倒。方法1:传入头指针,循环寻找p 的前驱结点。原创 2024-03-28 17:22:18 · 611 阅读 · 0 评论