![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 92
Ahao_te
很菜,得继续努力。
展开
-
【C数据结构】递归和非递归实现归并排序
归并排序递归与非递归实现原创 2022-09-09 16:56:51 · 445 阅读 · 2 评论 -
【C数据结构】堆的建立、堆排序和Top K问题
TopK问题与堆排序补充原创 2022-08-09 16:46:01 · 280 阅读 · 0 评论 -
【C数据结构】非循环队列和循环队列(链表与顺序表实现)
非循环队列和循环队列原创 2022-08-06 16:37:01 · 661 阅读 · 0 评论 -
【C语言】通俗易懂的KMP算法
KMP算法原创 2022-07-13 17:18:41 · 698 阅读 · 0 评论 -
【C数据结构】迷宫问题
文章目录一、迷宫问题的思路二、简单迷宫的代码实现三、地下迷宫问题的思路四、地下迷宫的代码实现前言:本章记录作者学习中,遇到的两个比较有趣的问题,一个简单和一个较复杂的迷宫问题。 一、迷宫问题的思路让我们先来看简单的:迷宫问题它的具体要求:输入描述:输入两个整数,分别表示二维数组的行数,列数。再输入相应的数组,其中的1表示墙壁,0表示可以走的路。数据保证有唯一解,不考虑有多解的情况,即迷宫只有一条通道。如5 50 1 0 0 00 1 1 1 00 0 0 0 00 1原创 2022-05-19 15:12:04 · 16973 阅读 · 3 评论 -
【C数据结构】快速排序
一、快速排序1、什么是快速排序假设有一组数组在其中任选一个基准值,假设是6通过一些方法将序列分成左序列和右序列,左序列都小于基准值,右序列都大于基准值只是将基准值的位置确定了,其它的数只是范围确定了,位置不一定对。之后分别对左序列和右序列用同样的方式,让每个数在相应位置上。 接下来的介绍的方法,就是为了实现基准值在相应位置上。 2、快速排序的挖坑法假设对一个数组进行实现升序。 我们选定第一个数为基准值,在将基准值赋值给变量key后,将原来第一个数的位置看作一个坑,并且原创 2022-05-09 17:14:10 · 613 阅读 · 0 评论 -
【C数据结构】堆排序和选择排序
文章目录一、选择排序1、选择排序的思路2、选择排序的代码实现二、堆排序1、什么是堆排序2、堆结点中的关系3、堆的建立4、堆的升序和降序一、选择排序1、选择排序的思路在这里为了更高的效率,一次固定两个值的位置,在最开始找到最小值和最大值并固定其位置。 特殊情况注意: 2、选择排序的代码实现//直接选择排序void SelectSort(int* a, int n){ int begin = 0; int end = n - 1; while (begin < end原创 2022-05-04 17:12:29 · 1206 阅读 · 2 评论 -
【C数据结构】插入排序和希尔排序
一、插入排序1、基本思想 插入排序的基本思想,把待排序的一个序列,按照一定的大小顺序,逐个将一个个数插入到一个已经排好序的有序序列中。所以假设有一组无序序列,我们需要排一个升序的序列。我们可以将第一个数,单独的看成是一个有序的序列。然后把这个有序序列的右边一个值当作待插入数(如3),当3小于5就放在5的左边。接下来让每个待插入的数,和已经有序的序列中的值进行比较,若小于其中一个值就放在左边,直到排成有序序列。通过这个方法,我们可以很明显的看到它的时间复杂度是O(N^2),可见它的效率很原创 2022-05-03 12:14:17 · 683 阅读 · 1 评论 -
【C数据结构】二叉树基础和简单练习题
文章目录一、树的基础概念1、学会看树中的树2、树的基础概念二、二叉树的概念和结构1、二叉树的特点2、二叉树的前序、中序、后序排列3、二叉树的性质4、搜索二叉树5、求二叉树的结点数、叶结点数和二叉树的最大深度三、简单练习题1、平衡二叉树2、二叉树遍历一、树的基础概念1、学会看树中的树在数据结构中,树对比现实中的树,根在上,枝干在下。并且树在连线中不会构成回路。下面就是一颗数据结构所表示的树,它以A为根节点,D、E、F为叶节点。如果以A为根看,那么整个就是一颗以A为根的树。从A向下看,当以B为原创 2022-04-30 14:47:20 · 944 阅读 · 3 评论 -
【C数据结构】认识栈并用数组和链表实现栈
文章目录一、认识栈二、数组栈的实现 1.准备测试页和头文件 2.初始化和销毁栈操作的实现 3.入栈和出栈操作的实现 4.判空、取值、查看有效数量操作的实现二、链式栈的实现 1.准备测试页和头文件 2.入栈和出栈操作的实现 3.判空和销毁栈操作的实现 4.取值、查看有效数据量操作的实现三、总结一、认识栈 栈是一种先入后出(或是后入先出)的结构,通常插入和删除操作的一端称为栈顶,另一端称为栈底。 栈的结构也是线性表的一种,结构实现一般可以用数组或者链表实现,相对而言数组的结构实现更优一点。因为数组原创 2022-04-24 17:51:40 · 1794 阅读 · 0 评论 -
【C数据结构】解决链表最繁结构双向链表和经典力扣题
一、双向带头循环链表 因为它的结构是链表中最复杂的,通过这个结构,我们可以更好的练习一下双向、带头结点、循环这几个情况下的链表。 它和单链表相比,虽然结构上复杂了,但是单链表的一个明显的缺点——只能往一个方向访问,访问不了上一个结点,使得在一些操作的实现上变得很复杂。 所以它的结构复杂,却在一些操作的实现上可以变得很容易。 二、链表的实现1、头文件和测试页的实现让我们先创建一个为SList.h的头文件:并且它将包括以下我们需要实现的函数//SList.h#include<原创 2022-04-21 10:59:08 · 1182 阅读 · 0 评论 -
【C数据结构】从链表中看到的常见问题:一级指针*和二级指针**的使用、头结点的作用及解释、注意不能解引用空指针
链表中的常见问题原创 2022-04-17 19:44:19 · 1720 阅读 · 2 评论 -
【C数据结构】单链表的实现以及链表和顺序表的优缺点
单链表原创 2022-04-17 17:00:31 · 1697 阅读 · 11 评论 -
【C数据结构】解决动态顺序表以及常见问题
动态顺序表原创 2022-04-10 16:09:36 · 3211 阅读 · 5 评论 -
【C数据结构】搞懂时间复杂度和空间复杂度
一、小谈一下算法的复杂度评判一个算法的好坏,一般是从时间和空间两个维度来衡量的时间复杂度衡量一个算法的运行快慢,而空间复杂度衡量一个算法所需要的额外空间(但由摩尔定律(每18个月计算机内存增加一倍)的存在,空间复杂度不再需要特别被关注)。二、时间复杂度总结的六点算法的时间复杂度是一个函数(数学上的函数表达式),并且大小由算法中基本操作的执行次数决定(在不同计算机硬件环境下,算法运行速度肯定不一样,运行时间并不好作为参考)。时间复杂度用大O符号表示,如O(N)。时间复杂度的前三点:原创 2022-04-03 23:21:46 · 1103 阅读 · 4 评论