
数据结构 学习笔记
文章平均质量分 92
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
梁辰兴
深情不及久伴,紘爱无需多言。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据结构:图
图(Graph)是一种比树更复杂的非线性数据结构,它通过顶点和边的关系表达多对多的关联关系,广泛应用于社交网络、路径规划、电路设计等领域。图由顶点集和边集组成,记为G = (V, E)顶点集(V):由具有相同特性的数据元素组成的非空有限集合,每个元素称为顶点(Vertex);边集(E):由顶点之间的关系组成的有限集合,每条关系称为边(Edge)。无向图:边是无序对,记为(v, w),表示顶点v和w之间存在双向关系(如朋友关系);有向图:边是有序对,记为<v, w>原创 2025-08-12 23:39:57 · 713 阅读 · 0 评论 -
数据结构:树与二叉树
树是一种非线性数据结构,它通过层次化的关系组织数据,广泛应用于文件系统、数据库索引、人工智能等领域。与线性表的“一对一”关系不同,树的核心是“一对多”的层级关系。树(Tree)是由n(n≥0)个节点组成的有限集合。当n=0时,称为空树;有且仅有一个特定的节点称为根(Root),它没有前驱节点;其余节点可分为m(m≥0)个互不相交的有限集合T₁,T₂,…,Tₘ,每个集合本身又是一棵树,称为根的子树(Subtree)。示例。原创 2025-08-11 23:20:12 · 1254 阅读 · 0 评论 -
数据结构:串、数组与广义表
串(String),又称字符串,是由零个或多个字符组成的有限序列。通常记为S 是串名;双引号(或单引号)是串的定界符,不属于串的内容;aᵢ(1≤i≤n)是单个字符,称为串的元素;n 是串的长度,当 n=0 时称为空串(记为 “”)。串的核心特点是元素的同质性——所有元素都是字符,且元素间存在明确的顺序关系。例如,“Hello” 是长度为5的串,由字符 ‘H’、‘e’、‘l’、‘l’、‘o’ 组成。空串(“”)与空格串(" ")不同,空格串的长度为空格的个数(如 " " 长度为2);原创 2025-08-11 21:59:28 · 931 阅读 · 0 评论 -
数据结构:栈和队列
栈和队列是两种特殊的线性表,它们在操作上具有严格的限制,广泛应用于算法设计、系统开发等领域。栈(Stack)是一种限定仅在表尾进行插入和删除操作的线性表,其核心特点可概括为**“后进先出”(Last In First Out,LIFO)**。关键术语允许操作的一端称为栈顶(Top);另一端称为栈底(Bottom);插入元素的操作称为入栈(Push);删除元素的操作称为出栈(Pop);不含元素的栈称为空栈。示例:叠放的盘子,只能从最上方取放,最后放入的盘子最先被取出。数学描述。原创 2025-07-15 21:51:23 · 1028 阅读 · 0 评论 -
数据结构:线性表
由n(n≥0)个具有相同特性的数据元素组成的有限序列。有序性:元素之间存在明确的先后顺序,第一个元素无前驱,最后一个元素无后继,其余元素有且仅有一个前驱和一个后继(如数组[1,2,3]中,2的前驱是1,后继是3)。同质性:所有元素属于同一数据类型(如整数列表、字符串列表)。有限性:元素个数n为非负整数,当n=0时称为“空表”。线性表是现实世界中“序列关系”的抽象,例如学生点名册(按学号排序)、购物清单(按添加顺序)等均符合其特征。原创 2025-07-15 21:46:37 · 803 阅读 · 0 评论 -
数据结构:导论
本文系统介绍了数据结构的核心内容,包括:(1)数据结构三大研究维度:数据组织形式、操作体系设计和性能优化理论;(2)基本概念与术语,如数据元素、逻辑结构(线性/树形/图状)和存储结构(顺序/链式);(3)抽象数据类型的表示与实现,并以栈为例说明;(4)算法特性与评价标准,重点分析时间/空间复杂度(大O表示法)。数据结构与算法互为支撑,是计算机科学的理论基础和实践工具,为复杂系统开发提供关键方法论。原创 2025-07-11 22:07:56 · 693 阅读 · 0 评论 -
数据结构:最小生成树—Prim(普里姆)与Kruskal(克鲁斯卡尔)算法
维度Prim 算法Kruskal 算法贪心策略顶点扩展边排序数据结构优先队列(最小堆)并查集时间复杂度(O(E \log V))(堆优化)(O(E \log E))(排序主导)适用图类型稠密图稀疏图。原创 2025-06-28 22:21:52 · 1322 阅读 · 0 评论 -
数据结构:图—AOE-网题型解析
AOE-网通过量化活动依赖关系和时间参数分析,将工程管理从“经验驱动”转化为“数据驱动”。无论是建筑工程、软件开发还是项目调度,掌握关键路径分析都能帮助精准把控进度,避免因活动延误导致的全局风险。💡 下期将拆解更多数据结构实战案例,欢迎关注~原创 2025-06-17 10:05:15 · 869 阅读 · 0 评论 -
数据结构:前、中与后缀表达式
常见的表达式表示形式有三种:前缀表达式、中缀表达式和后缀表达式。中缀表达式转后缀表达式是一个重要的操作,通常使用栈来实现。中缀表达式是我们日常使用最频繁的表达式形式,运算符位于两个操作数中间。:把中缀表达式倒过来处理,转换逻辑类似"中缀转后缀",最后再翻回来。:用栈存储运算符,遇到操作数直接扔出去,遇到运算符就和栈顶比优先级。:倒着看后缀表达式,用栈存操作数,遇到运算符就弹出两个操作数组合。:从左到右扫描,遇到运算符就把后面两个操作数用括号包起来。前缀表达式又称波兰表达式,运算符位于操作数之前。原创 2025-06-12 08:00:00 · 903 阅读 · 0 评论 -
数据结构实验6.2:稀疏矩阵的基本运算
从输入获取矩阵的行数、列数和非零元素个数,然后依次输入每个非零元素的行索引、列索引和值,按照插入算法的逻辑将元素插入到三元组数组中。采用结构体来定义三元组存储结构,结构体包含行索引、列索引和元素值三个成员,同时为了方便记录矩阵的行数、列数和非零元素个数,可再设计一个结构体来管理三元组数组。对于矩阵A的每一个非零元素,遍历矩阵B中相同列索引(即A元素的列索引等于B元素的行索引)的非零元素,将它们的值相乘并累加到结果矩阵对应位置。遍历三元组数组,按照矩阵的格式输出非零元素,对于非非零元素位置输出0。原创 2025-04-19 21:40:09 · 1037 阅读 · 0 评论 -
数据结构实验10.2:排序应用
它的第一趟对序列中的所有奇数项i进行扫描,第二趟对序列中的所有偶数项i进行扫描。第三趟又对所有的奇数项,第四趟对所有的偶数项,……,如此反复,直到整个序列全部排好序为止。(3)当待排序序列的排序码初始排列是从小到大有序,或从大到小有序时,在奇偶交换排序过程中的排序码比较次数是多少?5,创建C++程序文件,右击【源文件】——选择【添加】——【新建项】。2,之前创建过项目的话,直接打开即可,这里选择【创建新项目】。4,编辑好项目的名称和存放路径,然后单击【创建】按钮。7,编写代码,单击运行按钮,运行程序。原创 2025-05-20 09:16:15 · 1008 阅读 · 0 评论 -
数据结构实验10.1:内部排序的基本运算
5,创建C++程序文件,右击【源文件】——选择【添加】——【新建项】。2,之前创建过项目的话,直接打开即可,这里选择【创建新项目】。1,双击Visual Studio程序快捷图标,启动程序。4,编辑好项目的名称和存放路径,然后单击【创建】按钮。6,输入项目名称9-3.cpp,单击【添加】按钮。3,单击选择【空项目】——单击【下一步】按钮。7,编写代码,单击运行按钮,运行程序。2,编写代码测试测试的结果。1,实验要求的测试结果。原创 2025-05-19 21:36:42 · 1055 阅读 · 0 评论 -
数据结构实验9.3:散列运算的实现
本实验旨在通过编程实现散列表的各项基本操作,包括建立、查找、插入、删除、求长度和输出键值等。实验采用链地址法解决散列冲突,并定义了散列表的数据结构,包括元素类型、链结点类型和散列表类型。实验要求设计基于链地址法的散列表数据结构,并在每项操作后即时输出散列表中的所有键值,以便观察操作结果。此外,实验还要求完善参考程序中的空缺语句,并自行设计测试数据以分析散列表的性能。通过上机调试和测试,记录不同数据下的操作性能,分析散列表在查找、插入和删除操作中的表现,特别是冲突对性能的影响。实验步骤包括启动Visual S原创 2025-05-14 08:54:44 · 976 阅读 · 1 评论 -
数据结构实验9.2:动态查找表的基本操作
本实验旨在通过实践操作,深入理解并掌握静态查找表方法、二叉排序树的构造与操作以及散列表的基本技术。实验内容包括基于给定关键字序列构建二叉排序树,并完成插入、删除、查找等基本操作,同时进行中序遍历输出有序序列。实验要求设计二叉排序树的链式存储结构,分析算法的时间与空间复杂度,并通过上机调试测试程序,验证算法的正确性与效率。示例代码展示了二叉排序树的插入与查找算法的实现,通过逐步查找与比较,确保数据的有序性与查找效率。实验通过理论与实践结合,提升对数据结构与算法的理解与应用能力。原创 2025-05-11 16:03:36 · 1342 阅读 · 1 评论 -
数据结构实验9.1:静态查找表的基本操作
在插入元素时,从第二个元素开始,将当前元素与已排序部分的元素依次比较。若当前元素小于比较元素,则将比较元素后移一位,继续向前比较;使用有序直接插入法,将给定的关键字序列逐个插入到顺序表中,确保顺序表中的元素始终保持有序状态。具体实现时,从第二个元素开始,将每个元素与已排序部分的元素进行比较,找到合适的位置插入,从而构建出有序顺序表。:此算法通过设置监视哨,从表尾开始向前比较,减少了每次循环都要判断是否越界的操作,提高了查找效率。位置),从表尾向前比较,当找到相等元素时,返回其在表中的位置;原创 2025-05-11 16:02:33 · 1266 阅读 · 0 评论 -
数据结构实验8.3:求解AOE网的关键路径
(4)根据各顶点的ve、vl值,求每条弧s的最早开始时间e(s)和最迟开始时间l(s),若某条弧满足条件e(s)=l(s),则为关键活动。(1)输入e条弧<j,k>,建立AOE网的存储结构,顶点数为n,顶点从0开始编号,设源点为v0、汇点为vn-1;如果得到的拓扑有序序列中顶点个数小于网中的顶点数,则说明网中存在环,不能求关键路径,算法终止;(5)设计测试用例,上机调试、测试完善后的参考程序,保存并打印测试结果,对结果进行分析,包括算法效率分析。4,编辑好项目的名称和存放路径,然后单击【创建】按钮。原创 2025-05-05 09:24:08 · 922 阅读 · 0 评论 -
数据结构实验8.2:求解图的最小生成树
② 在E中选择代价最小的边,若该边依附的顶点落在T中不同的连通分量上,则将此边加入到T中,否则舍去此边而选择下一条代价最小的边。① 假设连通网N=(V,E),则令最小生成树的初始状态为只有n个顶点而无边的非连通图T=(V,{}),图中每个顶点自成一个连通分量。在所有u∈U,v∈V-U的边(u,v)中找一条代价最小的边(u0 ,v0),将其并入集合TE,同时将v0并入U集合。当U=V则结束,此时TE中必有n-1条边,则T=(V,{TE})为N的最小生成树。6,输入项目名称8-2.cpp,单击【添加】按钮。原创 2025-05-05 09:17:57 · 840 阅读 · 0 评论 -
数据结构实验8.1:图的基本操作
③ 依次从这些邻接点(在步骤②中访问的顶点)出发,访问它们的所有未被访问的邻接点;依此类推,直到图中所有访问过的顶点的邻接点都被访问;④ 若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行广度优先搜索遍历,直到图中所有顶点均被访问过为止。③ 若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。为实现③,需要保存在步骤②中访问的顶点,而且访问这些顶点的邻接点的顺序为:先保存的顶点,其邻接点先被访问。直至图中和v有路径相通的顶点都被访问;原创 2025-05-05 09:09:03 · 1212 阅读 · 0 评论 -
数据结构:实验7.3Huffman树与Huffman编码
依据Huffman树的构造和编码生成算法逻辑,准确填入相应语句,确保程序能够正确实现从字符权值到Huffman树构建,再到编码生成的完整过程。通过设计Huffman树的数据存储结构,实现对给定字符频率构造Huffman树及生成Huffman编码的过程,提升对数据压缩等实际问题的解决能力,培养算法设计、调试和分析的综合素养。:除了给定的6种字符及其频率数据外,额外设计多组不同规模和权值分布的测试数据,包括字符种类较少、较多,权值分布均匀、不均匀等情况,以全面测试程序的正确性和鲁棒性。原创 2025-04-29 11:58:51 · 1168 阅读 · 0 评论 -
数据结构实验7.1:二叉树的遍历
(3)采用链栈的迭代方法分别实现对上述二叉树的先序遍历、中序遍历、后序遍历,输出遍历序列:借助链栈这种数据结构,模拟递归调用的过程,实现二叉树的先序、中序和后序遍历。在遍历过程中,通过栈来保存节点信息,控制遍历的顺序和流程,输出相应的遍历序列,体会非递归迭代方法的实现原理和优势。(2)采用递归方法分别实现对上述二叉树的先序遍历、中序遍历、后序遍历,输出遍历序列:利用递归的特性,按照先序(根-左-右)、中序(左-根-右)、后序(左-右-根)的顺序访问二叉树的节点,并将节点值输出,形成相应的遍历序列。原创 2025-04-20 21:24:07 · 1211 阅读 · 0 评论 -
数据结构实验7.2:二叉树的基本运算
(5)设计测试数据,上机调试、测试完善后的参考程序,保存并打印测试结果,对算法性能进行分析。5,创建C++程序文件,右击【源文件】——选择【添加】——【新建项】。(5)用按层次顺序遍历二叉树的方法,统计树中具有度为1的结点数目;2,之前创建过项目的话,直接打开即可,这里选择【创建新项目】。4,编辑好项目的名称和存放路径,然后单击【创建】按钮。(3)设计主函数以完成对上述算法的调用,并输出结果;3,单击选择【空项目】——单击【下一步】按钮。7,编写代码,单击运行按钮,运行程序。(2)求二叉树中结点的总数;原创 2025-04-19 21:41:52 · 464 阅读 · 0 评论 -
数据结构实验6.1:矩阵的螺旋方阵输出
已知一个6×6的螺旋方阵如下,编程实现输出n×n(n<20)阶的螺旋方阵(逆时针方向旋转)。5,创建C++程序文件,右击【源文件】——选择【添加】——【新建项】。2,之前创建过项目的话,直接打开即可,这里选择【创建新项目】。1,双击Visual Studio程序快捷图标,启动程序。4,编辑好项目的名称和存放路径,然后单击【创建】按钮。3,单击选择【空项目】——单击【下一步】按钮。7,编写代码,单击运行按钮,运行程序。6,输入项目名称,单击【添加】按钮。2,编写程序运行后的效果。1,实验要求的运行效果。原创 2025-04-13 19:10:15 · 1290 阅读 · 0 评论 -
数据结构实验5.2:串的模式匹配
依此类推,直至模式T中的每个字符依次和主串S中的一个连续的字符序列相等,则匹配成功,函数值为与模式T中第一个字符相等的字符在主串S中的序号,否则称为匹配不成功,函数值为0。该算法类似将模式作为一个窗口在主串中进行从前至后滑动,当窗口中的所有字符对应相等,则匹配成功,函数值为窗口左边第一个字符在主串中对应的位序,否则,窗口继续向右滑动,直至匹配成功或者不成功。分别用朴素的模式匹配算法和改进的模式匹配(KMP)算法判断主串S和子串T是否匹配,若匹配,输出子串T的第一个字符在主串S中的位置;(3)完善参考程序。原创 2025-04-13 19:09:36 · 1037 阅读 · 0 评论 -
数据结构实验5.1:串的基本操作
(2)设计实现串的创建、求串长、串比较、串联接、求子串、子串插入、子串删除、子串替换等几种基本操作的算法;编程实现串的创建、求串长、串比较、串联接及求子串等基本操作,并设计一个菜单调用这些基本操作。5,创建C++程序文件,右击【源文件】——选择【添加】——【新建项】。2,之前创建过项目的话,直接打开即可,这里选择【创建新项目】。4,编辑好项目的名称和存放路径,然后单击【创建】按钮。3,单击选择【空项目】——单击【下一步】按钮。7,编写代码,单击运行按钮,运行程序。6,输入项目名称,单击【添加】按钮。原创 2025-04-10 13:16:49 · 940 阅读 · 0 评论 -
数据结构实验4.2:循环队列的基本操作
(5)要求每完成一个步骤就必须及时输出队列中元素以便观察操作结果:在初始化队列、进队、出队、建立队列等操作完成后,立即调用输出队列元素的函数,显示当前队列的内容,方便直观地了解操作对队列的影响。(3)在参考程序中的下划线处填写适当的语句,完成参考程序:仔细分析参考程序的逻辑,根据设计的存储结构和算法,在相应位置补充缺失的代码,使程序完整且能正确运行。(6)调用进队函数建立一个队列:通过多次调用进队函数,将多个元素依次添加到循环队列中,构建出一个完整的循环队列。(2)进队操作:将新的元素添加到循环队列中。原创 2025-04-10 12:41:13 · 824 阅读 · 0 评论 -
数据结构实验4.3:利用队列实现杨辉三角的输出
每次生成新的一行时,利用队列保存上一行的元素,并通过相邻元素相加的操作来得到当前行的元素。同时,队列保证了元素处理的顺序性,使得我们能够按照杨辉三角的规律依次生成和输出每一行的数字,避免了复杂的数据管理和混乱的计算顺序。通过使用队列这种数据结构,我们可以按照一定的逻辑顺序来生成和输出杨辉三角的每一行数字,从而实现杨辉三角的可视化展示。使用结构体来定义队列的存储结构,队列包含一个指向存储元素的指针,队头指针,队尾指针以及队列的容量等信息。4.右击”源文件“——”添加“——选择”新建项“。原创 2025-04-09 20:50:44 · 967 阅读 · 0 评论 -
数据结构实验4.1:链队列的基本操作
(4)设计测试用例,上机调试、测试参考程序,记录测试结果,对结果进行分析:设计多种测试用例,包括空队列的操作、正常队列的进队和出队、边界情况(如队列满、队列空时的非法操作)等。(5)要求每完成一个步骤就必须及时输出队列中元素以便观察操作结果:在初始化队列、进队、出队、建立队列等操作完成后,立即调用输出队列元素的函数,显示当前队列的内容,方便直观地了解操作对队列的影响。(5)输出队列中的所有元素:遍历链队列,按顺序输出队列中存储的所有元素,以便直观地查看队列的内容。编程实现有关链队列的下列基本操作。原创 2025-04-09 20:26:42 · 1184 阅读 · 0 评论 -
数据结构实验3.3:求解迷宫路径问题
根据要求,走步顺序为向下、向右、向上、向左。其中,每个元素表示在x和y方向上的偏移量。原创 2025-04-09 20:20:32 · 1280 阅读 · 0 评论 -
数据结构实验2.3:链表逆置问题
在数据处理中,常常会遇到需要对链接存储的线性表进行操作的情况。本次任务聚焦于将链接存储的线性表进行逆置。具体来说,就是要改变线性表中结点的顺序,使得原来的最后一个结点变为新线性表的第 1 个结点,原来倒数第 2 个结点变为新线性表的第 2 个结点,依此类推,从而实现整个线性表的逆置。5.选择”C++文件“——输入文件名——单击”添加“按钮。3.选择”空项目“——输入项目名称——单击”确认“按钮。4.右击”源文件“——”添加“——选择”新建项“。9.单击绿色小三角,运行项目。2.编写程序运行后的效果。原创 2025-04-09 20:13:42 · 1016 阅读 · 0 评论 -
数据结构实验3.2:链栈的基本操作与括号匹配问题
在算法中,遍历表达式中的每个字符,遇到左括号时将其进栈,遇到右括号时,检查栈顶元素是否为对应的左括号,若是则出栈,若不是则说明括号不匹配。使用一个结构体来表示链栈的节点,包含一个字符类型的数据域用于存储括号,以及一个指向下一个节点的指针域。:设计一种合适的链栈存储结构,它要能有效存储括号信息,包含数据域和指向下一个节点的指针域,方便进行进栈、出栈等操作。输入参数为表达式和表达式的长度,函数将根据括号配对情况给出相应结果。,在最坏情况下,表达式中的所有左括号都需要进栈。:将新的括号元素添加到链栈的顶部。原创 2025-04-07 21:37:11 · 1070 阅读 · 0 评论 -
数据结构实验3.1:顺序栈的基本操作与进制转换
在数据处理中,常常会遇到需要对链接存储的线性表进行操作的情况。本次任务聚焦于将链接存储的线性表进行逆置。具体来说,就是要改变线性表中结点的顺序,使得原来的最后一个结点变为新线性表的第 1 个结点,原来倒数第 2 个结点变为新线性表的第 2 个结点,依此类推,从而实现整个线性表的逆置。5.选择”C++文件“——输入文件名——单击”添加“按钮。3.选择”空项目“——输入项目名称——单击”确认“按钮。4.右击”源文件“——”添加“——选择”新建项“。9.单击绿色小三角,运行项目。2.编写程序,运行效果。原创 2025-04-07 21:08:57 · 1236 阅读 · 0 评论 -
数据结构实验2.3:Josephus问题求解
在这个循环单链表中,每个结点都应该包含三个重要成员:一个用于记录该结点对应人的序号(方便识别是哪个人),一个用于存储该人持有的密码(影响后续报数的 m 值),还有一个指针成员,用于指向下一个结点,从而将所有结点连接成一个环形结构。该算法要能够按照问题描述的规则,从初始的 m 值开始,通过报数、出圈、更新 m 值等一系列操作,最终实现所有人的出列,并输出相应的出圈顺序。随着循环的进行,链表中的结点逐渐减少,直到链表为空,即所有人都已经出圈,此时整个 Josephus 问题的求解过程结束。原创 2025-04-04 11:21:40 · 1170 阅读 · 0 评论 -
数据结构实验2.2:线性链表的归并
假设有序单链表A和B,要归并到有序单链表C。不断比较A和B节点元素大小,把小的节点插入C的表尾。持续比较,直到A或B其中一个链表的节点都加入C,再将另一个链表剩余部分直接连到C的表尾。把两个有序单链表合并成一个新的有序单链表。1.按要求测试程序。原创 2025-04-02 10:13:58 · 1067 阅读 · 0 评论 -
数据结构实验2.1:单链表的基本操作
设有线性表(34,12,45,64,28,36,45,56),采用链式存储结构。(4)设计测试用例,上机调试、测试参考程序,打印测试结果,对测试结果进行分析;在带头结点的单链表L中第i个结点前插入一个元素值为item的新结点。在带头结点的单链表L中删除第i个结点,被删结点的元素通过参数e返回。(2)掌握单链表各种基本操作的算法设计方法和技巧,分析各算法的性能;(3) 在单链表的第i个结点前插入一个结点;(6) 删除单链表中结点值等于e的所有结点;(5) 删除单链表中指定值的结点;(8) 清空单链表。原创 2025-04-02 09:57:00 · 669 阅读 · 0 评论 -
数据结构实验1.3: 有序顺序表的归并
由于两个线性表中的元素呈有序排列,在进行合并的时候,依次比较,哪个线性表的元素值小,就先将这个元素复制到新的线性表中,若两个元素相等,则复制一个即可,这样一直到其中的一个线性表结束,然后将剩余的线性表复制到新的线性表中即可。这种基于双指针的归并策略具有较高的时间效率。同时,在归并过程中额外的操作主要是元素的比较、复制以及指针的移动,这些操作的时间开销相对固定,不会随着数据规模的增加而显著增加,使得该算法在处理大规模有序数据的归并时具有较好的性能表现。原创 2025-04-01 17:35:40 · 479 阅读 · 0 评论 -
数据结构实验1.2: 顺序表的基本运算
在线性表中设置两个初值为0的下标变量i和j,其中,i为比较元素的下标,j为赋值元素的下标。依次取线性表中下标为i的元素与x和y比较,假若是x到y之外的元素,则赋值给下标为j的元素。这种算法比删除一个元素后立即移动其后面的元素的效率高得多。原创 2025-04-01 17:06:28 · 509 阅读 · 0 评论 -
数据结构实验1.1: 顺序表的操作及其应用
2.建议实验者不要过分依赖本书提供的算法或参考程序,实验者对每一个实验题目可独立进行算法分析与设计,独立设计完整的上机程序。(5)设计测试用例,上机调试、测试完善后的参考程序,保存和打印测试结果,对测试结果进行分析,包括算法效率分析;设有线性表(34,12,45,64,28,36,45),采用顺序存储结构。(3)每完成一个步骤,必须及时输出顺序表中的所有元素,便于观察操作结果;(4)完善参考程序,并在参考程序中的下划线处填上适当的语句或文字;6.在C++文件中编写代码,实现需求(实例代码在五,示例代码)。原创 2025-03-31 21:18:40 · 1137 阅读 · 0 评论 -
数据结构:数组
数组(Array)是一种常见的数据结构,用于存储相同类型的元素集合。在Java中,数组是一种简单的数据结构,可以通过索引访问数组中的元素。简介数组是一种线性数据结构,可以容纳多个相同类型的元素。数组中的每个元素都具有一个唯一的索引,用于访问该元素。数组的大小在创建时确定,并且不能在运行时更改。图示上述图示表示一个包含12个元素的整数数组。每个元素都有一个唯一的索引,从0开始递增。示例// 创建一个包含5个元素的整数数组// 通过索引访问和修改数组元素// 打印数组中的元素。原创 2023-09-17 08:24:39 · 266 阅读 · 0 评论 -
数据结构:红黑树
红黑树(Red-Black Tree)是一种自平衡的二叉搜索树,它在保持二叉搜索树的特性的同时,通过颜色标记和旋转操作来维护树的平衡,从而保证了树的高度始终在O(log n)的范围内,其中n是树中节点的数量。简介红黑树是一种自平衡的二叉搜索树,它通过对节点进行颜色标记和旋转操作来维护树的平衡。红黑树的节点分为红色和黑色两种颜色,根节点总是黑色的,每个叶子节点(NIL节点,空节点)都是黑色的。红黑树满足以下5个性质:每个节点要么是红色的,要么是黑色的。根节点是黑色的。原创 2023-09-17 09:29:06 · 199 阅读 · 0 评论 -
数据结构:平衡二叉树
平衡二叉树(Balanced Binary Tree)是一种特殊的二叉树,它满足任意一个节点的左子树和右子树的高度差不超过1。平衡二叉树的主要优势在于其能够保持较低的树高,从而在插入、删除和查找操作中保持较好的性能。简介平衡二叉树是一种自我平衡的二叉搜索树,它的左子树和右子树的高度差不超过1。平衡二叉树的基本操作包括插入、删除和查找,这些操作的时间复杂度均为O(log n),其中n为树中节点的数量。平衡二叉树的主要应用场景包括计算机科学、数据结构和算法等领域。图示50/ \30 70。原创 2023-09-17 09:23:32 · 612 阅读 · 0 评论