自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

duanku111的博客

你好呀,我是一条短裤

  • 博客(32)
  • 收藏
  • 关注

原创 两篇文章讲透数据结构之堆(一)!

堆(Heap)可以被看作一种特殊的数据结构,堆通常是一个可以被看成完全二叉树的数组对象。根据堆的数值的关系,可以将堆分为两类:通俗解释来说:若是任意一个根结点的值都大于其子结点,则被称为大根堆,因为根大!若是任意一个根结点的值都小于子结点,则是小根堆,因为根小! 既然堆是一种二叉树,那么我们就可以采用链式存储或者数组存储来实现这个数据结构。但是考虑到完全二叉树的特性,我们在这里采用数组存储的方式,因为这样既方便访问,也不会浪费空间。既然使用数组存储,就会用到下标,而我们每次插入和删除,都需要计算父结点和子结

2024-05-24 23:24:16 268

原创 C++入门:从C语言到C++的过渡(1)

定义命名空间,需要用的namaspace关键字,后面跟命名空间的名字,然后接一对花括号{},花括号中即为命名空间的成员。//duanku即命名空间的名字,一般开发中是用项目名字做命名空间名那么,命名空间中可以定义什么呢?命名空间中可以定义变量/函数/类型。//变量int N=1;int Add(int left, int right)//函数struct Node//结构体-->类型int val}duan;学习了命名空间的定义了之后,就可以开始学习如何使用命名空间了。

2024-05-24 17:25:39 612 2

原创 一篇讲透排序算法之插入排序and选择排序

先将数组的第一个元素当作有序,让其后一个元素与其比较,如果比第一个元素小则互换位置,之后再将前两个元素当作有序的,让第三个元素与前两个元素倒着依次进行比较,如果第三个元素比第二个元素小的话,则交换位置,之后再比较第二个元素和第一个元素。此时我们的begin下标处的值已经更新成了mini处的值,而由于我们的maxi和begin是相同的,因此此时我们maxi下标处的值其实是mini处的值。如果begin和maxi重合,根据我们的代码逻辑,我们首先会交换mini和begin位置处的值。这时我们的数组就有序了。

2024-05-23 21:23:36 660 1

原创 一篇讲透数据结构之链式队列

队列(queue)是一种只允许在一端进行插入操作,而在另一端进行删除操作的线性表。其严格遵循。队列与栈类似,实现方式有两种。一种是以的方式实现,另一种以来实现。这两种实现方式各有优劣,并且都有细节需要处理。

2024-05-22 14:27:12 841 3

原创 一篇文章讲透链式栈!

在上一篇文章中我们已经学习了顺序栈,这篇文章我们来学习链式栈。两种栈的实现方式大同小异,但为了学习到更多的方法,在此篇文章中,我们使用另外一种push栈的方法。

2024-05-21 16:26:29 301 1

原创 一篇文章讲透顺序栈!!!

栈是一种只允许在一端进行操作(插入和删除)的。

2024-05-21 15:25:24 451

原创 一篇文章讲透带头双向循环链表!

前面我们已经学习了单链表,它解决了顺序表中插入或者删除数据需要挪动大量数据的缺点。但仍有需改进的地方。就比如我们需要寻找某个结点的前一个结点,就只能通过遍历来寻找。这样就可能会造成大量的时间浪费。为了解决这个问题,今天就要学习今天的主角-->带头双向循环链表在学习单链表中,我们大家可能被二级指针搞昏了头脑,现在我们实现一个带头的链表,也就是带哨兵位的链表,哨兵位只充当哨兵作用,它在链表的第一个位置,但不保存数据。因此我们在使用时,并不会将哨兵位当作头结点,而是将它的下一个结点当作头结点。

2024-05-19 11:48:51 962 3

原创 一篇文章讲透单链表!!!

链表是一类物理存储结构上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。物理存储结构:真实的在内存中的存储结构。逻辑存储结构:脑袋中构思的存储结构。我们刚刚已经介绍了链表是由指针依次链接形成的一种存储数据的结构。那么,链表里面应该有一个成员是数据,一个成员是指针。现在我先给大家定义一个单链表//数据//指向下一个数据的指针}SLTNode;那么,我们可以画出下图,它的结构应是如此:现在再给大家解释一下链表的分类。

2024-05-18 22:06:52 953 5

原创 一篇文章讲透顺序表!!!

顺序表是用一段物理内存连续的存储单元依次存储数据结构元素的线性结构,它的底层其实是数组。

2024-05-18 16:30:07 961 1

原创 解锁联合体和枚举类型魅力

由于联合体共用一块内存空间,因此我们可以得到如下结论:联合体可以避免不必要的内存浪费,使得内存使用更加高效。在C中,是可以用整数给枚举变量赋值的,但由于CPP的类型检查更加严格,所以不能使用整数给枚举变量赋值。我们打印出了联合体的两个成员的地址以及联合体的地址,发现他们是一样的,因此他们共用一块内存空间。由于联合体共用同一块内存空间,在给un.c赋值之后,un.c的值共用了原来un.i的低地址的空间。这些可能取值都是有值的,默认从0开始,依次加1,也可以在声明枚举变量时赋初值。

