
数据结构
文章平均质量分 91
Suhan42
CSDN无法做到实时更新,大家可以去GitHub关注我,可以看最先的考点和重点:https://github.com/suhan42/cs-408
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【数据结构】共计12万字!数据结构知识详细梳理汇总!
单链表的数据结构定义、初始化、插入元素、删除元素、遍历。线性循环结构的二元关系如何判断起始结点。删除p所指向的结点或者后继结点。二叉树森林中兄弟关系。原创 2024-10-15 15:27:43 · 579 阅读 · 0 评论 -
【数据结构】汇总八、排序算法
排序概述、分类、直接插入排序Insertion Sort、折半插入排序、希尔排序Shell Sort、冒泡排序Bubble Sort、快速排序Quick Sort、简单选择排序Selection Sort、堆排序Heap Sort、归并排序Merge Sort、基数排序Counting Sort、外部排序、外存与内存之间的数据交换、外部排序的原、影响外部排序效率的因素、败者树、败者树在多路平衡归并中的应用、置换-选择排序、最佳归并树原创 2024-08-19 17:09:36 · 1651 阅读 · 0 评论 -
【数据结构】汇总七、查找
基本概念、基本概念、算法评价标、顺序查找、有序表查找、折半查找、判定树构造、插值查找(折半优化)、斐波那契、线性索引查找、稠密索引、分块索引、倒排索引、二叉排序树BST、平衡二叉树AVL、红黑树RBT、多路查找树、B树、五叉查找树、B树与磁盘存取、B+树、B树&B+树四、散列查找(哈希表)、直接定址法、数字分析法、平方取中法、除留余数法、随机数法、处理散列冲突、开放定址法、链地址法(拉链法)3.3再散列法、公共溢出区法4.散列表查找原创 2024-08-19 16:55:48 · 1272 阅读 · 0 评论 -
【数据结构】七、查找:3.散列查找(哈希表)
2.散列函数的构造方法2.1直接定址法2.2数字分析法2.3平方取中法❗2.4除留余数法2.5随机数法3.处理散列冲突3.1开放定址法3.2链地址法(拉链法)3.3再散列法3.4公共溢出区法4.散列表查找原创 2024-08-17 16:06:13 · 1774 阅读 · 0 评论 -
【数据结构】七、查找:2.树形结构查找(二叉排序树BST、平衡二叉树AVL、红黑树RBT、多路查找树B树)
二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),二叉搜索树,排序二叉树。它或者是一棵空二叉树,或者具有以下性质:1/2.左子树 < 根节点 < 右子树左子树上所有结点的关键字均小于根结点的关键字;右子树上的所有结点的关键字均大于根结点的关键字;左子树和右子树又各是一棵二叉排序树。默认不允许有两个结点的关键字(data)相同。下图值为10的结点的右子树为5,比10小,不满足条件2,所以这棵树不是二叉搜索树。可以进行中序遍历,得到一个。原创 2024-08-17 15:51:40 · 823 阅读 · 0 评论 -
【数据结构】七、查找:1.查找的概念、线性结构查找(顺序、折半(二分)、插值、稠密、分块、倒排)
在数学上,这一数列以如下。也就是说,如果要查找的记录在右侧,则左侧的数据都不用再判断了,不断反复进行下去,对处于当中的大部分数据,其工作效率要高一些,而且斐波那契查找只是最简单加减法运算,所以尽管斐波那契查找的。这种在查找方向的尽头放置“哨兵”免去了在查找过程中每一次比较后都要判断查找位置是否越界的小技巧,看似与原先差别不大,但在总数据较多时,效率提高很大,是非常好的编码技巧。,比如上亿,那也就意味着索引也得同样的数据集长度规模,对于内存有限的计算机来说,可能就需要反复去访问磁盘,查找性能反而大大下降了。原创 2024-08-15 09:35:46 · 1297 阅读 · 0 评论 -
【数据结构】汇总六、图
一、图Graph1.2.1有向图1.2.2无向图1.2.3简单图1.2.4多重图1.2.5完全图1.2.6子图连通、连通图、连通分量、边的权和网、稠密图、稀疏图、顶点的度、路径1.邻接矩阵2.邻接表3.十字链表(有向图)4.邻接多重表(无向图)1.图的遍历1.1 深度优先遍历DFS1.2 广度优先遍历BFS1.3 图的遍历与图的连通性2.最小生成树MST2.1 普里姆(Prim)算法2.2 克鲁斯卡尔(Kruskal)算法3.最短路径3.2 迪杰斯特拉(Dijkstra)算法3.3 弗洛伊德(Floyd)算原创 2024-08-15 09:24:13 · 1311 阅读 · 0 评论 -
【数据结构】六、图:8.图的关键路径(AOE网)
AOE网(Activity On Edge NetWork):在带权有向图中,以顶点表示事件,以有向边表示活动,以边上的权值表示完成该活动的开销(如完成活动所需的时间),称之为用边表示活动的网络,简称AOE网(Activity On Edge NetWork)。顶点:事件有向边:活动权值:完成活动的开销(如时间)AOE网和AOV网都是有向无环图,不同之处在于它们的边和顶点所代表的含义是不同的,AOE网中的边有权值;而AOV网中的边无权值,仅表示顶点之间的前后关系。只有在某顶点所代表的事件发生后。原创 2024-08-11 14:08:51 · 1305 阅读 · 0 评论 -
【数据结构】六、图:7.有向无环图(DAG)的应用(拓扑排序AOV网)
所谓拓扑排序,其实就是对一个有向图构造拓扑序列的过程。每个AOV网都有一个或多个拓扑排序序列。原创 2024-08-11 14:04:16 · 1766 阅读 · 0 评论 -
【数据结构】六、图:6.图的最短路径(BFS 算法、迪杰斯特拉(Dijkstra)算法、弗洛伊德(Floyd)算法)
由于非网图它没有边上的权值,所谓的最短路径,其实就是指两顶点之间经过的边数最少的路径。对于网图来说,最短路径,是指两顶点之间经过的边上权值之和最少的路径,并且我们称路径上的第一个顶点是源点,最后一个顶点是终点。【技巧】不带权值图其实就是一直特殊的带权图,只是权值都是1。通过一次遍历,就得到了每个结点到源点的距离。所以求最短路径的代码可以通过BFS遍历得到:3.2 迪杰斯特拉(Dijkstra)算法Dijkstra算法[1]用于构建单源点的最短路径—,即图中某个点到任何其他点的距离都是最短的。例如,构建地原创 2024-08-10 14:23:49 · 1718 阅读 · 0 评论 -
【数据结构】六、图:5.图的最小生成树MST(普里姆(Prim)算法、克鲁斯卡尔(Kruskal)算法、Boruvka 算法)
它的基本思想是:生成树中所有顶点必然是连通的,所以两个不相交集必须连接起来才能构成生成树,而且所选择的连接边的权重必须最小,才能得到最小生成树。若(u,v)是一条具有最小权值的边,其中u∈U, v∈V-U,则必存在一棵包含边(u,v)的最小生成树。如果使用 O(mlog m) 的排序算法,并且使用 O(mα(m,n)) 或 O(mlog m) 的并查集,就可以得到时间复杂度为 O(mlog m) 的 Kruskal 算法。对于Boruvka算法,一个比较笼统的表述是,一个多路增广版本的Kruskal。原创 2024-08-10 14:19:39 · 1108 阅读 · 0 评论 -
【数据结构】六、图:4.图的遍历(深度优先算法DFS、广度优先算法BFS)
图的遍历是和树的遍历类似,我们希望从图中某一顶点出发访遍图中其余顶点,且使每一个顶点仅被访问一次, 这一过程就叫做图的遍历(Traversing Graph)。对于图的遍历来,通常有两种遍历次序方案:深度优先遍历广度优先遍历1.1 深度优先遍历DFS深度优先遍历(Depth First Search),也有称为深度优先搜索,简称为DFS。1.1.1 DFS算法深度优先搜索类似于树的先序遍历。如其名称中所暗含的意思一样,这种搜索算法所遵循的搜索策略是尽可能“深”地搜索一个图,每次都尝试向更原创 2024-08-09 16:35:49 · 4281 阅读 · 0 评论 -
【数据结构】六、图:3.十字链表、邻接多重表、边集数组
显然边集数组关注的是边的集合,在边集数组中要查找一个顶点的度需要扫描整个边数组,效率并不高。结合起来,解决了存储时候,有冗余的问题,也更容易求得顶点的出度和入度。若要删除左图的( V0 , V2 )这条边,需要对邻接表结构中右边表的阴影两个结点进行删除操作,显然这是比较烦琐的。eg. 如果要删除一条边,那么在邻接表中,要在两个顶点(边的两端点)的单链表中进行边的删除。ilink 指向依附顶点ivex的下一条边,jlink 指向依附顶点jvex的下一条边。表头指针,指向该顶点的出边表中的第一个结点。原创 2024-08-09 16:29:55 · 1155 阅读 · 0 评论 -
【数据结构】六、图:2.邻接矩阵、邻接表(有向图、无向图、带权图)
二、存储结构❗1.邻接矩阵1.1无向图❗邻接矩阵-无向图代码-C1.2有向图❗邻接矩阵-有向图代码-C1.3带权图1.4性能分析1.5相乘❗2.邻接表2.1无向图2.2有向图❗邻接表-C邻接矩阵VS邻接表邻接矩阵邻接表原创 2024-08-08 16:58:40 · 3457 阅读 · 0 评论 -
【数据结构】六、图:1.图的概念、逻辑结构、存储结构、基本操作
一、图Graph1.逻辑结构1.1 定义1.2 术语1.2.1有向图1.2.2无向图1.2.3简单图1.2.4多重图1.2.5完全图1.2.6子图1.2.7==连通==连通、连通图、连通分量强连通图、强连通分量1.2.8生成树有向树1.2.9边的权和网1.2.10稠密图、稀疏图1.2.11顶点的==度==1.2.12==路径==2.物理(存储)结构3.基本操作原创 2024-08-08 16:53:47 · 1122 阅读 · 0 评论 -
【数据结构】汇总五、树
一、树Tree1.逻辑结构1.1定义1.2术语1.2.1结点之间的关系描述1)亲戚描述2)路径和路径长度1.2.2结点&树的属性描述1)层次2)高度3)==度==1.2.3有序树&无序树1.2.4森林1.3性质2.物理(存储)结构2.1双亲表示法2.1.1插入2.1.2删除方案一方案二(更好)2.2孩子表示法2.3孩子兄弟表示法3.基本操作二、二叉树Binary tree1.逻辑结构1.1斜树1.2满二叉树❗1.3完全二叉树1.4排序二叉树BST1.原创 2024-08-07 15:41:28 · 2032 阅读 · 0 评论 -
【数据结构】五、树:8.并查集
4.并查集Disjoint Set4.1查4.2并❗4.3代码实现4.4对union优化4.5对Find的优化(压缩路径)❗4.6并查集C代码(优化后)按秩合并原创 2024-08-07 15:33:37 · 1032 阅读 · 0 评论 -
【数据结构】五、树:7.哈夫曼树、哈夫曼编码
哈夫曼树(Huffman Tree):在含有n个带权叶子节点的二叉树中,其中带权路径长度(WPL)最小的二叉树称为哈夫曼树,也称最优二叉树。例如,在上图求WPL的四棵树中,都是4个同样权值的叶子节点,中间两棵树的WPL最小,那么它们两个就是哈夫曼树。。3.哈夫曼树和哈夫曼编码3.1带权路径长度3.2哈夫曼树的定义和原理3.3哈夫曼树的构造代码实现3.4特点3.5哈夫曼编码压缩比代码实现3.6哈夫曼树-C++原创 2024-08-07 15:31:00 · 3626 阅读 · 0 评论 -
【数据结构】五、树:6.平衡二叉树AVL
2.平衡二叉树AVL2.1定义2.2存储结构2.3查找2.4插入(保持平衡)2.4.1 LL平衡旋转(右单旋转)2.4.2 RR平衡旋转(左单旋转)2.4.3 LR平衡旋转(先左后右双旋转)2.4.4 RL平衡旋转(先右后左双旋转)2.4.5题解2.5性能分析2.6删除原创 2024-08-07 15:26:50 · 1157 阅读 · 0 评论 -
【数据结构】五、树:5.二叉排序树BST
1.二叉排序树BST1.1定义1.2存储结构1.3查找1.3.1查找最大和最小元素1.4插入1.4.1插入构造二叉排序树1.5删除1.6性能分析原创 2024-08-07 15:22:58 · 837 阅读 · 0 评论 -
【数据结构】五、树:4.树、森林、二叉树
四、树、森林与二叉树的转化1.树转换为二叉树2.森林转化为二叉树五、树、森林的遍历1.树的遍历2.森林的遍历原创 2024-08-07 15:20:04 · 1242 阅读 · 0 评论 -
【数据结构】五、树:3.线索二叉树(线索化)
三、线索二叉树1.原理&作用2.存储结构创建线索二叉树3.二叉树线索化3.1中序线索化❗中序线索化代码头结点3.2先序、后序线索化❗前序线索化代码❗后序线索化代码4.根据线索二叉树找前驱后继4.1中序4.2先序4.2.1先序后继4.2.2先序前驱4.3后序4.3.1先序前驱4.3.2后序后继❗线索二叉树代码C原创 2024-08-07 15:17:44 · 876 阅读 · 0 评论 -
【数据结构】五、树:2.二叉树(完全二叉树、前中后序遍历)
1.1斜树1.2满二叉树❗1.3完全二叉树1.4排序二叉树BST1.5平衡二叉树AVL1.6线索二叉树2.性质3.存储结构3.1顺序存储3.2链式存储4.遍历4.1前序遍历4.1.1前序非递归方式4.2中序遍历4.2.1中序非递归方式4.3后序遍历4.3.1后序非递归方式4.4递归求树的深度4.5层序遍历4.6由遍历序列构造二叉树原创 2024-08-07 15:12:19 · 838 阅读 · 0 评论 -
【数据结构】五、树:1.树的概念、逻辑结构、存储结构(双亲、孩子、孩子兄弟表示法)
树是n(n>=0)个结点的有限集。当n = 0时,称为空树。在任意一棵非空树中应满足:有且仅有一个特定的称为根的结点。当n>1时,其余节点可分为m(m>0)个互不相交的有限集合T1,T2,…,Tm,其中每个集合本身又是一棵树,并且称为根的子树。显然,树的定义是递归的,即在树的定义中又用到了自身,树是一种递归的数据结构。树的根结点没有前驱,除根结点外的所有结点有且只有一个前驱。树中所有结点可以有零个或多个后继。因此n个结点的树中有n-1条边。原创 2024-08-07 15:02:31 · 1118 阅读 · 0 评论 -
【数据结构】四、串:串string、模式匹配BF\KMP、广义表
串,即**字符串 ( String)**是由零个或多个**字符**组成的有限序列。一般记为S = 'a1a2……an'(n ≥ 0)其中,S 是**串名**,**单引号**括起来的**字符序列**是串的值。ai 可以是字母、数字或其他字符。串中字符的个数 n 称为**串的长度**。n = 0时的串称为**空串**(用Ø表示)。例:(单双引号都有)S = "Helloworld!"T = 'this is a string'原创 2024-08-07 14:53:50 · 1297 阅读 · 0 评论 -
【数据结构】特别篇:特殊矩阵的压缩存储
前面共存储有 1 + 2 + 3 + 4 + 5 + 6 + 1 = 22 个元素 ( 数组下标范围为0 ~ 21 ),注意数组下标从 0 开始,故。n(n+1)/2+1] 中,则存放到 B[k] 中的非零元素。+ (n - j + 2) = (j-1)(2n - j + 2) / 2 个元素,,矩阵 M 的第一行有 12 元素,第二行有 11 个,第三行有 10 个,第四行有 9 个,第五行有 8 个,所以。共有 1 + 2 + 3 + …n(n+1)/2+1] 中, 则存放到B[k] 中的非零元素。原创 2024-08-07 14:47:09 · 1283 阅读 · 0 评论 -
【数据结构】汇总三、栈和队列
栈(Stack)是只允许在一端进行插入或删除操作的线性表。重要术语:栈顶(现在能放入的一段),栈底(最早放入的元素的一段),空栈。逻辑结构:与普通线性表相同数据的运算:插入、删除操作有区别InitStack(&S):初始化栈。构造一个空栈S,分配内存空间。DestroyStack(&L):销毁栈。销毁并释放栈 S 所占用的内存空间。Push(&S,x):插入,进栈。若栈S未满,则将x加入使之成为新栈原创 2024-10-15 15:41:33 · 1322 阅读 · 0 评论 -
【数据结构】三、栈和队列:6.链队列、双端队列、队列的应用(树的层次遍历、广度优先BFS、先来先服务FCFS)
如果那样,每一个结点都有自己的front和raer。:n个不同元素进栈,出栈元素不同排列的个数为。若数据元素输入序列为1,2,3,4。输入受限的双端队列、输出受限的双端队列同样。栈中合法的序列,双端队列中一定也合法。队列输出顺序:0 1 2 3 4。请输入要入队的元素个数: 5。原创 2024-08-07 14:32:37 · 740 阅读 · 0 评论 -
【数据结构】三、栈和队列:5.顺序队列(循环队列)(初始化,判空判满,入队,出队,实例)
入队和出队的复杂度:在循环队列中,入队和出队操作的时间复杂度都是O(1),即常数时间复杂度。:循环队列将队列的头部和尾部连接起来形成一个环状结构,当队列的尾部指针达到数组的最末尾时,它将会绕回到数组的开头。:循环队列拥有固定的容量,即队列最多可以存储的元素数量是预先确定的。这里就必须空出一个元素的位置,不能让Q.rear==Q.front,因为这样,就和判空的条件一样了。重要术语:队头(可以出队(删除)的一段),队尾(放入(入队)的元素的一段),空队列。若队列Q未满,将x加入,使之成为新的队尾。原创 2024-04-25 10:20:25 · 1805 阅读 · 0 评论 -
【数据结构】三、栈和队列:4.栈的应用(括号匹配,四则运算表达式求值,进制转换,递归)
(grammer parsing)再求值,也可以边分析边求值,语法分析的作用是检查输入的字符串是否是一个合法的表达式,一般使用语法分析器(parser)解决。一种递归分析表达式的方法是,将表达式当成普通的语法规则进行分析,分析后拆分成如图所示的表达式树,然后在树结构上自底向上进行运算。所以,在中缀转后缀中,要采用**“左优先”原则**:只要左边的运算符能先运算,那么就先优先计算左边的。手算:从左往右扫描,每遇到一个运算符,就让运算符前面最近的两个操作数执行对应运算,合体为一个操作数。原创 2024-04-23 15:26:00 · 1632 阅读 · 0 评论 -
【数据结构】三、栈和队列:3.链栈(链栈栈的初始化,判空,进栈,出栈,读取栈顶,链栈实例)
这两种声明方式是等价的。两者都创建了一个动态分配的 StackNode 类型的结点,并将它的地址赋给相应的指针变量。两者都可以通过 temp1->data 或 temp2->data 来访问结点的数据成员,以及 temp1->next 或 temp2->next 来访问结点的下一个结点的指针成员。不同的只是它们的声明方式,temp1 是通过别名 LinkStack 来声明的指针变量,而 temp2 是直接以 StackNode* 类型来声明的指针变量。销毁栈后遍历栈结果: 栈为空!当前栈的元素个数:5。原创 2024-04-23 15:06:57 · 1907 阅读 · 0 评论 -
【数据结构】三、栈和队列:2.顺序栈&共享栈(顺序栈的初始化,判空,进栈,出栈,读取栈顶,顺序栈实例)
因为顺序栈的缺点是栈的大小不可变,所以引出共享栈,两个栈共享一片空间。这片存储空间不单独属于任何一个栈,某个栈需要的多一点,它就可能得到更多的存储空间。两个栈的栈底在这片存储空间的两端,当元素入栈时,两个栈的栈顶指针相向而行。当他们下一个指针的位置在一起时,说明这个栈已经放满元素。C++是一门面向对象的高级语言,在我们编写代码中,常常离不开对对象的创建和清理对象资源。指向栈顶元素,一般存储的是数组的下标。top当前指向的位置是栈顶上面的一个没有元素的空位置。如果有abcde,5个元素,那么满栈top=4。原创 2024-04-23 14:30:07 · 1365 阅读 · 0 评论 -
【数据结构】三、栈和队列:1.栈的基础(从数据结构三要素讨论:逻辑结构、物理结构(存储结构)、数据运算(基本操作))
上述公式称为卡特兰(Catalan)数,可采用数学归纳法证明(不要求掌握)。重要术语:栈顶(现在能放入的一段),栈底(最早放入的元素的一段),空栈。全部进入后出栈:e->d->c->b->a(倒序)若S为空,则返回true,否则返回false。:n个不同元素进栈,出栈元素不同排列的个数为。若栈S非空,则用x返回线顶元素。a->b->c->d->e(进一个出一个)销毁并释放栈 S 所占用的内存空间。进栈顺序:a->b->c->d->e。构造一个空栈S,分配内存空间。进行插入或删除操作的线性表。原创 2024-04-23 14:26:24 · 1138 阅读 · 0 评论 -
【数据结构】汇总二、线性表(逻辑结构、物理(存储)结构、基本操作、1.顺序表2.单链表3.双链表4.循环链表5.静态链表6.顺序表与链表的对比不同)
10//静态链表的最大长度//静态链表结构类型的定义,并且使用typedef进行重命名为SLinkList[MaxSize]//存储数据元素int next;//下一个元素的数组下标//数组a作为静态链表//等同于链表定义形式,这样可以使用StackLink来创建静态链表的节点,使用来创建指向静态链表节点的指针。//数据域int cur;//游标//例如,可以使用以下方式创建一个静态链表节点:p = &node;原创 2024-03-07 15:37:21 · 1234 阅读 · 0 评论 -
【数据结构】二、线性表:6.顺序表和链表的对比不同(从数据结构三要素讨论:逻辑结构、物理结构(存储结构)、数据运算(基本操作))
若分配空间过大,则浪费内存资源。若元素占用空间很大,那么移动元素花费的时间要比查找元素花费是时间代价更大。只需分配一个头结点(也可以不要头结点,只声明一个头指针),之后方便拓展。按位查找:由于单链表每个节点只存储了指向下一个节点的指针,只能。按位查找:使用顺序存储,每个数据元素大小相同,所以可以。,即可以在**O(1)**时间内找到第i个元素。插入/删除元素要将后续元素都后移/前移。时间复杂度O(n),时间开销主要来自。时间复杂度O(n),时间开销主要来自。,不可随机存储,所以访问节点时。原创 2024-03-06 20:27:45 · 615 阅读 · 0 评论 -
【数据结构】二、线性表:5.静态链表的定义及其基本操作(定义、初始化、插入、查找、删除、遍历、长度、特点)
10//静态链表的最大长度//静态链表结构类型的定义,并且使用typedef进行重命名为SLinkList[MaxSize]//存储数据元素int next;//下一个元素的数组下标//数组a作为静态链表//等同于链表定义形式,这样可以使用StackLink来创建静态链表的节点,使用来创建指向静态链表节点的指针。//数据域int cur;//游标//例如,可以使用以下方式创建一个静态链表节点:p = &node;原创 2024-03-06 20:23:58 · 1395 阅读 · 0 评论 -
【数据结构】二、线性表:4.循环链表的定义及其基本操作(循环单链表,循环双链表的初始化、判空、判断头结点、尾结点、插入、删除)
循环双链表(Circular Doubly Linked List)是一种特殊类型的双向链表,其中最后一个节点的下一个指针指向头节点,头节点的前一个指针指向最后一个节点,形成一个循环。循环单链表与普通单链表的主要区别在于,循环单链表的尾节点的指针不是指向 nullptr,而是指向头节点,形成一个闭环。这意味着,在循环单链表中,可以通过尾节点的指针重新回到头节点。循环单链表(Circular Singly Linked List)是一种特殊类型的单链表,其中最后一个节点的指针指向头节点,形成一个循环。原创 2024-03-05 16:24:29 · 1469 阅读 · 0 评论 -
【数据结构】二、线性表:3.双链表的定义及其基本操作(初始化、头插法尾插法建表、插入、遍历查找、删除、判空等)
对于只需要顺序遍历或仅从头部开始操作的情况,单链表可能是更简洁和高效的选择。但对于需要在两个方向上遍历或在任意位置插入或删除节点的情况,双链表就更有优势了。单链表(Singly Linked List)和双链表(Doubly Linked List)是两种常见的链表数据结构,它们在节点之间的连接方式上有所区别。双链表不可随机存取,按位查找、按值查找操作都只能用遍历的方式实现,时间复杂度为。注意:要注意代码中结点前驱后继的调整顺序,防止出现自己指向自己的情况。双链表与单链表一样,为了操作方便也可以加入。原创 2024-03-04 20:48:58 · 996 阅读 · 0 评论 -
【数据结构】二、线性表:2.单链表的建立(尾插法实例、头插法)
当插入1个元素时,while需要循环一次,插入2个元素,while循环1此…插入n个元素,while循环n-1次。通过将用户输入的数据逐个添加到链表的尾部,可以方便地保存输入的数据,并在后续处理中使用。头插法建立单链表的特点是:新节点插入到链表的头部位置,因此建立完成的链表元素顺序是和输入数据集合的顺序相反的,即。),指向表尾,当要在尾部插入一个新的数据元素时,就只需要对r结点做一个后插操作就行了。如果要把很多个数据元素存到一个单链表中,如何操作?这种操作,时间复杂度太大,并不是最佳方案。原创 2024-03-04 19:13:38 · 624 阅读 · 0 评论 -
【数据结构】二、线性表:2.单链表的插入、删除、查找
单链表按位查找是指根据节点在链表中的位置(即节点序号或下标)来查找节点的操作。通常情况下,我们需要查找的节点序号是从1开始计数的,即第1个节点、第2个节点、第3个节点等。由于需删除结点的前驱结点未知,或者要删除的是第一个结点,且不带头结点。ListDelete(&L,i,&e):删除操作。删除表L中第i个位置的元素,并用e返回删除元素的值。ListInsert(&L,i,e):插入操作。LocateElem(L,e):按值查找操作。转移p结点的内容到后面,在逻辑上实现在p结点前插入。时间复杂度:O(1)原创 2024-03-04 18:18:08 · 1728 阅读 · 0 评论