
【408数据结构与算法】
文章平均质量分 62
408数据结构与算法
王同学要努力
24届毕业生 计科专业
无论身处何方,陷于何地,都要向下扎根,向上开花,不负生活,不负自己!
展开
-
【408数据结构与算法】—树和二叉树(二十七)
树是n(n>=0)个结点的有限集。若n=0;称为空树若n>0;则它满足如下两个条件有且仅有一个特定的称为根的结点其余结点可分为m(m>=0)个互不相交的有限集T1,T2,T3……Tm.其中每一个集合本身又是一棵树,并称为根的子树。树是n个结点的有限集,显然,树的定义时一个递归的定义一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。1、每个节点最多有两棵子树,即不存在超过度为2的节点。2、二叉树的子树有左右之分,且左右不能颠倒。原创 2022-11-22 12:11:45 · 629 阅读 · 0 评论 -
【408数据结构与算法】—广义表(二十六)
广义表中的元素可以是原子也可以是子表,针对原子和子表可以分别设计不同的节点结构。由于广义表中的元素本身又可以具有结构,它是一种带有层次的非线性结构,因此难以用顺序存储结构表示,通常采用链式存储结构。an-1的哟选序列,其中每一个ai或者是原子,或者是一个广义表。其中:LS为表名,n为表的长度,每一个ai为表的元素。求表头GetHead(L): 非空广义表的第一个元素,可以是一个单一的元素也可以是一个子表。求表尾GetTail(L):非空广义表除去表头元素以外其他元素所构成的表,表尾一定是一个表。原创 2022-11-21 11:08:07 · 4404 阅读 · 1 评论 -
【408数据结构与算法】—数组和特殊矩阵的压缩存储(二十五)
数组的特点:结构固定,维数和维界不变数组的基本操作:初始化,销毁,取元素、修改元素值。一般不做插入和删除操作一般都是采用顺序存储结构来存储注意:数组可以是多维的,但存储数据元素的内存单元地址是唯一的,因此在存储数组结构之前,需要解决将多维关系映射到一维关系的问题。📢📢例:有数组定义:int a[5],每个元素占用4字节,假设a[0]存储在2000单元,a[3]地址是多少?若多个数据元素的值相同,则只分配一个元素值的存储空间,且零元素不占存储空间矩阵中非零元素的个数较少(一般小于5%)原创 2022-11-21 10:13:41 · 672 阅读 · 0 评论 -
【408数据结构与算法】—串和BF算法(二十四)
串(String):零个或多个任意字符组成的有限序列串中元素逻辑关系与线性表的相同,串可以采用与线性表相同的存储结构。原创 2022-11-20 13:58:27 · 497 阅读 · 2 评论 -
【408数据结构与算法】—基数排序(桶排序)(二十三)
基本思想:分配+收集基数排序也叫桶排序或箱排序,设置若干箱子,将关键字为k的记录放入第k个箱子,然后按序号将非空的连接。基数排序:数字是有范围的,均由0-9这是个数字组成,则只需设置十个箱子,相继按个、十、百……进行排序。C语言代码实现:二、基数排序算法分析时间效率:O(k*(n+m)k:关键字个数m:关键字取值范围为m个值空间效率:O(n+m)稳定性:稳定基数排序算法分析例如:10000个人按照生日排序原创 2022-11-19 19:40:48 · 391 阅读 · 1 评论 -
【408数据结构与算法】—归并排序(二十二)
归并排序示例整个归并排序仅需log2n趟关键问题:如何将两个有序序列合并成一个有序序列时间效率:O(nlogn)C语言代码实现:从上往下从下往上总结原创 2022-11-19 19:22:48 · 502 阅读 · 0 评论 -
【408数据结构与算法】—堆排序(二十一)
从堆的定义可以看出,堆实质是满足如下性质的完全二叉树,二叉树中任一非叶子结点均小于(大于)它的孩子结点C语言代码实现#include #include void HeapAdjust(int a [ ] ,int s,int m) //一次筛选的过程 {int rc,j;j原创 2022-11-19 18:48:13 · 557 阅读 · 1 评论 -
【408数据结构与算法】—选择排序(二十)
选择排序基本思想:在待排序的数据中选出最大(小)的元素放在其最终的位置。选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序法的第一层循环从起始元素开始选到倒数第二个元素,主要是在每次进入的第二层循环之前,将外层循环的下标赋值给临时变量,接下来的第二层循环中,如果发现有比原创 2022-11-15 15:13:11 · 378 阅读 · 4 评论 -
【408数据结构与算法】—快速排序(十九)
基本思想:通过一趟排序,将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录进行排序,以达到整个序列有序。具体实现:选定一个中间数作为参考,所有元素与之比较,小的调到其左边,大的调到其右边(枢轴)中间数:可以是第一个数,最后一个数、最中间一个数、任选一个数等每一趟的子表的形成是采用从两头向中间交替式逼近法快排是在每轮挑选一个基准元素,并让其比他大的元素移动到数列一边,比他小的元素移动到数列的另一边,从而把数列拆解成两个部分,即分治思想。然后运用递归。代码原创 2022-11-15 14:53:51 · 817 阅读 · 2 评论 -
【408数据结构与算法】—冒泡排序(十八)
交换排序思想:两两比较,如果发生逆序则交换,直到所有的记录都排好为止基本思想:每趟不断将记录两两比较,并按前小后大规则交换冒泡排序的优点:每趟结束时,不仅能挤出一个最大值到最后面位置,还能同时部分理顺其他元素一旦某一趟比较时不出现记录交换,说明已经排好序了,就可以结束本算法。三、冒泡算法的改进原创 2022-11-15 13:35:02 · 338 阅读 · 3 评论 -
【408数据结构与算法】—希尔排序 Donald Shell(十七)
先将整个待排记录序列分割成若干子序列,分别进行直接插入排序,待整个序列中的记录基本有序时,再对全体记录进行一次直接插入排序希尔排序算法的特点:希尔排序算法效率与增量序列的取值有关希尔排序是一种不稳定的算法原创 2022-11-15 12:04:25 · 229 阅读 · 1 评论 -
【408数据结构与算法】—折半插入排序(十六)
它所需要的关键码比较次数与待排序对象序列的初始排列无关,仅依赖于对象个数,在插入第i个对象时,需要经过[log2i]+1次关键码比较,才能确定它应插入的位置。在对象的初始排列已经按关键码排好序或接近有序时,直接插入排序比折半插入排序执行的关键码比较次数要少。当n较大的时候,总关键码比较的次数比直接插入排序的最坏情况要好得多,但比其最好的情况要差。折半查找要比顺序查找快,所以折半插入排序就平均性能来说比直接插入排序要快。原创 2022-11-15 11:42:26 · 291 阅读 · 0 评论 -
【408数据结构与算法】—直接插入排序(十五)
直接插入排序—采用顺序查找的方法查找插入的位置直接排序插入算法。原创 2022-11-15 11:24:46 · 238 阅读 · 1 评论 -
【408数据结构与算法】—排序(十四)
排序:将一组杂乱无章的数据按一定规律排列起来。即将无序序列排列成一个有序序列(由小到大或由大到小)的运算。如果参加排序的数据结点包含多个数据域,那么排序往往是针对其中某个域而言的。原创 2022-11-15 10:33:34 · 315 阅读 · 0 评论 -
【408数据结构与算法】—队列的顺序表示和实现(十三)
将队空间设想成一个循坏的表,即分配给队列的m个存储单元可以循坏使用,当rear为maxqsize时,若向量的开始端空着,又可以从头使用空着的空间,当front为maxqsize时,也是一样。队列的物理存储可以用顺序存储结构,也可以使用链式存储结构,相应的,队列的存储方式也分为两种,即顺序队列和链式队列。越努力 越幸运,愿我们都能在看不见的日子里闪闪发光!缺点:浪费时间,每移动一次,队中的元素都要移动。将队中元素依次向队头方向移动。原创 2022-11-11 20:54:08 · 450 阅读 · 0 评论 -
【408数据结构与算法】—栈与递归(十二)
定义:若一个对象部分地包含它自己,或用它自己给自己定义,则称这个对象是递归的。若一个过程直接或间接地调用自己,则称这个过程是递归的过程。虽然有一处以上的递归调用语句,但各次递归调用语句的参数只和主调函数有关,相互之间参数无关,并且这些递归调用语句处于算法的最后。越努力 越幸运,愿我们都能在看不见的日子里闪闪发光!## 一、递归的定义。原创 2022-11-11 17:07:46 · 310 阅读 · 0 评论 -
【408数据结构与算法】—链栈的表示和实现(十一)
越努力 越幸运,愿我们都能在看不见的日子里闪闪发光!链栈是运算受限的单链表,只能在链表头部进行操作。原创 2022-11-11 15:53:51 · 266 阅读 · 0 评论 -
【408数据结构与算法】—栈的抽象数据类型定义(十)
🎬王同学要努力🎥 本文由王同学要努力原创,首发于CSDN🙉🌲JavaScript专栏,超详细!📆越努力 越幸运,愿我们都能在看不见的日子里闪闪发光!✨由于栈本身就是线性表,于是栈也有顺序存储和链式存储两种实现方式栈的顺序存储—顺序栈栈的链式存储—链式栈存储方式:同一般线性表的顺序存储结构完全相同,利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,栈底一般在低地址端。附设top指针:指示栈顶元素在顺序栈中的位置另设base指针、指示栈底元素在顺序栈中的位置。原创 2022-11-11 14:52:56 · 1109 阅读 · 1 评论 -
【408数据结构与算法】—栈和队列的案例引入(九)
假设表达式中允许包含两种括号:圆括号和方括号其嵌套的顺序随意,即:表达式的组成任何一个算术表达式都由操作符、算术运算符和界限符组成。后两者统称为算符。假设舞会上,男士和女士各自排成一队,舞会开始时,依次从男队和女队的队头各出一人配成舞队,如果两队初始人数不同,则较长的一队未配对者等待下一轮舞曲。现要求写一道算法模拟上述舞伴配对的问题。显然,先入队的男士或者女士先出队配成舞伴,因此该问题具有典型的先进先出的特性,可以使用队列作为算法的数据结构。原创 2022-11-09 18:18:19 · 307 阅读 · 3 评论 -
【408数据结构与算法】—栈和队列(七)
栈是一个特殊的线性表,是限定仅在一端(通常是表尾)进行插入和删除操作的线性表。又称为后进先出的线性表,简称LIFO结构。栈是仅在表尾进行插入、删除操作的线性表。表尾即an端称为栈顶Top,表头(a1)端称为栈底Base。插入元素到栈顶即表尾称为入栈从栈顶级表尾删除最后一个元素的操作称为出栈。✳️思考:假设有3个元素a、b、c入栈的顺序是a、b、c则他们的出栈的顺序有几种可能?**队列是一种先进先出的线性表,在表的一端插入(表尾),在另一端(表头)删除。原创 2022-11-09 17:33:30 · 304 阅读 · 0 评论 -
【408数据结构与算法】—单链表的基本操作(六)
从链表的头指针出发,顺着链域next逐个结点往下搜索,直到搜索到第i个结点为止,因此,链表不是随机存取结构。按值查找—根据指定数据获取该数据所在的位置(地址)例如:分别查找30和值为15的元素。插入—在第i个结点前插入值为e的新结点。原创 2022-11-02 18:00:56 · 789 阅读 · 2 评论 -
【408数据结构与算法】—单链表(五)
单链表:每个结点只有一个指针域双链表:每个结点有两个指针域循环链表:链表结点首尾相接。原创 2022-11-02 16:30:11 · 920 阅读 · 2 评论 -
【408数据结构与算法】—顺序表的插入、删除和查找(四)
无论ElementType是基本数据类型还是结构类型,手写代码主要考察学生是否能理解算法思想,不会严格要求代码完全可运行。由于顺序表的各个数据元素在内存中连续存放,因此可以根据起始地址和数据元素大小立即找到第i个元素—随机存取的特性。最坏的情况:新元素插入到表头,需要将原有的n个元素全都向后移动,i=1,循坏n次,最坏的时间复杂度:o(n)平均情况:假设新元素插入到任何一个位置的概率相同,即i=1,2,3,……最好的情况:新元素插入到表尾,不需要移动元,i=n+1,循坏0次,最好的时间复杂度:o(1)原创 2022-11-02 14:27:23 · 710 阅读 · 0 评论 -
【408数据结构与算法】—顺序表的定义(三)
顺序表:用顺序存储的方式实现线性表顺序存储:把逻辑上相邻的元素存储在物理位置上也相邻的存储单元里,元素之间的关系由存储单元的邻接关系来体现。原创 2022-10-31 19:39:08 · 241 阅读 · 1 评论 -
【408数据结构与算法】—线性表的定义和分析(二)
线性表的定义:线性表示具有相同数据类型的n(n>=0)个数据元素的有限🎈几个概念了解一下ai是线性表中的第i个元素线性表中的位序a1是表头元素,an是表尾元素除第一个元素外,每个元素都有且仅有一个直接前趋,除最后一个元素外,每个元素有且仅有一个直接后继注意:位序是从1开始的,数组的下标是从0开始的。原创 2022-10-31 19:08:56 · 176 阅读 · 0 评论 -
【数据结构与算法】—算法与算法分析(一)
数据是能输入计算机且能被计算机处理的各种符号的集合;是信息的载体,是对客观事物符号化的表示;能够被计算机识别,存储和加工数据包括:数值型的数据和非数值型的数据数值型的数据:整数、实数。非数值型的数据:文字、图像、图形、声音等。原创 2022-10-30 18:04:35 · 569 阅读 · 1 评论 -
最大三角形
如果小棍的数量小于 3,则输出小棍的个数不能组成三角形;如果找到最大的三角形,则输出最大三角形的周长是?,并在下一行中输出组成最大三角形的三条边是?,三条边之间用英文逗号隔开并从小到大输出;如果没有找到,则输出没有找到能组成三角形的小棍。有一个游戏,玩法是在一堆长度不一的小棍中找出三根棍子,拼出一个周长最大的三角形。有什么策略能快速的找到三根小棍么?在一行中给出小棍的个数 N,另一行中分别给出 N 个小棍的长度,之间用空格隔开。原创 2022-10-20 22:33:09 · 532 阅读 · 0 评论 -
递归实现排列型枚举
题目:把 1∼n 这 n 个整数排成一行后随机打乱顺序,输出所有可能的次序。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。按照从小到大的顺序输出所有方案,每行 1 个。首先,同一行相邻两个数用一个空格隔开。输入一个整数 n,1≤n≤9。原创 2022-09-30 21:33:35 · 170 阅读 · 0 评论