自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 收藏
  • 关注

原创 [数据结构]排序之 归并排序(有详细的递归图解)

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法该算法是采用分治法(Divide andConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序核心步骤:归并:如果左区间和右区间都有序,那么一次比较,小的尾插到新空间,链表可以摘下来插入,数组不行,得借助新空间注:以下图片看不清楚可以点进去放大看。

2025-03-20 16:32:37 734

原创 [数据结构]排序之 快速排序详解(递归版&非递归版)

目录一、递归版本1. hoare版本(一)低配版(二)高配版①随机选key②三数取中法选key(在begin,end,mid三个数中选)2. 挖坑法3. 前后指针版本(推荐,细节容易把控)二、非递归版本结束后key左边的值都比key小,右边的都比key大代码如下:快速排序的特性总结:1. 快速排序整体的综合性能和使用场景都是比较好的,所以才敢叫快速排序2. 时间复杂度:O(N*logN)3. 空间复杂度:O(logN)4. 稳定性:不稳定影响快排性能的是key的位置,key的

2025-03-17 18:35:30 1320

原创 [数据结构]排序之 堆排序详解

所以如果用来排序的话,无论是向上调整还是向下调整建堆,总的时间复杂度都是O(N*logN)建堆和堆删除中都用到了向下调整,因此掌握了向下调整,就可以完成堆排序。注:向下建堆的效率O(N)比向上建堆的效率O(N*logN)高。向上调整建堆:模拟的是插入数据的过程。

2025-03-16 09:49:53 502

原创 [数据结构]排序之 直接选择排序

每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的。O(N^2),之前的序列对排序没有影响,所以直接选择排序很烂,基本不会用。元素,则将它与这组元素中的最后一个(第一个)元素交换。位置的元素就是当前未排序部分的最大值时,在第一次交换。时,实际上交换的并不是最大值,从而导致排序结果出错。O(N^2) 最坏情况和最好情况都是。)集合中,重复上述步骤,直到集合剩余。指向的最大值元素已经被交换到了。若它不是这组元素中的最后一个。考虑这样一种情况:当。

2025-03-15 07:52:30 457

原创 [数据结构]排序之插入排序

当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序,此时用array[i]的排序码与。array[i-1],array[i-2],…的排序码顺序进行比较,找到插入位置即将array[i]插入,原来位置上的元素顺序后移。注:基础不好的同学在写排序的时候建议先写单趟再写整体。元素集合越接近有序,直接插入排序算法的时间效率越高。单趟思想:将一个数字插入有序区间。O(N^2) 最坏情况。O(N^2) 最好情况。,它是一种稳定的排序算法。

2025-03-13 10:05:21 468

原创 [数据结构]排序之希尔排序( 缩小增量排序 )

时,数组已经接近有序的了,这样就会很快。在两层for循环里面还有一种写法:和上面的是一样的,上面的是一组排完再排第二组,这个是多组并排。的取值方法很多,导致很难去计算,因此在好些树中给出的希尔排序的时间复杂度都不固定。红色的为一组,黄色的为一组,蓝色的为一组,紫色的为一组,黑色的为一组。简单来讲就是分组插排:间隔为gap的分为一组然后再进行插排。在第一趟排序中,将红色的进行排序,将黄色的进行排序……《数据结构-用面相对象方法与C++描述》--- 殷人昆。当gap=1就成了插入排序。

2025-03-12 08:29:14 620

原创 [数据结构]排序之冒泡排序

冒泡排序是一种非常容易理解的排序。

2025-03-11 07:52:58 290

原创 [数据结构]堆详解

/大堆int size;}HP;

2025-03-10 16:31:31 925

原创 [数据结构&算法]判断一个二叉树是否是完全二叉树

完全二叉树定义:第k-1层是满的,第k层是连续的。思路:按层序走,非空节点一定是连续的。

2025-03-09 08:59:15 322

原创 [数据结构]单链表的经典算法:合并两个有序链表

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有。

2025-03-08 08:06:45 626

原创 [数据结构&算法]二叉树的前序遍历

【代码】[数据结构&算法]二叉树的前序遍历。

2025-03-07 17:17:08 183

原创 [数据结构&算法&递归]另一棵树的子树

思路:让左边的每一颗子树和右边的树进行比较

2025-03-06 15:04:53 468

原创 [数据结构&算法&递归]二叉树的构建及遍历

【代码】[数据结构&算法&递归]二叉树的构建及遍历。

2025-03-05 18:38:34 270

原创 [数据结构]二叉树详解

对于任何一颗二叉树,如果度为0其叶节点个数为n0,度为2的分支结点个数为n2,则n0=n2+1(通俗来讲就是度为0的永远比度为2的多一个)。叉树比较难,为了降低学习成本,此处手动快速创建一棵简单的二叉树,快速进入二叉树操作学习,等二叉树结构了解的差不多时,反过头再来研究二叉树真正的创建方式。不能把1的值带进队列,这样不好把1的左右孩子带进去,所以得存1的结构体,但是结构体比较大,所以存1的结构体的指针。:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。,则它就是满二叉树。

2025-03-04 15:47:33 1772

原创 [数据结构]单值二叉树

思路:校长跟院长比,院长跟主任比,主任跟班长比,班长跟舍长比,只要有一个不同就返回false。

2025-03-03 12:46:31 410

原创 [数据结构]树的概念及结构

的。

2025-03-02 08:14:20 697

原创 [数据结构]设计循环队列

【代码】[数据结构]设计循环队列。

2025-03-01 08:18:57 654

原创 [数据结构]用栈实现队列

【代码】[数据结构]用栈实现队列。

2025-02-28 20:56:26 479

原创 [数据结构]用队列实现栈

