数据结构与算法
文章平均质量分 90
釉色清风
切忌好高骛远,要有时间有耐心沉淀自己的知识。
从零开始,从简单到复杂。
你不需要很厉害才开始,但是你需要开始才会很厉害。加油加油!
(欢迎一起交流学习吖:+q:1961460852)
展开
-
【数据结构】复习题(二)
设一组初始记录关键字序列为(25,50,15,35,80,85,20,40,36,70),其中含有5个长度为2的有序表,则用归并排序的方法对该记录关键字序列进行一趟归并排序后的结果为()。1.计算如图所示的AOE网中各顶点所表示的事件的发生时间ve(j),vl(j),各边所表示的活动的开始时间e(i),e(j) ,并找出其关键路径。设连通图G中的边集E={(a,(e,d),(d,f),(f, c)}则从顶点a出发可以得到一种深度优先遍历的顶点序列为()。⑤计算活动的时间余量 l(i)-e(i)原创 2024-04-13 22:33:06 · 818 阅读 · 0 评论 -
【C++】弥补C语言的不足(②有默认参数的函数)
运行结果如下图所示:对于上面这个函数,它是全缺省函数。下面,我们再来看一下半缺省函数。对于半缺省函数,缺省值只能从右往左给,必须是连续给。如果从右往左给,会出现歧义。在上面函数的基础上修改即可得,半缺省函数。关于缺省参数,我们需要注意的是,不能声明和定义同时给。若声明和定义同时给,就会出现报错,如下:对于这个问题,由于函数声明在函数定义之前,因此以声明时给出的默认值为准,而忽略定义函数时给出的默认值。原创 2024-03-21 22:18:06 · 394 阅读 · 0 评论 -
【数据结构】复习题(一)
先将第一个记录(设排序码为x)缓存,这样就空出了一个位置,改位置应该存放排序码不大于x的记录,将它放在第一个位置,这样,后面又空出一个位置,它应该放排序码大于x的记录,反过来又从第二个记录开始向右找一个排序码大于x的记录,将它放在后面空出的位置,重复这种两边向中间逼近的过程,可以将所有排序码不大于x的记录放在前面,而所有排序码大于x的记录放在后面,最后当两边逼近于同一位置时,便将暂存的x放于该位置,即达到了划分的目的。重复这样的操作直到剩下两个记录时,再从中选取排序码最小的记录和第in-1个记录交换。原创 2023-12-17 20:28:54 · 7414 阅读 · 3 评论 -
【数据结构】队列
队列是一种特殊的线性表,它的特殊之处在于队列的插入和删除操作分别在表的两端进行。插入的那一端称为队尾,删除的那一端称为队首。队列的插入操作和删除操作分别简称为进队和出队。生活中的排队购物等现象就是队列的例子。它的特点是先到先享受购票服务,对于一个队列k0k1k2...kn−1如果k0那端是队首,kn−1那端是队尾,则k0是这些结点中最先插入的结点,若要进行删除操作,k0。原创 2023-12-13 19:18:23 · 1103 阅读 · 3 评论 -
【数据结构】初识排序 & 直接插入排序
单趟变整体,已经排好序的数组中最开始只有一个元素,即a[0],然后插入第二个元素a[1],进行排序,然后插入第三个元素a[3]进行排序…6>5,即我们要插入的元素6大于end当前所指的元素5,这时,循环停止,我们将我们要插入的元素6插入到end当前所指元素即5的下一个位置即可。插入,插入一个,排一次序,使得这个新插入的数被放在一个合适的位置,再次插入后的使得新的数组是有序的,再插入一个,则再次排序…排序的思想结合这个扑克牌的例子,插入排序,简单理解,就是,对于原来一个已经排好序的有序数组,然后。原创 2023-12-01 22:31:35 · 947 阅读 · 1 评论 -
【数据结构】图<简单认识图>
图图=(V,E其中V={x|x∈某个数据对象集},它是顶点的有穷非空集合;E={(x,y)|x,y∈V}或E={<x,y>|x,y∈V且P(x,y)},它是顶点之间关系的有穷集合,也叫做边集合,P(x,y)表示从x到y的一条单向通路。原创 2023-11-27 20:56:07 · 1059 阅读 · 2 评论 -
【数据结构】栈
栈式一种特殊的线性表,只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除的一端称为栈顶,另一端称为栈底。栈中的数据元素遵循后进先出的原则。原创 2023-11-19 14:19:50 · 304 阅读 · 0 评论 -
【数据结构】二叉树经典例题---<你真的掌握二叉树了吗?>(第二弹)
根据后序遍历,我们可以得之,这棵树的根节点为E,根据根节点E,从中序遍历结果中即可看出,左子树的所有结点为ABCD,右子树的所有结点为FG。因此树只有根结点,或者根结点只有左子树或右子树,依此类推,其子树有同样的性质,任意结点只能有一个孩子,才能满足先序序列和后序序列正好相反。20.将一颗有100个结点的完全二叉树从根这一层开始,每一层上从左到右一次对结点进行编号,根节点的编号为1,则编号为49的结点的左孩子的编号为()第6层的结点从64开始,63+17*2=97,则编号为49的结点的左孩子的编号为98。原创 2023-11-14 01:01:51 · 1907 阅读 · 6 评论 -
【数据结构】二叉树经典例题---<你真的掌握二叉树了吗?>(第一弹)
中序< EFGH>和后序< FHGE >可以得知,< FGH>为E的右子树,然后根据后序 可以得之,G为结点。前序遍历(根左右): a->b->d->g->e->c->f->h。中序遍历(左根右): d->g->b->e->a->f->h->c。后序遍历(左右根): g->d->e->b->h->f->c->a。(6)中序线索化: d->g->b->e->a->f->h->c。前序线索化: a->b->d->g->e->c->f->h。G为子树的结点,根据中序可以得知,F为左结点,H为右结点。原创 2023-11-11 17:32:14 · 1194 阅读 · 0 评论 -
【数据结构】树的基本性质(计算树的总结点数与叶结点数)
性质1 树中的结点数等于所有结点的度数之和加1例如上面这棵树,A的孩子为B、C、D,A的度数为3;B的孩子为E、F,B的度数为2;C的孩子为G,C的度数为1;D的孩子为H、I,D的度数为2…结点数=A的度数+B的度数+C的度数+D的度数+…+J的度数+K的度数+L的度数+M的度数+1也就是结点数等于每个结点的孩子树之和(度之和)再加1,这个1就是根节点。总结点数:n=13;树的度:m=3;n0(度为0的结点数)=7;n1(度为1的结点数)=2;n2(度为2的结点数) =2;原创 2023-11-10 21:26:10 · 3334 阅读 · 4 评论 -
【数据结构】二叉树的遍历递归算法详解
int val;}BTNode;原创 2023-11-09 21:20:04 · 1225 阅读 · 0 评论 -
链式存储方式下字符串的replace(S,T1,T2)运算
char data;原创 2023-10-29 15:32:36 · 243 阅读 · 3 评论 -
动态顺序表基本操作--头插头删尾插尾删
顺序表就是一个数组,有静态的,也有动态的。动态顺序表相比静态顺序表更加灵活,可以进行扩容。原创 2023-09-24 19:47:03 · 146 阅读 · 6 评论 -
静态顺序表及基本操作具体实现
/创建静态线性表int size;}SeqList;#🎑 初始化——置空顺序表//初始化——置空顺序表。原创 2023-09-21 01:53:37 · 240 阅读 · 0 评论 -
静态内存与动态内存 & malloc函数动态分配内存
内存数据结构:栈是一种线性结构,堆是一种树形结构。:栈是由编译器在需要时分配的、不需要时自动清除的变量存储区。栈的内存分配和释放由系统自动管理,不需要程序员手动控制。堆是由程序员手动分配和释放的内存块,通常使用malloc()或new操作符来动态分配内存。:栈中存储的一般是函数参数、函数调用和局部变量等。堆主要用于存储对象实例和数组。:分配和释放内存的操作非常高效。:栈的大小有限,不能动态扩展。:可以动态扩展,分配的内存空间较大,存储自由。原创 2023-09-14 21:56:10 · 238 阅读 · 3 评论 -
算法的时间复杂度
最坏的情况是,查找的字符,我们传递的参数是"d"那么这样就遍历了一次字符数组11次才查找到。这个库函数表示,在字符串s中查找字符c,返回字符c第一次在字符s中出现的位置,如果未找到字符c,则返回NULL。+1=[(n-1)+1]*(n-1)/2=n(n-1)/2次。但由于我们不清楚M和N的具体关系,因此这个算法的时间复杂度为:O(M+N)更准确。最好的情况是,查找的字符,我们传递的是字符"h",那么这样就只进行了1次查找。CPU的运算速度是十分快的。当M=N时,算法的时间复杂度为O(M)或者O(N)原创 2023-09-05 18:46:34 · 520 阅读 · 4 评论 -
数据结构与算法——算法与算法分析
算法,即是对特定问题求解方法和步骤的一种描述。它是指令的有限序列。其中每个指令表示一个或多个操作。简而言之,算法就是解决问题的方法和步骤。原创 2023-05-17 09:03:17 · 675 阅读 · 4 评论