数据结构
喜欢的游泳的鱼~
这个作者很懒,什么都没留下…
展开
-
线索二叉树的基本功能实现你想要的基本都有
1,什么是线索二叉树?用自己的话说就是:原来我们求一棵二叉树的前序、中序、后序序列的时候,都必须用到递归遍历相应的二叉树,否则也得借助栈等结构来记录。这样的话,如果我们想很快的找到某一个节点在某种序列下的前驱或后继,每次都要遍历,这显然十分浪费时间。很自然,要是想避免这个重复工作,那么我们就需要把所有节点的前驱和后继记录下来,这样每次查找相应的记录就行了。于是就引出了——‘线索’一词。没错,真的是‘线索’,由线索找到相应节点的前驱和后继,很形象!2、不管我用文字讲的多牛逼,还是不好懂的,因此,我决定推荐原创 2021-10-09 11:02:18 · 118 阅读 · 0 评论 -
中序非递归遍历序列二叉树
1、中序非递归遍历序列二叉树同学们一定要留意一下这一步: pop(s,&q);这一步涉及到一个二级指针的问题(当然不用二级指针也可以解决问题,只不过大多部分教材都会用二级指针来解题),二级指针的问题我直接上图,其实二级指针就是一个抽屉里面放另外一个抽屉的钥匙罢啦;#include <stdio.h>#include <mm_malloc.h>#define MAXSIZE 50#define OK 1#define ERROR -1typedef str原创 2021-10-01 17:20:35 · 227 阅读 · 0 评论 -
树的基本功能的实现
1、树的基本功能的实现(包括桉树状打印二叉树)关于树的创建可以看看我的另外一篇,可别小看了树的创建,你要是真的把树的创建真真切切的弄懂啦,那么树后面就好学了很多,否则,很痛苦的;附链接:https://blog.csdn.net/qq_50504109/article/details/119721763/** * 时隔一百年总算学到树啦 * 不容易 * * 测试用例:AB..CD... 或者 AB.DF..G..C.E.H.. */#include<stdio.h>#i原创 2021-10-01 10:59:09 · 286 阅读 · 0 评论 -
用递归求n的阶层
1、用递归求n的阶层/** * 对递归了解的话,这个题就很简单啦,要是不懂递归的小伙伴可以先看看递归的资料哈 */#include<stdio.h>int main(){ int f(int n ); int n ; printf("请输入要求的n的阶数:"); scanf("%d",&n); printf("%d阶的结果:%d",n,f(n));}int f(int n ){ if ( n == 0){原创 2021-09-24 10:31:08 · 4499 阅读 · 0 评论 -
经典题汉诺塔
1、汉诺塔个人建议在学递归之前先去看看方法的弹栈和压栈,了解完这个然后自己手动画画图,会对自己理解递归有很大的帮助,下面是我学二叉树的时候自己画的图;#include<stdio.h>/** * * 汉诺塔基本思路就是先把第一个柱子上面1到n-1个圆柱借助第三个柱子放到第二个柱子上面 * 然后在将第n个柱子放到第三个圆柱上面, * 然后我们在把第二个柱子上面的圆柱放到第三个圆柱上面,就完成了汉诺塔的游戏(当然这是理想状态下); * 因为第二个柱子上面的圆原创 2021-09-24 10:13:38 · 82 阅读 · 0 评论 -
C语言字符串的实现以及基本功能
1、 C语言字符串的实现以及基本功能输入数据的时候按我这样输入:不然的话会把换行读进去#include<stdio.h>#include <mm_malloc.h>#include <conio.h>#define MAXSIZE 50typedef struct String { char elem[MAXSIZE]; int length;} String, *LinearString;int main() { in原创 2021-09-23 15:12:10 · 462 阅读 · 0 评论 -
KMP算法next的讲解
1、KMP算法next的讲解其实我相信大部分人并不是不懂KMP的原理而是不懂next【】数组到底怎么搞出来的,查资料发现他们都是一笔带过,然后好不容易才找到一个讲的很详细的,但是发现是用图解释,但是在详细也很难理解;因此,我在这里直接推荐你们看一个视频,一遍不懂就多看几遍,之后不会恍然大悟,醍醐灌顶;给我冲兄弟们; b站:https://www.bilibili.com/video/BV16X4y137qw//KMP算法解决串的匹配;int StrIndexKMP(LinearString s,L原创 2021-09-23 14:57:31 · 319 阅读 · 0 评论 -
用队列打印杨辉三角
1、用队列打印杨辉三角队列的实现以及基本功能请参考:https://blog.csdn.net/qq_50504109/article/details/120384457/** * 用队列打印杨辉三角的思路就是跟数组一样的,用前一列求出后面一列 * 不过队列不像数组有固定的公式可以求出特定位置的元素,我们需要通过元素的进出来求的 * 我们需要前面一列下出列一个,然后在获得当前的 GetHead(Q,&x)值,相加才能得到下一行的元原创 2021-09-23 09:52:48 · 2989 阅读 · 0 评论 -
用栈和队列解决回文字符串
1、用栈和队列解决回文字符串栈和队列的实现以及基本功能函数请参考:https://blog.csdn.net/qq_50504109/article/details/120330818和https://blog.csdn.net/qq_50504109/article/details/120384457(队列里面的数据我用的是int,你可以改成char类型)/** * * * 判断是否为回文数其实很简单的,既然是回文数那么肯定满足对称性 * 那么我们可以使用栈和队列的特性, * 先原创 2021-09-22 17:25:38 · 1269 阅读 · 0 评论 -
辗转相除法(又称欧几里得)求最大公约数,顺便求最小公约数
1、辗转相除法(又称欧几里得)求最大公约数,顺便求最小公约数/** * * 使用辗转相除法(又称欧几里得)求最大公约数,顺便求最小公约数 * 最大公约数乘于最小公倍数等于两个数的积; * (a,b)*[a,b] = ab*/#include<stdio.h>int main(){ int fun(int bignum,int littlenum); printf("请输入两个整数:例如:123 456\n"); int m原创 2021-09-20 12:02:47 · 113 阅读 · 0 评论 -
用队列模拟患者医院看病的过程
1、用队列模拟患者医院看病的过程部分函数请参考:https://blog.csdn.net/qq_50504109/article/details/120384457/** * 模拟患者医院看病的过程使用队列, * 其实就是让客户输入,通过不同的输入情况对应不同的处理方式而已; * 输入1:病人到达 * 输入2:护士让下一位就诊 * 输入3:不在接受病人排队 */#include <stdio.h>#include <conio.h&g原创 2021-09-20 08:50:26 · 1581 阅读 · 2 评论 -
循环队列
1、循环队列/** * 循环顺序表队列 * 为很么要用循环呢?那是因为当rear = MAXSIZE不一定是真的队列满了,因为在你入队列的时候,也可能会有元素出队列 * 这是是假溢出,那么我们就会想着当(rear+1) = MAXSIZE的时候,下一次在移动的时候rear可不可以将rear移动到0号位置呢?这样就可以实现循环了 * 答案是可以的使用(rear+1)%MAXSIZE就行啦,因为只有符合这个条件的时候结果才是为0 * 那么原创 2021-09-19 20:43:49 · 241 阅读 · 0 评论 -
链式实现队列
1、链式实现队列/** * 链式实现队列 */#include<stdio.h>#include <mm_malloc.h>//定义一个普通的节点typedef struct Node { int data; struct Node *next;} *LinkQueueNode, Node;//定义一个指向链表的头指针和尾指针为了操作方便将他们封装起来啦typedef struct LinkQueue1{ Node *fro原创 2021-09-19 16:16:06 · 122 阅读 · 0 评论 -
设计一个高效的算法。从顺序表L中删除所有介于x和y之间的所有元素,要求空间复杂度为O(1)
1、设计一个高效的算法。从顺序表L中删除所有介于x和y之间的所有元素,要求空间复杂度为O(1)部分函数调用参考:https://blog.csdn.net/qq_50504109/article/details/120273546/** * 删除掉介于x和y的元素,其实跟删除一个确定的值是一样的 * i和j在没有遇到符合条件的元素的时候,一起移动,相互赋值,要是遇到符合条件的元素的时候,只需要j继续往前走, * 直到遇到不符合条件原创 2021-09-19 15:16:46 · 5208 阅读 · 0 评论 -
链表转换
1、链表转换(说白了就是头插法的使用)/** * */#include<stdio.h>#include <accctrl.h>#define MAXSIZE 15 // 常量的定义不需要分号也不需要等号 MAXSIZE = 5; 这样是错误的#define OK 1#define ERROR -1#define NOTFOUND -2typedef struct Node{ int data; struct Node原创 2021-09-19 12:37:51 · 126 阅读 · 0 评论 -
建立一个带头结点的线性链表,用以存放输入的二进制数,链表的每一个节点的data域存放一个二进制位。并在此链表上实现对二进制数加1的运算;
1、题目:建立一个带头结点的线性链表,用以存放输入的二进制数,链表的每一个节点的data域存放一个二进制位。并在此链表上实现对二进制数加1的运算;部分函数调用参考:https://blog.csdn.net/qq_50504109/article/details/120288749/** * 二进制的加法,用链表实现,我们正常使用二进制加法的时候,是从地位开始,遇到1就加,然后进位,直到遇到0(这个0肯定是最后一个零)我们便停止进位 * 因此,我们便有思路,那么就是一直遍历,遇到data为0原创 2021-09-19 11:38:18 · 677 阅读 · 0 评论 -
C语言判断一个链表是否有环(快慢指针)
1、判断一个链表是否有环(快慢指针)兄弟们,算法好难!我相信我们的感受是一样的,下面是我对这道题的一些思考,以及在开始写的时候的一些疑问,希望对大家有帮助!/** * 写这题的时候我最疑惑的时候是,难道快指针每次走两步,难道不可能刚好把环给跳过了嘛,但是仔细想想是不可能的 * 因为fast = fast->next->next 就是说你虽然每次都吃两个苹果,但是你最终还是一个苹果一个苹果吃的, * 所以fast其实跨两个节点,也是一个一个节点都要经过的,这样子的话如果fas原创 2021-09-18 18:26:29 · 723 阅读 · 1 评论 -
约瑟夫环问题(C语言循环链表)
1、约瑟夫环问题(C语言循环链表)我相信大家都可以画出这个图,知道大体的解题的思想,但是却不知道代码该怎么下手,因此,下面我直接上代码,代码中该注释的地方我都进行了注释,希望到大家有帮助;#include<stdio.h>#include <mm_malloc.h>typedef struct Node { int num; int password; struct Node *next;} Node, *LinkList;int原创 2021-09-18 09:27:40 · 3336 阅读 · 0 评论 -
已知带表头的节点单链表L,设计算法实现:以表中的第一个元素作为标准,将表中的所有值小于第一个元素的节点放在第一个节点之前,所有值大于第一个元素的节点均放在第一个元素节点之后;
1、已知带表头的节点单链表L,设计算法实现:以表中的第一个元素作为标准,将表中的所有值小于第一个元素的节点放在第一个节点之前,所有值大于第一个元素的节点均放在第一个元素节点之后;#include<stdio.h>#include"InstanceLinkList.c"int main(){ void ReverseList(LinkList L); void changelist(LinkList L); LinkList L = creatLinkList原创 2021-09-17 20:24:53 · 1730 阅读 · 1 评论 -
设计一个高效的算法,从顺序表L中删除所有值为x的元素,要求时间复杂度为)(n),空间复杂度为O(1);
1、设计一个高效的算法,从顺序表L中删除所有值为x的元素,要求时间复杂度为)(n),空间复杂度为O(1);部分函数调用参考如下:https://blog.csdn.net/qq_50504109/article/details/120273546#include<stdio.h>#include"InstanceLinearList.c"int main(){ void delx(LinearList1 L,int x); LinearList *list;原创 2021-09-17 15:59:33 · 5625 阅读 · 0 评论 -
带头结点单链表就地逆置算法
1、带头结点单链表就地逆置算法部分函数调用参考如下:https://blog.csdn.net/qq_50504109/article/details/120288749/** * 单向链表的逆置,说白了就是头插法的利用,只不过我们这次插入的数据,不是自己决定的节点 * 而是用已经存在的,那我们每次操作的时候,把下一个节点的地址保存起来就可以了,这样就相当于是我们创建了一个 * 那这不就和头插法一模一样了么? */#include <stdio.h>#includ原创 2021-09-17 15:56:08 · 4380 阅读 · 0 评论 -
C语言栈括号匹配算法
1、C语言栈括号匹配算法一起加油兄弟姐妹们!!!冲冲冲/** * 思想很简单就是左括号进栈,遇到右括号的时候,就把栈顶元素取出,然后匹配,然后对结果进行不用的处理 * 括号匹配算法: * 匹配失败的可能: * 1、左括号多于有括号:这个时候会出现栈已经空了,但是字符组数还没有扫描结束; * 2、右括号多于左括号:这个时候会出现栈还有剩余,但是字符数组已经扫描完了; * 3、左括号和右括号不是同一个类型 */#include<st原创 2021-09-17 10:59:30 · 2346 阅读 · 0 评论 -
链栈的实现以及基本功能
1、链栈的实现以及基本功能/** * 栈的实现以及基本功能 * 链表栈进栈和出栈你就利用头插法的特点就可以实现了 * 刚好符合栈的后进先出的特点 * 因此,链栈的定义是和链表的定义是一样的 * */#include <stdio.h>#include <mm_malloc.h>#define MAXSIZE 50#define OK 1#define ERROR -1typedef struct LinkStack{原创 2021-09-17 09:31:20 · 140 阅读 · 0 评论 -
共享栈的实现以及基本功能
1、共享栈的实现以及基本功能/** * 共享栈的实现以及基本功能 * 共享栈主要是为了节约内存,但是我们一般只用两个栈共享,多的话其实用的比较多的是链式共享栈,下节我们讲 * */#include <stdio.h>#include <mm_malloc.h>#define MAXSIZE 50#define OK 1#define ERROR -1typedef struct DqStack{ char elem[MAXSIZE];原创 2021-09-16 21:59:40 · 415 阅读 · 0 评论 -
栈的实现以及基本功能
1、栈的实现以及基本功能 /** * 栈的实现以及基本功能 * */#include <stdio.h>#include <mm_malloc.h>#define MAXSIZE 50#define OK 1#define ERROR -1 typedef struct SqeStack{ char elem[MAXSIZE]; int top; }SqeStack,*Sqe;原创 2021-09-16 15:50:27 · 299 阅读 · 0 评论 -
单向循环链表的实现以及基本功能
1、单向循环链表的实现以及基本功能/** * 由于单向循环链表和单向链表基本一样,因此大部分代码我直接复制粘贴单向链表的代码 * 我们只需要把 p->next = NULL或者p = NULL 这两个条件改为 p->next = LL或者p = L 就可以啦 * */#include<stdio.h>#include <mm_malloc.h>#define MAXSIZE 15 // 常量的定义不需要分号也不需要等号 MAXSI原创 2021-09-15 21:00:21 · 199 阅读 · 0 评论 -
利用头指针和尾指针实现单向循环表的合并
1、利用头指针和尾指针实现单向循环表的合并 /** * 利用头指针和尾指针实现循环表的连接 */#include<stdio.h>#include"InstaceCLinkList.c" //对于c语言的导入文件,其实就跟java中的继承可以说一模一样,不仅属性可以继承,而且方法也可以继承int main(){ LinkList createFormTailReturnTail1(LinkList L); LinkList m原创 2021-09-15 20:58:36 · 243 阅读 · 0 评论 -
单向循环链表的实现以及基本功能
1、单向循环链表的实现以及基本功能/** * 由于单向循环链表和单向链表基本一样,因此大部分代码我直接复制粘贴单向链表的代码 * 我们只需要把 p->next = NULL或者p = NULL 这两个条件改为 p->next = LL或者p = L 就可以啦 * */#include<stdio.h>#include <mm_malloc.h>#define MAXSIZE 15 // 常量的定义不需要分号也不需要等号 MAXSI原创 2021-09-15 20:57:20 · 203 阅读 · 0 评论 -
有两个单链表LA,LB,其元素均为非递减有序排列,编写算法将它们合并成一个顺序表LC,要求LC也是非递减有序排列。 例如:LA={2,2,3} LB={1,3,3,4} 则LC={1,2,2,3,3,
1、 有两个单链表LA,LB,其元素均为非递减有序排列,编写算法将它们合并成一个顺序表LC,要求LC也是非递减有序排列。 例如:LA={2,2,3} LB={1,3,3,4} 则LC={1,2,2,3,3,3,4};部分函数代码请参考以下链接:https://blog.csdn.net/qq_50504109/article/details/120288749#include<stdio.h>#include"InstanceLinkList.c"int main(){原创 2021-09-15 15:45:19 · 4072 阅读 · 0 评论 -
单向链表结构的实现以及基本功能
1、心里话与大家分享在代码中所有的注释都是在我第一次自己做的时候,没做对产生了错误之后找到了错误的原因而注释,我相信大家并不是每一句代码都不明白,而是往往和我一样,在某一个地方很疑惑,或者不解,因此,我认为没有必要每一句都注释。我是用耿国华的C语言学习的,我相信我的一些问题也许是大家的一些问题,因此,我很高兴和大家一起分享我的学习心得,让我们一起进步,畅游在算法与数据结构之美中,冲冲冲。2、单向链表结构的实现以及基本功能/** * 在本节我们来学习线性单链表 */#include&原创 2021-09-14 15:31:01 · 332 阅读 · 0 评论 -
有两个顺序表LA,LB,其元素均为非递减有序排列,编写算法将它们合并成一个顺序表LC,要求LC也是非递减有序排列。 例如:LA={2,2,3} LB={1,3,3,4} 则LC={1,2,2,3,3,
1、有两个顺序表LA,LB,其元素均为非递减有序排列,编写算法将它们合并成一个顺序表LC,要求LC也是非递减有序排列。 例如:LA={2,2,3} LB={1,3,3,4} 则LC={1,2,2,3,3,3,4}部分函数的调用请参考:https://blog.csdn.net/qq_50504109/article/details/120273546#include<stdio.h>#include "InstanceLinearList.c" //相当于java中的导包,利用我原创 2021-09-13 20:40:26 · 2490 阅读 · 0 评论 -
顺序结构的实现以及基本功能
1、心里话与大家分享在代码中所有的注释都是在我第一次自己做的时候,没做对产生了错误之后找到了错误的原因而注释,我相信大家并不是每一句代码都不明白,而是往往和我一样,在某一个地方很疑惑,或者不解,因此,我认为没有必要每一句都注释。我是用耿国华的C语言学习的,我相信我的一些问题也许是大家的一些问题,因此,我很高兴和大家一起分享我的学习心得,让我们一起进步,畅游在算法与数据结构之美中,冲冲冲。2、顺序结构的实现以及基本功能#include <stdio.h>#include <mm_m原创 2021-09-13 19:35:55 · 507 阅读 · 0 评论