![](https://img-blog.csdnimg.cn/150e1008d350414bafd6882d588b7c05.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构初阶(C语言)
文章平均质量分 93
以C认识数据结构。包括复杂度、顺序表、链表、栈和队列、二叉树、堆、排序算法以及相关OJ练习详解哦。
干货满满,欢迎收藏
阿qiu不熬夜
积极更新,欢迎关注我哦
目前在更:C++与Linux
有关数据结构初阶与C语言入门与进阶的内容都可以在专栏找到哦
展开
-
时间复杂度(超详解+例题)
时间复杂度的保姆级教程,包理解哦,不进来看看嘛原创 2023-02-19 01:05:01 · 1479 阅读 · 16 评论 -
空间复杂度(超详解+例题)
空间复杂度超详解,还有例题帮助理解哦,确定不来看看嘛原创 2023-02-22 20:40:40 · 874 阅读 · 9 评论 -
顺序表(超详解哦)
顺序表超详解,动态顺序表的接口实现,有全部源码与详细解析哦原创 2023-02-24 23:18:04 · 1414 阅读 · 9 评论 -
详解单链表(内有精美图示哦)
单链表的详解,单链表实现对数据的管理,有精美图示包理解哦原创 2023-03-03 00:06:20 · 834 阅读 · 17 评论 -
反转链表(精美图示详解哦)
反转链表详解(反转指针的方法)原创 2023-03-05 16:33:26 · 1311 阅读 · 8 评论 -
链表的中间结点与链表的倒数第k个结点(精美图示详解哦)
链表的中间结点与链表倒数第k个结点详解,图例包理解哦,确定不进来看看嘛原创 2023-03-06 23:37:11 · 1167 阅读 · 16 评论 -
合并两个有序链表(精美图示详解哦)
合并两个有序链表,两种解法。有详细图示包理解哦,确定不进来看看嘛原创 2023-03-08 00:35:49 · 8520 阅读 · 4 评论 -
分隔链表(精美图示详解哦)
分隔链表要求我们实现将一个点链表中,val大于等于x的结点与val小于x的结点分隔:小于x的结点在大于x的结点前。并且原链表中的数据顺序不能发生改变原创 2023-03-09 23:02:16 · 1006 阅读 · 9 评论 -
详解带头双向循环链表(精美图示哦)
在这篇文章中将介绍一种复杂的链表:带头双向循环链表。并且实现带头双向循环链表对数据的管理。这种链表可以解决上面说的单链表的一些缺陷。掌握之后,就可以理解各种链表的类型了。原创 2023-03-12 00:35:14 · 472 阅读 · 5 评论 -
复制带随机指针的链表(精美图示详解哦)
要求我们深度拷贝该链表,即在拷贝的链表中,不仅要拷贝每个链表中的数据然后用next将每个结点按顺序连接起来,还要实现拷贝的链表每个结点中的random指针指向的结点也与原链表相同。原创 2023-03-17 22:57:06 · 442 阅读 · 15 评论 -
栈及其接口实现(超详解哦)
栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。在栈顶插入元素称为压栈;在栈顶删除元素称为出栈。访问元素时,只能访问栈顶的元素。比如在栈中依次存压入了1、2、3、4这4个数据,当要删除元素时,只能从栈顶依次删除4、3、2、1。原创 2023-03-20 22:46:58 · 326 阅读 · 8 评论 -
队列及其接口实现(超详解哦)
队列是只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表。队列具有先进先出的特点FIFO(First In First Out)入队列原创 2023-03-22 17:26:20 · 617 阅读 · 7 评论 -
用队列实现栈(图示超详解哦)
题目描述很简单:通过两个队列实现栈存储数据的特点,即先进后出:我们需要实现push、pop、top、empty、free:void push(int x) 将元素 x 压入栈顶;int pop() 移除并返回栈顶元素;int top() 返回栈顶元素;bool empty() 如果栈是空的,返回 true;否则,返回 false。原创 2023-03-25 00:44:19 · 764 阅读 · 4 评论 -
用栈实现队列(图示超详解哦)
通过两个栈实现队列存储数据的特点,即先进先出:我们需要实现基本的队列操作push、pop、top、empty、free:void push(int x) 将元素 x 推到队列的末尾;int pop() 从队列开头移除并返回元素;int peek() 返回队列开头的元素;bool empty() 如果队列为空,返回 true ;否则,返回 false。原创 2023-03-25 17:12:11 · 395 阅读 · 1 评论 -
设计循环队列(图示超详解哦)
我们需要实现循环队列的如下接口:MyCircularQueue(k): 构造器,设置队列长度为 k;Front: 从队首获取元素。如果队列为空,返回 -1;Rear: 获取队尾元素。如果队列为空,返回 -1;enQueue(value): 向循环队列插入一个元素。如果成功插入则返回真;deQueue(): 从循环队列中删除一个元素。如果成功删除则返回真;isEmpty(): 检查循环队列是否为空;isFull(): 检查循环队列是否已满。原创 2023-03-25 20:39:41 · 984 阅读 · 6 评论 -
树与二叉树(图示超详解哦)
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。树由根结点与子节点组成,一个根结点可以有多个子节点;中间的子节点又是子树的根结点;最后的结点没有子节点,为叶子结点:原创 2023-03-27 23:46:46 · 632 阅读 · 10 评论 -
堆及其接口实现(图示超详解哦)
如果有一个数据的集合,把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:根结点的值始小于(或大于)子结点的值。将根结点最大的堆叫做最大堆或大根堆,根结点最小的堆叫做最小堆或小根堆:(需要注意的是,堆是一种完全二叉树。所以我们在表示堆时,用顺序表来存储会更方便)原创 2023-04-03 23:50:33 · 417 阅读 · 18 评论 -
二叉树练习题(递归展开图详解哦)
在这篇文章中要介绍二叉树的链式访问,但是由于链表结点是难以随意访问二叉树中的结点的,用链式的二叉树进行增删查改其实是没有多少意义的。在本篇文章中就介绍几道二叉树链式结构的题目:单值二叉树、二叉树的最大深度、翻转二叉树、相同的树。原创 2023-04-10 00:11:31 · 407 阅读 · 8 评论 -
【排序】选择排序与堆排序(图示详解哦)
在本篇文章中要介绍的是选择排序与堆排序,它们都属于选择排序。这两种排序算法的思想都是从待排序的数据元素中选出最大或最小的元素,放在序列的起始位置或末尾位置,以此来使整个序列有序。原创 2023-04-17 11:50:47 · 205 阅读 · 3 评论 -
【排序】直接插入排序与希尔排序(图示详解哦)
直接插入排序与希尔排序都属于插入排序的一种:这两种排序的思想都是从待排序的部分中依次取出元素,插入到它前面的已排序部分中的合适位置。迭代,使整个数组有序。原创 2023-04-18 23:18:47 · 247 阅读 · 8 评论 -
【排序】冒泡排序与快速排序(三个版本+非递归图示详解哦)
在这篇文章中将介绍冒泡排序与快速排序:它们都属于交换排序,即通过两两比较交换,将一个元素放到其正确的位置上,最终实现排序。原创 2023-04-23 00:22:10 · 466 阅读 · 10 评论 -
【排序】归并排序(递归+非递归图示详解哦)
归并排序需要一块与数组大小相同的空间,用于临时存储归并后的数据。排序时,先将整个数组平分为两份,再分为4份……以此类推,直到不能再平分后(区间只剩一个元素)。向上归并,即将两个区间归并到临时空间中的对应位置。再将临时数组中对应区间中已经排序好的数据拷回原数组。一直向上归并,直到排序完成。原创 2023-04-28 23:48:38 · 1205 阅读 · 5 评论