自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

原创 数据结构(5.3_3)——由遍历序列构造二叉树

若只给出一棵二叉树的前/中/后/层 序遍历序列中的一种,不能唯一确定一棵二叉树 例:前序遍历序列:DAEFBCHGI 中序遍历序列:DAEFBCHGI

2024-07-25 02:49:15 67

原创 数据结构(5.3_2)——二叉树的层次遍历

注意:存的是指针而不是结点。

2024-07-23 02:15:57 264

原创 数据结构(5.3_1)——二叉树的先中后序遍历

先序遍历——根左右——前缀表达式中序遍历——左根右——中缀表达式后序遍历——左右根——后缀表达式二叉树的遍历(手算) 中序遍历代码后序遍历代码总结:

2024-07-23 02:02:55 388

原创 数据结构(5.2_3)——二叉树的存储结构

1%29%5D1。

2024-07-19 23:42:30 367

原创 数据结构(5.2_2)——二叉树的性质

设非空二叉树中度为0、1和2的结点个数分别为n0、n1和n2,则n0=n2+1(叶子结点比二分支结点多一个)

2024-07-17 18:18:31 409

原创 数据结构(5.2_1)——二叉树的基本定义和术语

二叉树是n(n>=0)个结点的有限集合:特点:每个结点至多只有两颗字数;左子树不能颠倒(二叉树是有序树)满二叉树:一棵高度为h,且含有个结点的二叉树特点: 完全二叉树:当且仅当其每个结点都与高度为h的满二叉树中编号为1~n的结点一一对应时,称为完全二叉树特点:二叉排序树 :一棵二叉树或者是空二叉树,或者具有如下性质的二叉树:左子树上所有结点的关键字均小于根结点的关键字:右子树上所有结点的关键字均大于根结点的关键字:左子树和右子树又各是一棵二叉排序树二叉排序树可用于元素的排序、搜索平衡二叉树:树上任一结点的左

2024-07-17 15:42:02 306

原创 数据结构(5.1)——树的性质

1%29%5D。

2024-07-16 11:02:50 250

原创 数据结构(5.0)——树的定义和基本术语

树是n(n>=0)个结点的有限集合,n=0时,称为空树,这是一种特殊情况。在任意一颗非空树中应该满足:有且仅有一个特定的称为根的结点。当n>1时,其余结点可分为m(m>0)个互不相交的有限集合T1、T2、.......,Tm,其中每个集合本身又是一颗树,并且称为根结点的子树 在树形结构中,节点之间的关系可以通过家族关系来类比理解。下面是根据您提供的家族关系术语,对应到树形结构中的节点关系:祖先结点:子孙结点:双亲结点(父结点):孩子结点:兄弟结点:堂兄弟结点:祖先结点:爷爷—>父亲—>你子孙结点: 父亲—>

2024-07-16 10:41:49 325

原创 数据结构(4.5)——next数组的优化

在算出next的解的基础上利用nextVal数组进一步优化算法首先将nextVal[1]无脑等于0;直接从第二个元素开始看,等于,将nextVal数组第next[j]个元素赋值给nextVal[j],如果不相等nextVal[j]的值和next[j]相同。

2024-07-15 12:43:34 322

原创 数据结构(4.4)——求next数组

next[1]都无脑写0next[2]都无脑写1其他next:在不匹配的位置前边,划一条分界线,模式串一步一步往后退,直到分界线之前"能对上",或模式串能完全跨过分界线为止,此时j指向哪儿,next数组值就是多少ababaa的next数组//求next[1]??????->??????/i=1->i=2ababaa-> ababaa //j=0,第一个字符匹配失败,只能匹配下一个子串,++i,++jnext[1]=0;//求next[2]a?????->a??????//i=2。

2024-07-14 09:49:31 385

原创 数据结构(4.3)——KMP算法

