数据结构
文章平均质量分 92
晚风(●•σ )
期待与你共同努力,感谢你的关注!
展开
-
<长篇文章!!>数据结构与算法的重要知识点与概要总结 ( •̀ ω •́ )✧✧临近考试和查漏补缺的小伙伴看这一篇就都懂啦~
由于在含有n个结点的二叉树的链式存储结构中,有n+1个空指针,对于叶子结点,它有两个空指针;,即链式存储的存储结构所占存储空间分两部分,一部分存放结点的值,另一部分存放表示结点间关系的指针(结点内的存储单元要求连续,而不同结点的存储空间可以不连续),例如,顺序表的存储密度=1,而链表的存储密度原创 2023-12-20 22:47:16 · 827 阅读 · 2 评论 -
数据结构学习笔记——查找算法中的树形查找(红黑树)
红黑树是一棵二叉排序树(满足结点值中:左子树原创 2024-01-14 00:05:43 · 552 阅读 · 0 评论 -
数据结构学习笔记——查找算法中的树形查找(B树、B+树)
B树和B+树属于树形查找算法中的一种,主要用于数据库系统、文件系统和磁盘存取等方面,都是用于存储和索引大量的数据,以提高检索效率。例如,在磁盘存储中,通过将数据分散到多个磁盘块中,并使用树形结构来组织这些磁盘块,从而提高了查找速度和查找效率。若设B树中所有结点的孩子结点个数的最大值为m,则该B树是一棵m阶B树,另外B+树则是B树的变形。B+树可以由分块查找推广,所以也称为多级分块查找,即m阶B+树,它是B树的变形,与B树相同,B树和B+树都是平衡的多叉树,都用在文件索引结构和数据库索引中,但B+树更加适用。原创 2024-01-04 22:13:35 · 1975 阅读 · 0 评论 -
数据结构学习笔记——查找算法中的树形查找(平衡二叉树)
平衡二叉树以二叉排序树为基础,若二叉排序树中左、右子树的高度之差的绝对值不超过1,则称为平衡二叉树(AVL树),其左、右子树也为一棵平衡二叉树,其平均查找长度为O(log2。二叉树中`左子树的深度减去其右子树深度`,称为该结点的`平衡因子`,平衡二叉树中结点的平衡因子只可能为`1`、`-1`或`0`三种,其中`叶子结点`的平衡因子均为`0`,例如下面这个二叉树为平衡二叉树:叶子结点0、1、6的平衡因子均为0,结点4的左子树深度为1,右子树深度为0,所以平衡因子为1-0=1,结点9的左子树深度为1,原创 2023-09-26 00:03:57 · 1433 阅读 · 0 评论 -
数据结构学习笔记——查找算法中的树形查找(二叉排序树)
> 二叉排序树的查找过程与折半查找(二分查找)相似,即折半查找的判定树就是一棵二叉排序树。# 一、二叉排序树的定义二叉排序树也称为二叉查找树,其中,各结点值的关系是:`左子树原创 2023-01-11 22:28:06 · 8807 阅读 · 0 评论 -
数据结构学习笔记——查找算法中的线性、散列查找(顺序、折半、分块、散列)
查找可大致分为线性查找、树形查找和散列查找三种,这里只介绍线性查找中的顺序查找、折半和分块查找,散列查找中的散列表(哈希表)。原创 2022-11-25 01:23:06 · 4571 阅读 · 0 评论 -
数据结构学习笔记—— 排序算法总结【ヾ(≧▽≦*)o所有的排序算法考点看这一篇你就懂啦!!!】
对于`插入`、`交换`、`选择`三大类的排序算法,`较简单型`的排序算法一般都是稳定的(除了希尔排序、快速排序、简单选择排序)。 `较复杂型`的排序算法都是不稳定的,排序中元素的相对位置会发生变化,例如希尔排序、快速排序、堆排序,另外,还有简单选择排序。 由于直接/折半插入排序、简单选择排序、冒泡排序是`较简单型`的排序算法,其算法实现过程较简单,`时间复杂度`均为O(n^2^),但在最好情况下`折半插入排序`可以达到O(nlog2n),`直接插入排序`和`冒泡排序`可以达到O(n)原创 2023-09-18 15:17:03 · 713 阅读 · 0 评论 -
数据结构学习笔记—— 基数排序
基数排序与前面的排序算法不一样,它不基于比较和移动元素来进行排序,而是基于多关键字排序的思想,将一个逻辑关键字分为多个关键字,它是基于关键字各位的大小进行排序的。基数排序有两种实现方式:`最高位优先法`和`最低位优先法`,分别是按关键字高次位排序和低次位排序。> 例如,下面通过最低位优先法,对给定的关键字序列{110,119,007,911,114,120,122}进行排序:原创 2022-11-13 17:00:13 · 4812 阅读 · 0 评论 -
数据结构学习笔记——归并排序(二路归并排序)
排序算法空间复杂度平均时间复杂度最好时间复杂度最坏时间复杂度排序方式稳定性适用性直接插入排序O(1)O(n2)O(n)O(n2)内部排序(In-place)√顺序存储和链式存储折半插入排序O(1)O(n2)O(nlog2n)O(n2)内部排序(In-place)√顺序存储希尔排序O(1)依赖于增量序列依赖于增量序列依赖于增量序列内部排序(In-place)×顺序存储冒泡排序O(1)O(n2)O(n)O(n2)原创 2022-11-12 22:37:51 · 2892 阅读 · 0 评论 -
数据结构学习笔记——选择排序(简单选择排序和堆排序)
以递增为例,在每一趟的简单选择排序过程中,每次选取当前元素最小的元素,将其作为有序子序列的第i,i+1,……个元素,依次进行下去,即和第一个元素交换,依次进行交换,直到剩余一个元素,此时整个序列已经有序,每一趟简单选择排序可确定一个元素的最终位置。递增的简单选择排序代码如下:```c/*简单选择排序(递增)*/void SelectSort1(int r[],int n) { int i,j,min,temp; for(i=0; i原创 2022-11-08 23:49:13 · 7176 阅读 · 0 评论 -
数据结构学习笔记——交换排序(冒泡排序和快速排序)
交换排序通过两两比较待排序的元素,若不满足排序要求则进行交换,直到整个序列有序为止。# 一、冒泡排序## (一)排序思想按照一定的次序(从前往后或从后往前,对应递减和递增)两两比较相邻的元素,若为逆序(r[i-1]r[i+1]),则进行交换,直到整个序列都比较完结束,即第一趟冒泡排序结束【第一趟冒泡排序后有一个最小或最大的元素放在排序的最终位置】。然后,继续进行下一趟冒泡排序,之前确定的最小或最大元素则不参与排序比较,第二趟后同样,序列中有一个最小或最大的元素放在排序的最终位置,原创 2022-10-31 00:44:41 · 2747 阅读 · 0 评论 -
数据结构学习笔记——插入排序(直接、折半插入、希尔排序)
一、排序算法的稳定性排序就是使无序的序列排列成有序的序列,针对两个元素,其对应的关键字相同,若待排序的元素中有两个元素A和B,未排序前A的位置在B的前面,若经排序算法后,A仍在B的前面,则说明这个排序算法是稳定的,即`经过排序后能使关键字相同的元素保持原本顺序中的相对位置不变`,则称这个算法是**稳定的**,反之则不稳定。另外,算法的稳定性并不代表该排序算法的优劣。原创 2022-10-27 23:54:17 · 2939 阅读 · 0 评论 -
数据结构学习笔记——图的应用2(拓扑排序、关键路径)
设e(ak)和l(ak)为当前活动ak的最早发生时间和最迟发生时间,由于事件代表一个新活动的开始或旧活动的结束,所以事件的最早发生时间就是由这个事件所发出的活动的最早发生时间,即ve(V);由于回V3的路径有两条,分别是V4→V2和V4→V6,要取其中权值最小者,也就是最迟发生时间,vl(V3)=min{vl(V1)-3,vl(V4)-3}=min{7-3,3-3}=0。4、根据(3)得到的结果,找到最早发生时间和最迟发生时间相同的活动,就得到了关键活动,由关键活动连成的路径即为关键路径。原创 2022-09-06 12:10:43 · 2889 阅读 · 4 评论 -
数据结构学习笔记——图的应用1(最小生成树、最短路径)
V1→V3:有三条路径,分别是V1→V2→V4→V3,路径长度为4+2+8=14、V1→V2→V4→V6→V3,路径长度为4+2+3+3=12、V1→V2→V5→V6→V3,路径长度为4+7+6+3=20,故最短路径为V1→V2→V4→V6→V3,即12;},即{V1,V2},{V1,V3},{V1,V2},{V2,V1},{V2,V3},{V2,V4},{V3,V1},{V3,V2},{V3,V4},{V4,V1},{V4,V2},{V4,V3},设当前访问的顶点对为{v。...原创 2022-08-29 17:39:24 · 5713 阅读 · 2 评论 -
数据结构学习笔记——图的遍历算法(深度优先搜索和广度优先搜索)
若通过邻接表表示图,则每个顶点都入队一次,即所需时间为O(|V|),搜索顶点的邻接顶点所需时间为O(|E|),其时间复杂度为O(|V|+|E|)。若通过邻接表表示图,则查找所有顶点的邻接顶点所需时间为O(|E|),访问顶点所需时间为O(|V|),即总时间复杂度为O(|V|+|E|)。4、查看V7单链表,其邻接顶点为2,即V3,它已经被访问过,于是回到V3单链表,搜索下一个未被访问的邻接顶点;11、查看V8单链表,其邻接顶点为4,即V5,已经被访问过,于是回到V5单链表,搜索下一个未被访问的邻接顶点;....原创 2022-08-18 17:49:38 · 31655 阅读 · 4 评论 -
数据结构学习笔记——图的存储结构(邻接矩阵、邻接表、邻接多重表和十字链表)
图的常用存储结构有邻接矩阵和邻接表,另外还有十字链表、邻接多重表等等。//图的顶点数目、图的边数目 char V [ MAXSIZE ];//一维数组,存储顶点 int E [ MAXSIZE ] [ MAXSIZE ];//二维数组,边的邻接矩阵 } Graph;100//图的顶点数目、图的边数目 char V [ MAXSIZE ];//一维数组,存储顶点 int E [ MAXSIZE ] [ MAXSIZE ];//二维数组,边的邻接矩阵 } Graph;.........原创 2022-08-14 15:01:47 · 11162 阅读 · 0 评论 -
数据结构学习笔记——图的基本知识
图是由一个非空的顶点集合V(顶点集)和一个描述顶点之间关系——边的有限非空集合E(边集)所组成的一种数据结构,记为G=(V,E),其中图的顶点集V不一定为空,而图的边集E可以为空。原创 2022-08-11 16:27:07 · 2417 阅读 · 1 评论 -
数据结构学习笔记——哈夫曼树与哈夫曼编码
哈夫曼树是一种特殊的二叉树(其中哈夫曼二叉树是哈夫曼n叉树的一种,以下都以哈夫曼二叉树为例),树中所有叶子结点都带有权值,带权路径长度最小的二叉树称为哈夫曼树,也称为最优二叉树。哈夫曼树既不是满二叉树,也不是完全二叉树,只是一棵二叉树。............原创 2022-08-04 16:35:52 · 6372 阅读 · 0 评论 -
数据结构学习笔记——树的存储结构以及树、森林与二叉树之间的转换
树的存储结构中反映的是一棵树中各结点之间的关系,在存储中,不仅存储树中每个结点的值,还存储各结点之间的关系,主要有三种存储结构,分别是双亲表示法、孩子链表示法和孩子兄弟表示法。双亲表示法是通过采用一维数组来存储树中的结点,其中每个结点被赋予一个结构体类型,包含data域和parent域,分别和。例如,下图该树,通过双亲表示法进行存储,规定从数组下标为0开始存储,根结点下标为0,同时设根结点的parent域为-1:将所有结点存放在一个中,每个数据元素有两个域,分别是该结点的数据域和存放该结点的第一个孩子原创 2022-08-02 15:13:20 · 3306 阅读 · 2 评论 -
数据结构学习笔记——线索二叉树
# 一、线索二叉树的结点结构> 在由n个结点组成的二叉链表中,含有n+1个空指针域,含有n-1个非空指针域。如前面文章介绍的,含有n个结点的二叉树中,有n+1个空指针,对于叶子结点,它有两个空指针;对于度为1的结点(只有一个子结点),它只有一个空指针。将这些空指针利用起来,例如可以让其存放指向该结点的前驱或后驱,从而使遍历二叉树更加简便,即`线索二叉树`。如下图,由中序遍历序列(DBEAFCG)可以推出,其中结点D和结点G的中序前驱和中序后继为NULL:............原创 2022-07-31 17:44:46 · 4671 阅读 · 1 评论 -
数据结构学习笔记——由遍历恢复二叉树以及非递归遍历二叉树
例如,已知先序序列为ABDECFG,中序序列为DBEAFCG,由先序遍历和中序遍历恢复二叉树。从先序序列确定二叉树的根结点:A,如下:通过中序遍历来确定左、右子树,其中结点A之前的所有结点都是根结点左子树结点,其后都是根结点右子树结点,如下:然后继续对先序序列和中序序列中的左、右子树进行相应进一步的分解:可得到如下二叉树:通过代码验证如下,正确:例如,已知中序序列为DBEAFCG,后序序列为DEBFGCA,由先序遍历和中序遍历恢复二叉树。从中序序列的最后一个结点确定二叉树的根结点:A,原创 2022-07-26 19:34:04 · 1381 阅读 · 0 评论 -
数据结构学习笔记——二叉树的遍历和链式存储代码实现二叉树
二叉树的遍历是按某种规定的顺序来对访问树中的所有结点,且每个结点仅被访问一次,由于二叉树由根结点(D)、左子树(L)和右子树(R)组成,以下是二叉树的先、中、后以及层次遍历。二叉树的先、中、后序遍历都可以通过递归算法实现,递归结束的条件是T==NULL,即当二叉树为空时,遍历结束。二叉树的先序遍历(DLR)二叉树的先序遍历中,首原创 2023-11-30 22:25:40 · 515 阅读 · 0 评论 -
数据结构学习笔记——树、二叉树和森林
(一)树的概念(二)结点叶子结点、孩子结点、双亲结点、兄弟结点:1、也称为终端结点,它是没有子结点的结点(度为0),例如上图中,D、E、F、G都是叶子结点;2、一个结点的后继结点称为该结点的,例如上图中,A的孩子结点是B、C;3、一个结点称为其后继结点的,例如上图中,B、C的双亲结点是A,D、E的双亲结点是B;4、在同一双亲结点下的孩子结点互为,例如上图中,B、C互为兄弟结点,它们有共同的双亲A,另外D、E互为兄弟结点,它们有共同的双亲B。(三)树的性质1、树中结点的子结点(孩子)个数称为该,原创 2022-07-19 22:23:50 · 4297 阅读 · 7 评论 -
数据结构学习笔记——广义表
广义表是线性表的进一步推广,是由n(n≥0)个数据元素组成的有序序列。线性表中的数据元素只能是单个元素(原子),它是不可分割的,而广义表中的数据元素既可以是原子,也可以是一个广义表(包括空表和非空表),广义表通过圆括号“()”括起来,通过逗号“”隔开表中的各个数据元素。一个n维数组可以看成元素是n-1维数组的广义表,广义表的元素都是n-1维数组。另外,若广义表中的所有元素都是原子时,此时的广义表就是一个线性表。广义表H=((a,b),(c,(d,e))),括号层数为3,所以广义表的深度为3,最高层为(c,(原创 2023-12-04 22:54:15 · 5031 阅读 · 7 评论 -
数据结构学习笔记——多维数组、矩阵
数组是由n(n≥1)个相同数据类型的数据元素组成的有限序列,在定义数组时,会为数组分配一个固定大小的内存空间,用来存储元素,数组在被定义后,其维度不可以被改变。数组在确定其维度和维界后,元素的个数是固定的,所以不能进行插入和删除运算。数组中最常见的两种操作是查找和修改。广义表是线性表的进一步推广,是由n(n≥0)个数据元素组成的有序序列。线性表中的数据元素只能是单个元素(原子),它是不可分割的,而广义表中的数据元素既可以是原子,也可以是一个广义表(包括空表和非空表),广义表通过圆括号“()原创 2023-11-22 22:40:56 · 1333 阅读 · 0 评论 -
数据结构学习笔记——KMP算法中的常见计算题目总结
答:首先设next[1]=,next[2]=(要注意这里的数组是从1开始的,而不是0),如下表:当j=3时,k=next[j-1]=next[2]=1,此时看S[j-1]=S[2]='b’与S[k]=S[1]='a’是否相等,由于不相等,所以继续向前查找next值对应的字符来与前一位进行比较,由于通过查找至第一位仍未找到相等的字符,直接将其赋值,即next[i]=;当j=4时,k=next[j-1]=next[3]=1,此时看S[j-1]=S[3]='a’与S[k]=S[1]='a’是否相等,由于相原创 2022-07-09 11:24:23 · 3603 阅读 · 5 评论 -
数据结构学习笔记——串的基本知识(顺序存储结构实现串)
(一)定长顺序存储通过静态数组实现定长顺序存储,一组地址连续的存储单元存储串值的字符序列,其中每个串都被分配一个固定长度的ch[MAXLEN]数组。(二)变长分配存储(堆分配存储)而当序列的长度超过事先限定的MAXLEN值时,则此时可以采用变长分配存储,适用于串长较灵活的情况。与定长顺序存储一样,也是采用一组地址连续的存储单元来存放串值的字符序列,但堆分配存储的存储空间是的,通过malloc()和free()函数来完成动态存储的分配和释放。三、串的初始化四、判断串是否为空五、串的建立串的建原创 2022-07-05 11:47:13 · 7366 阅读 · 12 评论 -
数据结构学习笔记——顺序存储结构实现循环队列
所谓循环队列,也就是将顺序队列中的一维数组首尾相连成环,也就是在逻辑上视为一个环连接起来,其存储类型定义与顺序队列的存储类型定义是一样的,也是定义数组data[MaxSize]和两个指针,即队头指针front指向队头元素,队尾指针rear指向队尾元素,如下:例如下图是个空循环队列,其中data[]数组中未存任何数据元素,指针front、rear都指向同一位置,此时队列为空:循环队列的初始化与顺序队列的初始化代码一样,当时,表示循环队列的初始状态,此时队列为空,如下代码:三、判断循环队列是否为空队循环原创 2022-06-12 11:54:02 · 4362 阅读 · 1 评论 -
数据结构学习笔记——链式存储结构实现队列(链队)
在链队中,队头指针指向队头结点,队尾指针指向队尾结点,由于不带头结点的链队操作较为麻烦,一般将链队设置为,带头结点的链式队列如下图(其中队头指针指向头节点):不带结点的链式队列如下图:链队的存储类型可定义为:三、链队的初始化初始化时,通过malloc()函数创建一个只包含头结点的空链式队列Q,该头结点中包含队头指针front和队尾指针rear,然后将它们的指针域都指向空(NULL),代码如下:四、判断链队是否为空队判断链队是否为空,只需判断即可,代码如下:由于通过链式存储实现队列,就不会存在原创 2022-06-12 16:21:20 · 8713 阅读 · 4 评论 -
数据结构学习笔记——队列的基本知识和顺序存储结构实现队列(顺序队列)
顺序队列中使用数组来存储队列元素,通过一组数组地址的连续的存储单元来存放从队头至队尾的数据元素,同时设置两个指针,分别是队头指针front和队尾指针rear,用于指示队头元素和队尾元素,定义的代码如下:三、顺序队列的初始化当时,表示顺序队列的初始状态,队列为空,如下代码:四、判断顺序队列是否为空队判断顺序队列是否为空队时,可以判断两个指针是否相等,即,如下代码:五、判断顺序队列是否为满队注意,这里判断顺序队列是否为满队的代码,实质上并不是能真正地判断出来,因为存在“假溢出”的现象,当队列还有一个原创 2022-06-07 17:46:47 · 3457 阅读 · 5 评论 -
数据结构学习笔记——前、中、后缀表达式的转换(栈的应用)
一般我们常用的中缀表达式,不仅依靠运算符的优先级,也要处理括号的优先级;中没有括号,只有操作数和运算符,且运算符放在操作数的后面;也是一种没有括号的算术表达式,其运算符写在前面,操作数写在后面。将常用的中缀表达式转换为前缀表达式、后缀表达式后,可以通过栈的相关原理来实现具体的出栈 、入栈操作逻辑,从而可以一样完成与中缀表达式相同的运算。1、首先按照将所有的操作数都。2、将运算符移至相对应的括号。3、将括号去掉,即可得到前缀表达式。与前缀表达式相反,第二步将运算符移至相对应的括号后,然后再去掉括原创 2022-06-26 18:02:16 · 10365 阅读 · 11 评论 -
数据结构学习笔记——链式存储结构实现栈(链栈)
目录一、链栈的定义二、链栈的初始化三、判断链栈是否为空栈四、判断链栈是否为满栈五、进栈(插入操作)六、出栈(删除操作)七、读取链栈的栈顶元素八、链栈栈的建立一个简单的链栈栈的基本实现例子九、链栈的遍历输出一、链栈的定义有两种方式实现栈,分别是顺序存储结构和链式存储结构,这里我们把通过链式存储结构实现的栈成为链栈,它通过不带头结点的单链表实现(是因为栈的主要操作都是在栈顶进行操作的),即第一个结点设为栈顶从而方便操作。如下图,是也就是一个不带头结点的单链表,即不带头结点的链栈,其中Lhead指针指向原创 2022-05-14 21:13:40 · 7697 阅读 · 0 评论 -
数据结构学习笔记——栈的基本知识和顺序存储结构实现栈(顺序栈)
目录一、栈的相关知识二、顺序栈的定义三、顺序栈的初始化四、判断顺序栈是否为空栈五、判断顺序栈是否为满栈六、进栈(插入操作)七、出栈(删除操作)八、读取顺序栈顶元素九、顺序栈的建立一个简单的顺序栈的基本实现例子十、栈的遍历输出一、栈的相关知识栈是一种只允许在一端进行插入或删除操作的线性表,它是一种特殊的线性表,其遵循的原则是先进后出(FILO),即后进的元素先被取出来。由于它是一种线性表,所以有两种方式:顺序存储结构和链式存储结构表示,即顺序栈和链式栈。其中,栈的插入操作称为进栈,栈的删除操作称为原创 2022-05-04 21:02:40 · 8192 阅读 · 2 评论 -
数据结构学习笔记——链式表示中的双链表及循环单/双链表
循环单链表可以实现从任一个结点访问链表中的任何结点(遍历整个链表。循环双链表基于双链表,头结点L的prior域指向表尾结点,查找表头结点和表尾结点的时间复杂度均为O(1),查找一个结点的前驱结点时的时间复杂度也为O(1)。 - 由于双链表可以很快地找到前驱结点,所以双链表的插入、删除操作的时间复杂度都为`O(1)`。双链表的插入操作可以概括为【`先连后,后连前`】,若在指针 *p 指向的结点之后插入结点 *q,首先,新结点q与原本 *p的指针域相连,即下一个结点,然后将结点q插入到结点p之后,再将其pr原创 2023-10-31 17:38:57 · 1201 阅读 · 0 评论 -
数据结构学习笔记——线性表的链式表示(单链表带头结点和不带头结点的基本操作)
目录单链表的相关知识点(一)单链表的定义(二)单链表的初始化和空表判断(三)单链表的建立(四)单链表的输出(五)单链表的逆序输出(六)单链表的插入操作(七)单链表的删除操作()()单链表的相关知识点单链表是链式存储的,其每个结点除了存放数据元素之外,还存储指向下一个结点的指针;而顺序表是顺序存储的,其每个结点只存放数据元素。【顺序存储结构可以随机存取、顺序存取,而链式存储结构只能顺序存取】顺序存储结构不仅可用于存储线性结构,还能用于树、图。若需对表进行频繁的插入、删除操作,此时适合选链式存储。一原创 2022-04-10 14:32:12 · 8733 阅读 · 12 评论 -
数据结构学习笔记:顺序表的删除操作及其演化题目总结
目录前言例题类似题目1类似题目2类似题目3题目4结语前言例题例、设计一个删除算法,删除顺序表L中的第i个位置的元素,用引用变量返回。思路:由于这个函数删除后顺序表L有变,所以L前要有&,且我们要返回的变量一开始为初始值0,它也是变化的,所以该变量前面也要加引用。bool ListDelete(SqList &L,i原创 2022-03-23 22:46:41 · 9772 阅读 · 7 评论 -
数据结构学习笔记——线性表的概念及顺序表示(超详细最终版+++)建议反复看看ヾ(≧▽≦*)o
目录前言一、顺序表的定义二、顺序表的初始化三、顺序表的建立四、顺序表的输出五、顺序表的逆序输出六、顺序表的插入操作七、顺序表的删除操作八、顺序表的按位和按值查找完整代码*九、删除常用操作(一)删除顺序表中的最小值(二)删除顺序表中的所有特定值的元素(三)删除顺序表值在特定区间的元素(四)删除顺序表中重复元素(五)删除有序表中重复元素十、前言以下所有代码都经过测试,编译运行软件:Dev-C++ 5.11,若有表述和代码错误感谢指出!!!一、顺序表的定义以下操作均为顺序表的静态分配,所以其大小和空间原创 2022-04-03 01:35:51 · 16693 阅读 · 13 评论 -
数据结构与算法设计分析—— 数据结构及常用算法
线性表是`线性结构`,是包含n个数据元素的有限序列,通过顺序存储的线性表称为`顺序表`,它是将线性表中所有元素按照其逻辑顺序,依次存储到指定存储位置开始的一块连续的存储空间里;而通过链式存储的`链表`中,每个结点不仅包含该元素的信息,还包含元素之间的逻辑关系的信息。 - 顺序表实现简单,`可以随机存取`,其`存储密度大`,但是执行插入、删除操作需要移动大量元素,`效率低`,另外其`存储空间需事先分配`,容易造成空间浪费或溢出。 - 链表不支持随机存取,`只能顺序存取`,通过`指针`来体现元素之间的逻辑原创 2023-09-29 11:10:10 · 2867 阅读 · 0 评论 -
数据结构学习笔记——数据结构概论
数据是客观事物的符号表示,可以说是信息的载体,它是所有能被输入到计算机中,并被计算机程序识别和处理的符号集合。数据由数据元素组成,即`数据元素是数据的基本单位`,而数据元素又由若干个`数据项`组成,所以,数据项是组成数据元素的`最基本、不可分割的最小单位`。另外,具有相同性质的数据元素集合称为`数据对象`,它原创 2023-10-11 23:31:22 · 1407 阅读 · 0 评论 -
数据结构题:由逆置数组方法——逆置线性表L的所有元素
前言文章代码皆经Dev-C++ 5.11中测试无误,若有代码错误或表述不当,欢迎指正!题目输入一个数组,要求对该数组进行逆序然后输出。当我们想对一个数组的所有元素进行逆置时,可以通过for()循环,每次进行二分(这里的二分是对数组的长度进行),使每次数组的最左边和最右边的两个元素进行交换从而实现逆置,即将数组的长度/2,即当数组的长度为奇数时,剩下的那个元素不用逆置(因为它位于所以元素的中心,即使逆序也不变),而当数组的长度为偶数时,逆置的元素刚好每次交换两个,如下代码:#include<原创 2022-03-18 21:50:10 · 1462 阅读 · 2 评论