【代码】[数据结构]用队列实现栈。

2025-02-27 11:36:09 348

原创 [数据结构]队列详解

/ 链式结构:表示队列}QNode;// 队列的结构}Queue;front rear为什么不能放在struct QListNode里面?①冗余存储://每个 QListNode 节点都会包含 front 和tail 指针,这会导致大量的冗余存储。实际上,front 和 tail 只需要存储一次,而不是在每个节点中都存储。

2025-02-26 12:02:45 902

原创 Visual Studio 2022 调试指南:如何处理编译正确但运行结果错误的问题

在软件开发过程中,编译通过但运行结果错误是一个常见且令人困扰的问题。本文将详细介绍如何在 Visual Studio 2022 中有效地调试这类问题。我们将探讨如何利用断点、监视窗口、调用堆栈等调试工具,逐步排查代码中的逻辑错误。此外,文章还将介绍如何使用条件断点和异常处理来捕获难以发现的错误。通过本文的指导,您将能够更高效地定位和修复代码中的问题,确保程序不仅能够编译通过,还能正确运行。

2025-02-25 07:41:20 2461

原创 [C语言]动态内存分配详解

这些函数都是在堆区存放的,使用时需要stdlib.h这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。如果开辟成功,则返回一个指向开辟好空间的指针。如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。如果参数 size 为0,malloc的行为是标准是未定义的,取决于编译器。free函数用来释放动态开辟的内存。

2025-02-24 09:22:20 1658

原创 [数据结构]栈问题之括号匹配

代码中遇到的函数具体实现请看作者之前的文章[数据结构]栈详解有讲过。

2025-02-23 18:38:08 471

原创 [数据结构]栈详解

在栈操作函数中,栈指针 ps 是操作栈的基础,如果 ps 为 NULL,那么后续对 ps 指向的栈结构的任何访问(如 ps->top)都会导致未定义行为,通常是程序崩溃。因此,在进行栈操作之前,需要先确保 ps 不是 NULL,assert(!实际上是在检查栈不为空的情况下才继续执行后续操作。,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小。栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。出栈:栈的删除操作叫做出栈。压栈:栈的插入操作叫做进栈。栈的实现一般可以使用。

2025-02-22 09:38:17 730

原创 [数据结构]双链表详解

LTNode;

2025-02-21 12:56:26 1269

原创 [C语言]指针进阶压轴题

下面代码打印结果是什么?

2025-02-20 18:32:05 344

原创 [数据结构]单链表详解

/这里并不是结构体里面有个结构体,而是结构体里面有个指针,它的类型是结构体类型这里还不能这样写,这里涉及到编译器的查找规则:如果一个函数或者一个类型需要使用,那么编译器会向上查找而不会向下}SListNode;

2025-02-20 08:03:08 1401

原创 [数据结构]顺序表详解

线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。

2025-02-19 11:27:15 954

原创 [数据结构]复杂度详解

如何衡量一个算法的好坏?算法的复杂度:时间复杂度和空间复杂度。

2025-02-18 07:46:39 1382

原创 [C语言] 打印菱形

【代码】用C语言打印菱形。

2025-02-17 16:00:16 299

原创 [C语言]编写程序数一下1到100的整数中出现多少数字9

【代码】用C语言编写程序数一下1到100的整数中出现多少数字9。

2025-02-16 09:58:34 272

原创 [C语言]求一组数中的最大值

【代码】用C语言求一组数中的最大值。

2025-02-15 08:19:22 330

原创 [C语言]分数求和 计算1/1 - 1/2 + 1/3 - 1/4 + 1/5 .......+1/99 - 1/100 的值,打印结果

【代码】用C语言分数求和 计算1/1 - 1/2 + 1/3 - 1/4 + 1/5 .......+1/99 - 1/100 的值,打印结果。

2025-02-14 11:24:40 213

原创 [C语言]求出0~100000之间的“水仙花数“

【代码】用C语言求出0~100000之间的“水仙花数“

2025-02-13 16:11:07 254

原创 C语言中常用的字符函数和字符串函数

'\0''\0'

2025-02-12 15:38:49 1374

原创 阿里巴巴2015笔试题

下面代码打印结果是什么?

2025-02-11 11:24:37 345

原创 [C语言]指针进阶(超详细版)

数组指针是指针?还是数组?答案是:指针。我们已经熟悉:整形指针:存放整型地址的指针,同时 int * pint;能够指向整形数据的指针。浮点型指针:存放字符地址的指针,同时 float * pf;能够指向浮点型数据的指针。那数组指针应该是:存放数组地址的指针,能够指向数组的指针。下面代码哪个是数组指针?//p1, p2分别是什么?解释://解释:p先和*结合,说明p是一个指针变量,然后指着指向的是一个大小为10个整型的数组。所以p是一个指针,指向一个数组,叫数组指针。

2025-02-10 11:12:12 1662

原创 [C语言]指针初阶(超详细版)

1.指针是内存中一个最小单元的编号,也就是地址2.平时口语中说的指针,通常指的是指针变量,用来存放内存地址的变量&a----对a取地址,取出a的地址a是一个整型变量,整型变量占用四个字节,每个字节都用地址&a取出的是第一个字节的地址(较小的地址)int *pa=&a;pa被称为指针变量是专门用来存放地址的。

2025-02-09 08:33:37 999

原创 2015百度面试题:设计一个小程序来判断当前机器的字节序(大端&小端)

【代码】2015百度面试题:设计一个小程序来判断当前机器的字节序(大端&小端)

2025-02-08 08:12:37 437

原创 [C语言]逆序打印出字母:abcdef

/伪代码,同下交换a和f交换b和e交换c和d。

2025-02-07 10:11:48 323

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除