KMP算法是一种用于字符串搜索的高效算法,全称为Knuth-Morris-Pratt算法。它通过避免字符串的重复比较,提高搜索效率。KMP算法的核心是“部分匹配”表(也称为“最长公共前后缀”表),这个表用于在搜索过程中确定当发生不匹配时,模式串应该向右滑动多少位。:对于模式串,计算每个位置之前字符串的最长公共前后缀长度。这个表用于在不匹配时决定模式串的滑动距离。:使用Next数组,当模式串与主串在某个位置不匹配时,根据Next数组中的值,将模式串向右滑动相应的位数,而不是重新开始比较。

2024-07-13 12:38:41 740

原创 数据结构(4.2)——朴素模式匹配算法

在主串中找到模式串相同的子串,并返回其所在的位置。子串:主串的一部分,一定存在模式串:不一定能在主串中找到主串长度为n,模式串长度为m朴素模式匹配算法:将主串中所有长度为m的子串(最多对比n-m+1个子串)依次与模式串对比,直到找到一个完全匹配的子串,或所有的子串都不匹配为止 index定位操作就是使用朴素模式匹配算法实现的设主串长度为n,模式串长度为m,则最坏时间复杂度=O(nm)最坏的情况,每个子串都要对比m个字符,共n-m+1个子串,复杂度=O((n-m+1)m)=O(nm) 注:很多时候,n>

2024-07-13 02:49:20 235

原创 数据结构(4.1)——串的存储结构

串(String)的顺序存储是指使用一段连续的存储单元来存储字符串中的字符。计算串的长度动态存储(堆分配存储)注意调用完malloc函数后需要手动用free函数回收内存空间串的链式存储串的链式存储结构是指使用链表来存储字符串中的字符。但这样子的操作会造成内存存储密度过低 所以我们可以优化一下代码,在每个结点多存一些字符 基本操作的实现求子串SubString(&Sub,S,pos,len):求子串。用Sub返回串S的第pos个字符起长度为len的子串

2024-07-13 01:53:33 350

原创 数据结构(4.0)——串的定义和基本操作

串,即字符串(String)是由零个或多个字符组成的有序数列。一般记为S='a1a2....an'(n>=0)其中,S是串名,单引号括起来的字符序列是串的值;ai可以是字母、数字或其他字符;串中字符的个数n称为串的长度。n=0时的串称为空串(用表示)例如:子串:串中任意个连续的字符组成的子序列。例:"IPhone 11"是T的子串主串:包含子串的串。例:T是子串"IPhone 11"的主串字符在主串中的位置:字符在串中的序号。例:"1"在T中的位置是8(第一次出现)

2024-07-12 11:35:43 403

原创 数据结构(3.9_1)——特殊矩阵的压缩存储

281+

2024-07-12 01:20:33 1176

原创 数列结构(3.9)——队列应用

树的层次遍历,也称为树的广度优先遍历,是一种按照树的层次顺序,从上到下、从左到右遍历树中所有节点的算法。在二叉树中,这种遍历方式通常使用队列来实现。这种遍历方式常用于打印树的层级结构,或者在图形用户界面中渲染树形控件。

2024-07-07 18:51:36 228

原创 数据结构(3.8)——栈的应用

栈在表达式求值中的应用运算符在两个操作数中间:运算符在两个操作数后面:运算符在两个操作数前面:例:转换成后缀表式: 15 7 11+ - / 3 * 2 11 + + -"左优先"原则:只要左边的运算符能先计算,就优先计算左边的(可保证运算唯一)从左往右扫描,每遇到一个运算符,就让运算符前面最近的两个操作数执行对应运算,合体为一个操作数注意:两个操作数的左右顺序注意:后缀表达式先弹出的元素是‘右操作数’入栈流程:"右优先"原则:只要右边的运算符能先计算,就优先算右边的注意前缀表达式先

2024-07-04 23:20:13 378

原创 数据结构(3.7)——双端队列

