![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
初阶数据结构(C语言实现)
文章平均质量分 80
C语言实现的数据结构
2024_极限年
运用之妙,存乎一心。
展开
-
【数据结构】队列
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出,FIFO(First In First Out)队列也可以用数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。3.循环队列的存储空间为 Q(1:100) ,初始状态为 front=rear=100。,2,3,4 ,进栈过程中可以出栈,则下列不可能的一个出栈序列是()后, front=rear=99 ,则循环队列中的元素个数为( )D 读取队头元素的值。原创 2024-01-08 08:00:00 · 385 阅读 · 0 评论 -
【数据结构]排序算法之插入排序、希尔排序和选择排序
简单不先于复杂,而是在复杂之后。原创 2024-02-04 20:48:56 · 1364 阅读 · 1 评论 -
【数据结构】排序之冒泡排序和快速排序
简单不先于复杂,而是在复杂之后。原创 2024-02-05 13:19:35 · 1529 阅读 · 6 评论 -
【数据结构】二叉树链式结构的实现
设二叉树的根节点所在层数为1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第2层上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。由于现在所学的内容不够让我们深入掌握二叉树结构,为了降低学习成本,此处手动快速创建一颗二叉树,快速进入二叉树操作学习,等二叉树结构了解的差不多时,后面的博客再来研究二叉树真正的创建方式。从概念中可以看出,二叉树定义是递归式的,因此后序基本操作中基本都是按照该概念实现的。原创 2024-02-03 22:27:59 · 927 阅读 · 3 评论 -
【数据结构】堆的实现及应用
简单不先于复杂,而是在复杂之后。原创 2024-02-02 16:45:32 · 1111 阅读 · 1 评论 -
【数据结构】树和二叉树的概念及结构
通常的方法是链表中每个节点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链接点的存储地址。:若一个节点含有子节点,则这个节点称为其子节点的父节点;:以某节点为根的子树中任一节点都称为该节点的子孙。:一个节点含有的子树的根节点称为该节点的子节点;(亲兄弟)具有相同父节点的节点互称为兄弟节点;:度为0的节点称为叶子节点;:从根到该节点所经分支上的所有节点;:一个节点含有的子树的个数称为该节点的度;:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;原创 2024-02-01 21:47:31 · 1503 阅读 · 2 评论 -
【数据结构】双向带头循环链表实现及总结
顺序表优点:尾插尾删效率很高。随机访问。(用下标访问)’相比链表结构:cpu高速缓存命中率更高。顺序表缺点:头部和中部插入删除效率低。 —O(N)扩容。 性能消耗+空间浪费链表优点:任意位置插入删除效率很高。 O(1)按需申请释放。链表缺点:不支持随机访问原创 2024-01-31 08:04:40 · 829 阅读 · 7 评论 -
【数据结构】链表的一些面试题
如果N是奇数,距离会减少到1,fast会越过slow指针,fast和slow之间得距离变成了-1,也就是C-1,(C-1是环长度),如果C-1是偶数,再追一圈就可以追上,如果C-1是奇数,永远追不上;此时,两个指针每移动一次,之间的距离就缩小一步,不会出现每次刚好是套圈的情况,因此:在慢指针走到一圈之前,快指针肯定是可以追上慢指针的,即相遇。快慢指针,即慢指针一次走一步,快指针一次走两步,两个指针从链表起始位置开始运行,如果链表带环则一定会在环中相遇,否则快指针率先走到链表的末尾。原创 2024-01-30 23:10:34 · 1072 阅读 · 0 评论 -
【数据结构】栈
栈中的数据元素遵守后进先出 LIFO (Last In First Out)的原则。数据结构的栈和操作系统的栈不是一个概念,这是两个学科的东西,但都符合后进先出。栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。压栈:栈的插入操作叫做进栈/压栈/入栈,因为数组在尾上插入数据的代价比较小。,相对而言数组的结构实现更优一些。出栈:栈的删除操作叫做出栈。栈的实现一般可以使用。原创 2024-01-07 08:00:00 · 443 阅读 · 0 评论 -
【数据结构】链表简介及单链表的实现
任意位置高效插入删除要交给之后文章讲解的双向链表。单链表只适合头插头删,时间复杂度 O(1)单链表只适合头插头删,时间复杂度 O(1),非顺序的存储结构,数据元素的。原创 2024-01-05 08:00:00 · 602 阅读 · 0 评论 -
【数据结构】一些数组面试题以及顺序表的思考
若 nums1 的数先结束比较,那么可以不做任何操作,但是如果 nums2 先结束,就需要把 nums2 中剩余的数拷贝到 nums1 中。//end1 结束, nums1的数组都拷贝过去了,需要再把nums2剩下的数据拷贝过去。//end2 结束, nums2的数组都拷贝过去了,不用处理。思考:该如何解决以上问题?原创 2024-01-04 08:00:00 · 433 阅读 · 0 评论 -
【数据结构】顺序表
静态的顺序表是有缺陷的,静态顺序表在创建时需要指定一个固定的大小,这个大小通常在编译时就确定了。如果实际数据量超过了静态顺序表的大小,就可能导致溢出或者需要重新定义一个更大的静态顺序表,这会浪费内存或者导致程序运行错误。一般是扩容2倍比较合适,其他倍数也可行,只不过扩容扩多了会存在空间浪费,扩少了就会导致频繁扩容,效率损失,所以扩容2倍比较合适。但是在物理结构上不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。静态顺序表的定长数组导致 N 定大了,空间开多了浪费,开少了不够用。原创 2024-01-03 06:34:52 · 1036 阅读 · 0 评论 -
【数据结构】算法的时间复杂度和空间复杂度
递归实现的斐波那契数列的空间复杂度为 O(N),这是因为在递归调用的过程中,系统会使用一个调用栈(call stack)来存储每次递归调用的信息。在斐波那契数列的递归实现中,对于每个 n,会有两个递归调用,即 F(n-1) 和 F(n-2)。因此,递归调用的深度就是二叉树的高度,即 N。递归的时候每次调用函数要创建栈帧,每次调用的函数栈帧是常数个,调用N+1次函数,所以空间复杂度是O(N)。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有把程序放在机器上跑起来,才能知道。原创 2024-01-02 19:53:22 · 1472 阅读 · 0 评论