2024-04-30 10:13:29 665 2

原创 解密C语言内存分配奥秘,遨游动态内存管理海洋

在C99标准中,结构中的最后一个元素允许是未知大小的数组的。

2024-04-29 19:43:24 876 4

原创 跟裤裤一起探索结构体的奥秘!

位段的声明和结构是类似的,有两个不同:1.位段的成员必须为int类型,有符号无符号都可,但在C99标准中,位段也可选择其他类型。2.位段的成员名后面有一个冒号和一个数字。数字表示其占用的比特位下面来实现一个位段类型struct Aint _a : 2;//占用2个比特位int _b : 5;//占用5个比特位//占用10个比特位//占用30个比特位。

2024-04-24 11:20:12 768 2

原创 裤裤带你一起学C语言内存函数啦!

内存函数在库中,我们使用内存函数必须先引入头文件。

2024-04-23 21:13:41 608 5

原创 裤裤带你学C语言字符串函数库啦!一篇文章讲透!!!

这个是一个字符串比较函数,但是只比较num个字符。这个函数是比较str1和str2的前num个字符,如果相等就继续向后比较,一直比较到第num个字符。

2024-04-23 18:20:37 1010

原创 计算机组成原理-->真值,机器数,定点数,浮点数,原反补

在计算机中,小数点不用专门的器件表示,而是按照约定的方式标出。小数点固定的称为定点表示,小数点不固定的叫做浮点表示。在现代计算机中通常用定点补码整数表示整数,用定点原码小数表示浮点数的尾数部分,用移码表示浮点数的阶码部分。

2024-04-16 16:35:38 295 1

原创 数据在内存中的存储

先介绍一个知识点:读取数据是从低地址位开始读取的。大端模式:数据的低位字节内容保存的内存的高地址处,而数据的高位字节内容保存在内存的低地址处。小端模式:数据的低位字节数据保存在内存的低地址处,而数据的高位字节内容保存在内存的高地址处。什么意思呢?举个例子,一个数0x1122,,那么0x11为高字节,0x22为低字节。对于大端模式来说。0x11就存储在低地址处,0x22就存储在高地址处;对于小端模式来说,0x11就存储在高地址处,0x22就存储在低地址处。

2024-04-15 17:11:37 136 1

原创 冒泡排序及qsort实现

如此循环往复,当我们第九次遍历的时候,是不是就可以让倒数第二个是最大的了呢,那么,我们整个的数组就有序了!现在我们实现了一个冒泡排序,但是如果我给的数字是1 2 3 4 5 6 7 8 9 10的话,用上面的代码再进行排序,还是要进行一轮又一轮的比较才可以,即便它并不需要交换。现在,我们继续分析,经过这轮比较,每次比较中较大的数都会向右移动一位,这轮比较结束后,最右边的数字一定是目前数字中最大的数字,但是中间9个数字的大小却无法确定,如果你不能理解的话,可重读一遍上面的红字。现在我们就完成了一次冒泡排序。

2024-04-05 15:56:48 722 1

原创 指针(四)

数组指针变量,也就是存放数组地址的指针变量。现在给大家写两行代码,请大家判断一下p1和p2分别是什么。先给大家介绍一下两个知识点1.操作符的优先级:()>[]>*2.一个变量,去掉变量名,就是变量的类型。根据这两个知识点,我们来观察一下这两行代码。第一行代码中,p1要先和[10]结合,因此变量名是p1[10],之后p1[10]再和前面的*结合,因此这是一个指针数组,其中的每个元素的类型是int*。第二行代码中,有括号,先将p2和前面的*结合,说明p2是一个指针变量,然后去掉变量名p2,得到。

2024-04-05 00:01:38 607 2

原创 指针(三)

在前面的文章中,有这样的代码这里我们使用&arr[0]的方式拿到了数组的第一个元素的地址,但其实数组名就是数组首元素的地址。下面我们进行一个测试。但是,有两个例外,arr表示的不是首元素的地址。除了这二者之外,任何地方使用数组名,数组名都代表首元素的地址。现在我们来观察一下这段代码我们发现,这三行代码打印出来的结果一模一样,那么他们的区别在哪里呢?我们刚刚说了&arr表示取出一个数组的地址,他们的区别就在这里。

2024-04-02 22:42:48 1159 3

原创 指针(二)

野指针即只想位置不知道的指针(随机的,不正确的,没有明确限制的)

2024-04-02 16:58:08 919 1

原创 计算机系统概述2--计算机性能指标