只允许两端插入、两端删除的线性表。双端队列(Double Ended Queue, 简称 DEQUEUE 或 deque)是一种允许从两端插入和删除的线性数据结构。它是一种特殊的队列,可以在两端进行操作,这意味着它既可以从队尾入队和出队,也可以从队头入队和出队。双端队列在功能上相当于队列和栈的混合体,因为它可以用来实现队列和栈的某些操作。双端队列的重要特性包括:双端队列的主要操作包括:双端队列可以用数组或链表来实现。数组实现的双端队列可以在常数时间内在两端进行操作,但是如果数组满了需要扩容,这可能需要O(n

2024-07-03 15:26:54 370

原创 数据结构(3.6)——队列的链式实现

队列的链式表示为链队列,它实际上是一个同时有队头指针和队尾指针的单链表 初始化(带头结点) 初始化(不带头结点)入队(带头结点)入队(不带头结点)出队(带头结点)出队(不带头结点)总结

2024-07-03 12:48:30 258

原创 数据结构——队列练习题

首先我们考虑的情况下在牺牲一个存储单元rear指向队尾元素后一个位置该怎么实现队列的基本操作,当rear指向队尾元素的后一位时,队列的实现需要牺牲一个存储单元来区分队列是空还是满在这个实现中,队列满的条件是队尾指针后移一位后等于队头指针。这意味着队列的实际容量是,因为一个存储单元被用来区分队列是空还是满。

2024-07-02 13:22:41 456

原创 数据结构(3.5)——队列的顺序实现

队列的初始化操作和判空循环队列——入队操作队列的入队操作只能从队尾入队(插入)该函数中的这一行代码实则是将一个顺序队列变成了循环队列读取队头的操作和出队操作很类似,只是将表格引用符号去掉,并且不要让队头指针往后移就行计算队列元素个数:方法二:增加一个辅助变量size判断空判满由于刚刚第一种方法判空和判满会造成一些不必要的内存空间浪费,于是我们在队列中添加一个size来表示队列的长度,并且记录队列的入队和出队变化 例子: 总结:

2024-07-01 14:13:25 255

原创 数据结构(3.4)——队列的基本概念

队列(Queue)是只允许在一端进行插入(入队),另一端删除(出队)的线性表(操作受限)特点:先进入队列的元素先出队,先进先出 First In FIrst Out(FIFO),例如食堂打饭,高速公路过站点重要术语:队头,队尾,空队列InitQueue(&Q):初始化队列,构造一个空队列QDestoryQueue(&Q):销毁队列,销毁并释放队列Q所占用的内存空间EnQueue(&Q,x):入队,若队列Q未满,将x加入,使之成为新的队尾DeQueue(&Q,&x):出队,若队列Q非空,删除队头元素,并用x返

2024-07-01 13:20:28 195

原创 数据结构(3.3)——栈的链式存储结构

采用链式存储的栈成为链栈的优点是便于多个栈共享存储空间和提高其效率,且。通常采用单链表实现。

2024-06-30 20:22:15 302

原创 数据结构(3.2)——栈的顺序存储实现

初始化操作为什么top指针初始化要指向-1具体来说,有以下几点原因:空栈的表示: 初始时,栈中没有元素,将栈顶指针设置为-1可以清楚地表示栈是空的。因为数组下标通常是从0开始的,所以-1不可能是任何有效元素的数组下标。简化入栈操作: 当第一个元素入栈时,可以直接将栈顶指针加1,然后将元素放入数组下标为0的位置。如果栈顶指针初始为0,那么在第一个元素入栈时,就需要先减1再赋值,这样的逻辑处理相对复杂。统一性: 初始化为-1可以使得入栈(push)和出栈(pop)操作统一。无论是入栈还是出栈,都可

2024-06-30 00:22:50 1077

原创 数据结构(3.1)——栈的基本概念

栈(Stack)是只允许一端进行插入或删除操作的线性表栈顶、栈底、空栈栈的逻辑结构与普通线性表相同但是栈对数据的运算和普通线性表有区别,例如插入、删除等操作...

2024-06-28 01:55:47 280

原创 数据结构(2.8)——顺序表和链表的比较

顺序表和链表各有优势和局限性,选择哪种数据结构应基于具体的应用场景和需求。顺序表适合频繁随机访问和元素数量相对固定的场合,而链表则更适合元素数量动态变化和频繁进行插入删除操作的场景。在实际应用中,根据数据的特点和操作的需求来选择最合适的数据结构是非常重要的。

2024-06-26 14:03:13 285

原创 数据结构(2.7)——循环链表

循环单链表与单链表的主要区别在于它们的结构特点。:在单链表中,最后一个节点的指针域通常指向null,表示链表的结束。单链表可以简单地理解为链表的一个“线性”结构,从头节点开始,通过每个节点的指针域顺序访问下一个节点,直至最后一个节点。:循环单链表则不同,其最后一个节点的指针域不是指向null,而是指向链表的第一个节点,形成一个环。这意味着从循环单链表的任何一个节点出发,都可以遍历整个链表。:在循环单链表中,因为没有null指针来判断链表的结束,所以在遍历时需要用其他方式来判断是否回到了起点。

2024-06-26 13:04:08 867

原创 数据结构(2.6)——双链表的实际应用

函数中,首先初始化一个链表,然后循环5次,每次在链表头节点后插入一个新节点,节点数据为从0到4的整数。插入成功后,打印整个链表。代码还包含了一些错误处理,如内存分配失败或插入节点失败时,会打印提示信息,并释放已分配的内存。这段代码实现了一个双向链表的数据结构,包括基本的初始化、插入、打印、删除和销毁功能。

2024-06-26 03:54:54 220

原创 数据结构(2.5)——双链表

由于单链表结点中只有一个指向其后继的指针,使得单链表只能从前往后依次遍历,无法逆向检索,于是为了克服单链表的这个缺点,我们引入了双链表,双链表结点中有两个指针prior和next,分别指向其直接前驱和直接后继。双链表的插入当 是最后一个节点时, 的 指针会自动设置为 (因为 是 ) 这段代码定义了一个名为 的函数,其目的是在双向链表中删除节点 的后继节点。下面是代码的逐步解析:函数接受一个指向 类型的指针 作为参数,这个指针指向链表中的一个节点。函数首先检查 是否为 。

2024-06-25 14:36:26 705

原创 数据结构(2.4)——单链表的查找操作

在这个函数中, 是一个指向链表头结点的指针, 是要查找的元素的位序(从1开始计数)。函数从链表的头结点开始遍历链表,检查每个结点,直到到达第 个结点或链表结束。如果找到第 个结点,循环结束,并返回该结点的指针;如果链表长度小于 ,循环会因为 变为 而结束,并返回 。注意,这里的位序是从1开始计数的,因此头结点被视为第0个结点,而不是第1个结点。 在这个函数中, 是一个指向链表头结点的指针, 是要查找的数据。函数从链表的第一个实际数据结点(即头结点的下一个结点)开始遍历链表,检查每个结点的数据

2024-06-24 15:41:28 560

原创 数据结构(2.3)——单链表的插入删除

首先我们现在链表初始化函数中为链表分配一个头结点这段代码定义了一个名为 的函数,其目的是在带有头结点的单链表的第 个位置插入一个元素 。函数的返回类型是 ,表示插入操作是否成功。下面是函数的详细分析:函数参数:函数开始:初始化变量:遍历链表:检查位置合法性:插入新结点:返回结果:这个函数的关键点是它处理了链表的插入操作,并且考虑了链表带有头结点的情况。头结点是一个不存储数据的特殊结点,它简化了链表操作,特别是插入和删除操作,因为头结点确保了链表至少有一个结点,不会出现空链表的情况。我们在初始

2024-06-24 03:00:39 845

原创 数据结构(2.2)——单链表的建立

对头结点的后插操作。

2024-06-23 15:38:59 218

原创 数据结构(2.1)——单链表的定义

typedef struct LNode{ //定义单链表结点类型//每个结点存放一个数据元素//指针指向下一个结点//LNode和* LinkList是两个由typedef定义的类型别名。LNode为结点,LinkList为一个单链表要表示一个单链表时,只需要声名一个头指针L,指向单链表的第一个结节LNode *L;//声明一个指向单链表第一个结点的指针或LinkList L;//声明一个指向单链表第一个结点的指针。

2024-06-22 15:22:36 155

原创 数据结构(1.3)——顺序表的查找功能

按位查找操作。获取表L中第i个位置的元素的值时间复杂度:O(1)

2024-06-21 17:16:33 294

原创 数据结构(1.2)——顺序表的插入删除功能

上面的代码实现了顺序表中的插入原理,但是还是有一些缺点,比如无法判断输入值i的合法性,于是为了提高代码的健壮性我们将ListInsert函数的类型改为bool类型。顺序表插入操作的时间复杂度分析分析时间复杂度我们需要关注最深层循环语句中的执行次数与问题规模n的关系,而这篇代码中的最深层循环语句是最好情况:新元素插入到表尾,不需要移动元素。i=n+1,循环0次:最好时间复杂度=O(1)最坏情况:新元素插入表头,需要将原有的n个元素全部向后移动。i=1,循环n次:最坏时间复杂度=O(n)平均情况

2024-06-21 16:15:09 212

原创 数据结构(1.1):顺序表的定义和内存分布形式

顺序表是一组地址连续的存储单元格依次存储线性表中的数据元素,从而使得逻辑上相邻两个元素在物理位置上也相邻。表中元素的逻辑顺序与其存储的物理顺序相同。随机访问,即可以在O(1)时间内找到第i个元素(代码实现:data[i-1];存储密度高,每个节点只存储数据元素扩展容量不方便(静态分布不能扩展容量,动态分布扩展长度所需的时间复制度也比较高)

2024-06-21 04:20:44 642

原创 计算机复习题

37. 在JAVA中ArrayList类实现了可变大小的数组,便于遍历元素和随机访问元素,已知获得了ArrayList类的对象bookTypeList,则下列语句中能够实现判断列表中是否存在字符串“小说”的是(   )。11. 在软件测试方法中, 白盒测试法把程序看成是一个透明的盒子, 以程序的(   )和处理过程为依据, 对程序的所有逻辑路径进行细致的检查。53. ( )Java的类库是系统提供的已实现的标准类的集合,是Java编程的API,它可以帮助开发者方便、快捷地开发Java程序。

2023-11-18 23:39:50 139 1

原创 软件测试基础题目

正交表的表示形式为Ln(tc),其中L表示正交表,n为正交表的行数,正交表的每一行可以设计一个测试用例,因此行数n也表示可以设计的测试用例的数目。软件的因子及因子的状态会有很多,每个因子及其状态对软件的作用也大不相同,如果把这些因子及状态都划分到因子-状态表中,最后生成的测试用例会相当庞大,从而影响软件测试的效率。条件覆盖要求设计足够多的测试用例,使得判定语句中所有条件的可能取值至少出现一次,同时,所有判定语句的可能结果也至少出现一次,它弥补了判定覆盖和条件覆盖的不足之处。相比于条件覆盖、判定覆盖,判定。

2023-11-18 23:16:58 3153 3

原创 软件测试的一些经典题目

有限区间:划分为一个有效等价类和两个无效等价类,有效等价类为指定的取值区间,而两个无效等价类分别为有限区间的两边的值。18. 点击率是Web应用特有的一个指标。11.软件存在缺陷是由于开发人员水平有限引起的,一个非常优秀的程序员可开发出零缺陷的软件。28.在Transact-SQL语法中,用来插入数据的命令是(A),用于更新的命令是(A)。32.在index.wxml列表中,对index.js中的基础数据进行的绑定语法是(A)。29.在小程序的index.json文件中,(A)属性用来设置导航栏标题。

2023-11-18 22:40:56 366

原创 Python网络连接

【代码】Python网络连接。

2023-11-18 08:48:09 45

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除