
数据结构
妮妮妮妮没事吧
这个作者很懒,什么都没留下…
展开
-
树、二叉树与森林的转换
1.树转换为二叉树上图是一个度为3的树的结构 ,转换为二叉树分为加线、抹线和旋转几个过程:①加线:在所有兄弟节点间加一条线②抹线:只保留他与第一个孩子结点间的连线,删除它与其它孩子结点间的连线③旋转:以树的根节点为轴心,将整棵树顺时针旋转一定角度使结构层次分明2.森林转换为二叉树森林是由若干棵树组成的,可以将森林中每根树的根节点看作是兄弟节点,由于每棵树都可转换为二叉树,故森林也可转换为二叉树。下图是一个森林:①把每棵树转换为二叉树②第一棵二叉树不动,从第二棵原创 2022-05-05 22:35:18 · 7329 阅读 · 1 评论 -
数据结构————KMP算法
KMP算法相比于BF算法,是一种用空间换时间的算法,比BF的普通算法效率高很多。BF算法需要将源字符串中的每一个字符与模式串中字符比较至少一次,并且会有大量回溯的时间,下面我们来分析一下BF算法的时间复杂度:我们假设源字符串的长度为n,模式串的长度为m,假设从源字符串的第i个位置开始于模式匹配成功。BF算法的时间复杂度分两种情况,第一种是最好情况源字符串中匹配位置之前的每一个字符都与模式串的第一个字符不一样,第二种是最坏情况即源字符串中匹配位置之前的每一组都只与模式串中的最后一个字符不一样。1.原创 2022-04-12 16:32:14 · 2494 阅读 · 0 评论 -
数据结构————串模式匹配(BF)
字符串的模式匹配是将两个A和B字符串进行比较,如果A字符串是B的子串,那么返回B在A串中出现的位置;如果不是子串,则返回错误。那么BF算法就是最好想的算法,但是时间复杂度就会大一点。设置两个指针分别指向A和B字符串,如果A指针指向的内容和B指针指向的内容相同的话,A指针和B指针都向后移动并依次比较;如果A指针指向的内容和B指针指向的内容不同的话,A指针向后移动,B指针不发生变动再依次进行比较。下面我们来实现这个算法:#include<stdio.h>#include<std原创 2022-04-12 13:29:14 · 1649 阅读 · 0 评论 -
数据结构————链队讲解
链队就是将队列的元素用链表的形式来表示,设置头节点和尾结点来控制队列的尾入头出。下面我们主要来实现链队的基本操作:1.头文件#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<stdbool.h>typedef int DataType;typedef struct QueueNode{ struct QueueNode*next; DataType原创 2022-04-11 23:21:34 · 1425 阅读 · 0 评论 -
数据结构————循环队列讲解
队列的基本概念队列与栈的不同之处就在于栈是FILO(first in last out)即先进后出,而队列是FIFO(first in first out)即先进先出。队列可应用于银行取号,先取号的要排在后取号的前面来先办理业务,符合先进先出的原则;而栈可应用于QQ消息界面,即最顶层消息栏是最近一次的消息,越往下消息的发布时间越晚,符合先进后出的原则。对于栈来说,栈一般只有一个栈顶指针top来控制元素的进栈和出栈,因为栈只有一个栈顶一个地方来进出;而队列有队头和队尾两个指针来控制元素的入队和出队,原创 2022-04-11 22:48:27 · 1754 阅读 · 0 评论 -
数据结构————括号的匹配(栈)
如何进行括号的匹配呢?比如说输入字符串:"{{([[()]])}}"可以看出该字符串是完全对称的,那么这个就是匹配的括号,如果输入:"{{(([)]]}",该字符串不是对称的,那么就不匹配。思路就是将所有左括号依次入栈,之后再依次出栈与右括号匹配,如果匹配就指向下一个右括号并且将下一个元素出栈。直到栈顶元素为空或字符串为空。下面我们先来实现栈的基本操作:【头文件】#include<stdio.h>#include<stdlib.h>#include<ass原创 2022-04-03 17:32:00 · 2652 阅读 · 0 评论 -
数据结构————不带头单链表操作讲解
我们先来实现不带头单链表的基本操作:头文件test.h:#include<stdio.h>#include<stdlib.h>typedef int SLTDataType;struct SListNode{ SLTDataType data; struct SListNode*next;};typedef struct SListNode SLTnode;void InitSlist(SLTnode*head);//初始化void Inser原创 2022-04-03 16:36:36 · 1097 阅读 · 0 评论 -
数据结构————倒置带头结点单链表操作讲解
我们先来实现带头单链表的基本操作:头文件:#include<stdio.h>#include<assert.h>#include<stdlib.h>typedef int ElemType;typedef struct LNode{ ElemType data; struct LNode*next;}LT,*link;void InitList(Link phead);//初始化void InsertListfront(Link p原创 2022-04-03 16:00:35 · 2799 阅读 · 0 评论 -
多项式求值——第一个方法:两个栈
多项式求值的第一个方法的基本思路就是:设定两个栈,一个栈放数字,另一个栈放符号。将表达式输入到字符数组中,如果指针指向符号,并且该符号的优先级大于符号栈顶的优先级,那么就放进符号栈中;如果指针指向的符号的优先级小于符号栈栈顶的优先级,那么将数字栈中pop出两个数字和符号栈中pop出的一个字符进行运算,将运算的结果放进数字栈中;如果指针指向数字,那么就将数字放入数字栈中,再将指针指向下一个字符。之后当字符数组全部输出完之后,就可以返回数字栈的栈顶元素了。那么我们的头文件就是栈的基本操作:#inclu原创 2022-03-28 14:09:40 · 228 阅读 · 0 评论 -
堆栈的基本操作(C语言实现)
堆栈就是栈通过数组的形式实现,我们都知道栈符合FILO即First In Last Out先进后出、后进先出的原则。栈顶指针top如果赋值-1,那么top指向栈顶元素;如果top赋值0,那么top指向栈顶上方的元素。下面我们来实现堆栈的基本操作(附有其他操作):1.初始化#include<stdio.h>#include<assert.h>#include<stdlib.h>typedef int STDataType;typedef struct St原创 2022-03-22 11:26:14 · 5034 阅读 · 1 评论 -
数据结构—————顺序表讲解
表现形式顺序表主要的表现形式就是数组的形式链表主要表现形式是指针的形式存储方式顺序表的存储形式是随机存储链表的存储形式则是顺序存储所以对于顺序表而言,链表在中间的插入和删除的操作时间复杂度为O(n),而顺序表插入和删除操作的时间复杂度为O(n^2);对于链表而言,查找时需要从头遍历一遍链表,来找到对应的元素,而顺序表可以直接找到对应元素或位置,不需要遍历。基本操作顺序表的基本操作有初始化、前插、后插、前删、后删、随机插入、随机删除等。1.初始化2.前插3.后插原创 2022-03-13 16:48:52 · 1502 阅读 · 0 评论 -
数据结构—————双向带头循环链表讲解
链表分为带头结点的顺序表和不带头结点的顺序表,按算法来说,不带头结点的顺序表要比带头结点的顺序表复杂一点,涉及到二级指针的用法(形参的改变不会对实参产生影响)。而带头结点的顺序表不会使链表置空,方便操作。图示讲解双向即指同一个结点中不仅有数据域来存放数据,还有next指针指向下一个结点和prev指针指向上一个结点。而对于头结点来说它的prev即phead->prev指向最后一个结点,最后一个结点的next指向头结点。基本操作链表的一系列操作都是基于基本操作的基础上实现的,基本操作有初始原创 2022-03-09 14:24:32 · 2974 阅读 · 0 评论 -
数据结构————带头结点单链表讲解
单链表分为带头结点的和不带头结点的,两者的根本区别在于是否有不存储元素的头结点。头结点的存在可以让链表为空的时候不销毁,操作也更方便,不用附带二级指针。表示形式每一个结点都有指针域和数据域,指针域用来指向下一个结点,数据域用来存放该结点的元素。基本操作单链表的基本操作有初始化、前插、后插、前删、后删等。后面我们将讲述基于这些基本操作上更复杂的操作。1.初始化2.前插3.后插4.前删5.后删6.插入7.删除...原创 2022-03-13 16:08:12 · 1974 阅读 · 0 评论 -
数据结构————线性表的合并操作
顺序表的合并顺序表相当于两个数组的形式,合并时也有有序顺序表的合并和无序顺序表的合并,下面我们会一一讲解。1.有序顺序表的合并有序顺序表的合并为了使时间复杂度为O(n),空间复杂度为O(1),所以我们一般会使用三个指针来进行操作,即一个指针指向L1->size-1,一个指针指向L2->size-1,第三个指针指向将L2的size增加到L1后面之后的size-1的位置。2.无序顺序表的合并无序顺序表只需要两个指针来操作,其时间复杂度为O(n),空间复杂度为O(1)。链.原创 2022-03-13 14:43:07 · 4354 阅读 · 0 评论