衡量一台计算机的性能是由多项技术指标综合确定的,既包含硬件的各类性能,又包含软件的各类性能,这里主要讨论硬件的技术指标。对于同一个程序,CPU的执行时间就代表了CPU的性能,它主要取决于三个因素:CPI,主频和指令数,这三者是互相制约的。不同的机器会将指令拆成不同的指令集,指令集中的每条指令都很复杂,则指令数会少,但CPI会很大,因此它们会相互制约。我们平常所说的32位,64位的机器,这里的32,64就是指字长。,倘若字长较短但是运算位数较多的数据,则需要经过两次甚至多次的运算才能完成,会。

2024-03-28 17:45:57 464

原创 计算机系统的概念(一)

1.计算机系统由硬件和软件组成硬件-->实体部分 软件-->存储在主存或者辅存内系统软件应用软件系统软件用来管理整个计算机系统应用软件是用户根据任务需求编制的各种程序。

2024-03-28 17:42:44 1025

原创 指针详解(一)

专业的说,CPU在处理数据的时候,需要的数据是在内存当中读取的,处理后的数据也会放回内存中,而内存划分为了一个个的内存单元,每个单元的大小取1个字节,也就是8个比特位,而每个内存单元都有一个编号,有了这个编号,我们就可以快速的找到这个内存单元。第二种情况放在*的右边,修饰的是pm,即确保指针变量本身的内容不能改变,但是*pm指向的内容是可以变化的,即,我们不可以修改pm,但是可以修改*pm。又因为和其大小有关系的只是地址总线,而不是它指向的内容,因此,无论指向的是什么类型的数据,都不会影响指针变量的大小。

2024-03-28 16:19:48 1125

原创 位操作符详解

位操作符和二进制有一定的关系,我们先铺垫一些二进制和进制转换的知识。

2024-03-26 16:31:57 604

原创 函数递归详解

上述代码就是一个最简单的递归程序,但是上面的递归知识为了演示递归的基本形式,如果运行的话会陷入死递归,最后栈溢出。

2024-03-18 22:07:34 685 1

原创 扫雷游戏的完成

扫雷是一款很大众的益智类游戏,游戏规则也很简单,把所有的所有的雷排查出来即为胜利,如果在期间踩到雷则游戏失败(结束)。这款游戏分为初级(9*9),中级(16*16),高级(16*30),或则自定义大小方块矩阵中随机布置一定量的炸弹(初级为10个,中级为40个,高级为99个炸弹)。由玩家逐个翻开方块,以找出所有炸弹为目的。注意:如果翻开的格子下面没有炸弹,则会显示周围一圈八个格子中炸弹的个数,如下图所示(这里的1指的就是在该格子周围一共有一个雷),所以想要过关就要利用好这些显示出来的数。

2023-12-20 15:40:03 1054 1

原创 二维数组以及变长数组

上一篇博客中详细介绍了一维数组的相关知识点,现在我们介绍一下二维数组。一维数组作为元素的数组就叫做。二维数组作为元素的数组叫做二维数组以上的数组叫做。

2023-12-12 22:45:29 512 1

原创 数组(一)

数组中存放的是一个或多个数据,但是数组的元素个数不能为0.数组中存放的数据的类型是相同的。数组分为一维数组和多维数组。

2023-12-11 23:56:39 87 1

原创 综合运用分支与循环、函数调用等知识完成猜数字游戏

首先,我们应先架构出游戏的大体框架,而且要保证游戏可反复游玩,那么就需要保证我们的游戏代码需要放在循环中,而且需要在代码运行之后循环体就开始执行,因此,我们这时需要的是do-while循环。现在我们已经得到了一个可重复游玩的猜数字游戏了,但是每次游玩后不会清屏,使得界面不够简洁,那么我们就可以使用windows的指令和Sleep函数来实现使界面简洁。有了游戏菜单,我们的玩家就要做出选择,按图索翼,我们一共有三个方向可以选择,分别是进入游戏,退出游戏,或者是乱点...如何...default...

2023-12-07 23:46:17 218

原创 猜数字游戏必备知识点---随机数!

1.随机数函数randC语言中提供了一个函数交rand,这个函数可以生成随机数,代码如下。通过测试我们发现,运行多少次结果都是一样的,如下图。这是因为我们的rand函数其实是通过算法来得到的随机数,也就是说,这个随机数是伪随机数。rand函数是对一个叫“种子”的基准值生成的随机数。上图得到的随机数是一样的,那是因为我们的rand函数默认种子是1,那么若想真正的达到随机的效果,则需要我们的另外一个函数srand。2.srand函数。

2023-12-07 22:26:39 408

原创 二分查找原理及其实例

在一个有序排列的数组中查找想要找的数字n,很容易想到的方法是遍历数组。如以下代码,便是在一个已知的有序数组中通过循环来查找数据。但是这种方法的效率比较低,因此人们发明了新的方法,即二分查找法。

2023-12-07 09:06:42 102

原创 C语言分支以及循环

break语句的用处是终止循环。continue语句的用处是跳出本次循环后面的代码,直接进入下次循环。

2023-12-03 16:11:47 93 1

空空如也

空空如也

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

TA关注的人

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