![](https://i-blog.csdnimg.cn/direct/9844a8dd2f4c417caca64e8296fa4c94.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构初阶
文章平均质量分 91
本专栏包含顺序表,链表,栈和队列,八大排序算法
24k纯甄
本人在校大学生一枚,致力于研究学习C/C++,Linux操作系统,AI人工智能等,愿与各位大佬共同学习,还望各位多多指教。
展开
-
【C/数据结构与算法】:二叉树经典OJ
这道题的意思是对二叉树进行前序遍历,把每个结点的值都存入一个数组中,并且返回这个数组。思路:这题与我们平时写的二叉树前序遍历不同。需要我们自己开辟空间,但又由于二叉树结点个数未知,所以在开辟空间之前要先计算结点个数,根据结点个数开辟空间。最后再利用分治递归进行前序遍历。代码实现如下:注意:(1) 结点个数的计算,数组空间的开辟;(2) 递归时一般用子函数 _prevOrder 递归,而不是 preorderTraversal 原函数,不然会重复的开辟空间;(3) 局部变量 i 一定要传地址,因为每一层原创 2024-04-14 08:54:20 · 862 阅读 · 77 评论 -
【C/数据结构与算法】:10道链表经典OJ
思路1:遍历原链表,将 val 所在的节点释放掉。(太麻烦)思路2:创建新链表,再遍历原链表,找到不为 val 的节点尾插到新链表。思路1代码实现如下:注意:1.当链表为空时,直接返回NULL即可。2.当尾插上最后一个有效节点时,此时它的 next 可能还与最后一个节点相链接,一定要断开!2. 反转链表思路:定义三个变量 n1,n2,n3,根据它们的指向关系进行迭代。代码实现如下:注意:1.当链表为空时,直接返回NULL即可。2.在迭代过程中别忘记判断 n3 ,防止对空指针解引用。3.注意循原创 2024-04-13 10:57:05 · 1873 阅读 · 74 评论 -
基于顺序表 --- 实现简易【通讯录】
这里一定不能忽略。原创 2024-04-04 11:17:10 · 804 阅读 · 46 评论 -
【C/排序算法】:归并排序和计数排序
归并排序是一种效率仅次于快速排序的排序算法。它有非递归和递归两种实现方式(本文只讲述递归实现,非递归实现以后有专门的文章)。1.算法思想:归并排序采用分治法。首先假设一组数据的左半区间有序,右半区间有序,将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。所谓 归并,就是将两组有序的数据合成为一组有序的数据。 例如有如下两个有序数组,将两个有序数组归并为一个有序数组,这就是一次归并操作。2.归并操作的工作原理如下:第一步:申请空间原创 2024-04-09 11:09:39 · 1389 阅读 · 51 评论 -
【C/排序算法】:堆排序和选择排序
3.原创 2024-04-08 18:51:51 · 1618 阅读 · 50 评论 -
【C/数据结构与算法】:树和二叉树
则这个二叉树就是完全二叉树。(3)对这两种二叉树的有关数据的推导。原创 2024-04-05 19:56:40 · 1761 阅读 · 52 评论 -
【C/排序算法】:直接插入排序和希尔排序
是一个边界。原创 2024-04-06 16:27:48 · 1375 阅读 · 43 评论 -
【C/排序算法】:快速排序和归并排序的非递归实现
3.1.首先要先把数组。原创 2024-04-10 15:33:26 · 1470 阅读 · 78 评论 -
【C/排序算法】:快速排序和冒泡排序
快速排序的三种思想虽然实现方式不同,但是最终结果都是以key为基准值把整个数组分割成左右两个子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值。在我们日常写快速排序算法时,那两种优化方式三数取中,最小区间优化并不是一定要有,可以根据情况自主添加。//当左右子区间不存在,或只有一个元素时,//就不需要递归了,排序完成return;//这是排一趟,只排好了一个数//左边有坑,右边end找比key小的end--;//小的放到了左边的坑里,右边end自己形成了新的坑。原创 2024-04-08 09:05:25 · 1671 阅读 · 51 评论 -
【C/数据结构和算法】:栈和队列
栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾插和头删的实际复杂度为O(1),是非常合适的。因为如果使用数组的结构,出队列在数组头上出数据,这时需要挪动数据,时间复杂度为O(n),效率会比较低。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。而单链表的尾插和头删的时间复杂度为O(1),十分合适。压栈:栈的插入操作叫做进栈/压栈/入栈。队列也可以数组和链表的结构实现,使用。出队列:进行删除操作的一端称为。出栈:栈的删除操作叫做出栈。原创 2024-03-22 21:34:11 · 1568 阅读 · 20 评论 -
【C/数据结构与算法】:链表的实现(单向链表+双向链表)
1.顺序表的问题和思考问题:中间/头部的插入删除,时间复杂度为O(N)。增容需要申请新空间,拷贝数据,释放旧空间,会有不小的消耗。增容一般是呈2倍的增长,势必会有一定的空间浪费。例如当前容量为100,满了以后增容到200,我们再继续插入了5个数据,后面没有数据插入了,那么就浪费了95个数据空间。思考:如何解决以上问题呢?下面给出了链表的结构来看看。原创 2024-03-17 11:33:17 · 1202 阅读 · 41 评论 -
【C/数据结构与算法】:顺序表的实现
顺序表是用一段的存储单元的线性结构,一般情况下采用数组存储。动态顺序表与数组的本质区别是——原创 2024-03-13 15:25:13 · 1448 阅读 · 25 评论