自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++利用数组创建二叉树

这里我想的是使用队列来解决这个问题,即每走一个子节点,我们都将其当作备用的父亲节点存入队列中。3、还有一种极端情况如果输入的是如下队列[1,2,3,4,5,NULLvalue,NULLvalue,NULLvalue,NULLvalue,6,7,NULLvalue,NULLvalue,NULLvalue,NULLvalue,,NULLvalue,NULLvalue,NULLvalue,NULLvalue,8,9];其中x为题目所给的队列,parent_node 为父亲节点队列,parent为父亲节点。

2025-06-28 16:24:34 423

原创 [LEECODE每日一题]找出最具竞争力的子序列

因为子数组是顺序的缘故,所以我们可以拿后面每个比前面小的数字进行逐一比较,如果比前面的一个位置的小,我们就让前面位置的数字进行出栈,再对出栈前一个比较,直到满足比前面的一个栈的元素大为止,如果比前面的数字大我们就直接入栈。题目给的很清楚,既输入一个序列要求给定一个子序列长度,让其输出为一个最有"竞争力"的序列,说白了就是在所有子序列比较中,处于靠前位置的元素要尽可能的小,而且这个子序列是按照顺序进行排列的。当然我们如果不停的入栈出栈,我们怎么保证里面的元素是我们想要的子序列长度的大小呢?

2024-05-24 15:25:49 457

原创 基于模糊神经网络的嘉陵江水质预测

数据集采用的是水质检测的六个指标。

2024-05-13 10:39:13 335

原创 [论文解读]Joint symbol-level precoding and reflecting designs for IRS-enhanced MU-MISO system

文章主要思路采用了符号级预编码以及智能反射面来减少发射能量其中优化方法分为了两个子问题,采用的是交替方向进行优化对预编码信号优化,由于问题是凸问题所以采用的是CVX工具包,以及作者给予的一个共轭梯度算法对RIS反射角的优化问题,通过化简后采用黎曼共轭梯度法进行优化,后续有介绍到如何选取初始RIS角度以及QoS平衡问题这次阅读是第一次精度文章,所以关注点主要在如何进行建模以及对于问题(6)的分解以及部分FIG.4代码出现的阅读,对于黎曼几何算法,笔者不在研究范围内,既没有细看。

2024-04-19 20:55:03 1412 1

原创 [数据结构]栈和队列结构的简单制作

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头。栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈可以用顺序表或者链表进行实现,但是相对而言顺序表的优势较为大,以下是栈的实现方法,因比较简单所以读者可以自行阅读代码。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。

2024-04-10 07:00:00 372

原创 [数据结构]双向带头循环链表制作

实际中使用的链表数据结构,都 是带头双向循环链表。第一、防止头节点为空,既有头结点,头指针始终指向头结点,那么无论链表是否为空,头指针均不为空;需要注意的是,里面仍有一些判断可以完善,如有需要可以自行完善,这部分代码仅仅是一个简单的带头双向循环链表的制作。第二、有头结点时,插入/删除第一个结点时,空链表/非空链表操作逻辑一致,不需要额外判断。第三、插入或者删除头结点的时候不需要改变头节点,只需要改变头结点的下一个即可。这里我们介绍一个双向带头循环链表的制作方法。前面我们有提到,单向不带头循环链表的制作。

2024-04-09 07:00:00 375

原创 [数据结构]不带头单向非循环链表

我们有学过,顺序表如何制作,还有一个与其非常相似的结构就是链表的制作,不过链表在数据中的存储不像顺序表一样是按照内存的顺序进行存储的,其在内存中是一块一块的进行存储,具体如何我们可以看看下面这张图。我们知道如果我们要增加数据,我们无法像静态顺序表一样一开始就定下来最大数据量为多少,因此我们这边采用动态内存的方式进行开辟内存。此链表有一个头指针pList,我们要创造的链表为不带头指针的链表,既我们创造一个结构体,其中一部分为数据部分,另外一部分为下一个数据的地址。SeqList.c文件。

2024-04-08 07:00:00 236

原创 [数据结构]动态顺序表制作源码分享

静态顺序表只适用于确定知道需要存多少数据的场景。静态顺序表的定长数组导致N定大了,空 间开多了浪费,开少了不够用。所以现实中基本都是使用动态顺序表,根据需要动态的分配空间 大小,所以下面我们实现动态顺序表。顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存 储。在数组上完成数据的增删查改。2. 动态顺序表:使用动态开辟的数组存储。1. 静态顺序表:使用定长数组存储元素。具体接口代码以及菜单代码如下。

2024-04-02 07:00:00 174

原创 [数据结构]时间复杂度、空间复杂度的计算

如何衡量一个算法的好坏呢,对于实现同一个功能,我们可能有不同的代码,在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源。因此衡量一个算法的好坏,一般 是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间。在计算 机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计 算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。

2024-04-01 07:00:00 1047

原创 [C语言]文件操作大全fopen,fclose,fgetc,fputc,fgets,fputs,fscanf,fprintf,fread,fwrite,fseek,ftell,rewind.

我们如果要在VS对其进行操作,这个时候就得用到fopen函数,fopen即为打开一个文件,这个函数返回的类型为FILE类型的一个指针,所谓FILE类型也就是文件类型,意思就是有个指针指向你打开的文件,类型为FILE类型。文件变成了乱码,因为我们输入的数据在文件中是以二进制的形式进行输入的,正常来说我们输入的数据是以ASCII码值对应的文本显示,但是这里我们直接输入二进制数据,显示的就这一系列二进制对应的ASCII码值,得到一个很奇怪的文案。不同的C编译器的FILE类型包含的内容不完全相同,但是大同小异。

2024-03-27 07:00:00 914

原创 [C语言]柔性数组

我们先看一下怎么制造一个柔性数组呢?int i;int a[0];//柔性数组成员}type_a;我们可以看到,在结构体里面有一个整形变量有一个柔性数组变量,其中,柔性数组的大小是没有被定义的,这代表了我们可以分配动态内存给这个数组。

2024-03-26 07:00:00 573

原创 [C语言]利用动态内存制作一个通讯录

我们先输入一个判断,如果联系人个数sz等于我们的容量了,那我们将realloc我们的空间,返回值我们用结构体指针Pepoinfo修改指针变量为结构体变量,增加大小为我们要设置的add_size的大小,这里我们设置的2就是每次都多增加2个人,我们用ret接收这个指针,接受这个指针是怕传回来的为空,不可以直接用我们之前data指向的地点来接受,不然我们找不到我们原数据的内容。有时会我们发现过去申请的空间太小了,有时候我们又会觉得申请的空间过大了,那为了合理的时 候内存,我们一定会对内存的大小做灵活的调整。

2024-03-25 07:00:00 916

原创 [C语言]结构体、位段、枚举常量、联合体

其实我们仔细分析一下,a作为占2比特的变量,结构体分给其第一个字节后两位,接着剩下的还是在第一个定义的int的四个字节内,所以依次剩下的6个比特以及12个比特分给了b,如所示区域,但是当分配给c的时候,c占用32个比特,第一个int所占的四个字节无法接纳那么大的内存,所以开辟了一段新的空间给它,但是上一个没用完的空间是不分配给c的,所以我们最终看到系统分配内存方式如下。当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。

2024-03-24 07:00:00 1944

原创 [C语言]memcpy memmove的模拟实现 memcmp memset解析

我们知道在学字符串的时候有strcpy strcmp 等等的库函数,但这些都只能进行字符串的操作,如果我们要对一个整数的数组进行比较和复制呢?我们可以采用什么方法呢?以下就是对这些函数的解析以及对memcpy和memmove的模拟实现。

2024-03-23 07:00:00 489

原创 [C语言]手动实现strcat strcmp strcpy strstr strtok(静态全局指针初始化方式)代码

strcat strcmp strcpy strstr strtok这些代码均存储在c语言的头文件中,如果要使用的话直接调用即可,但是为了增加我们对代码的理解,我们看一下如何手动实现这些代码吧!

2024-03-22 07:00:00 545

原创 [C语言]指针笔试题

这里第一个输出结果为0x100014因为程序认为其为一个结构体,结构体加1就是跳过这个结构体因此大小加20而16进制的20为14第二个输出结果为0x100001,将其转化成整型变量加一得到的结果即为加1后的结果第三个输出结果为0x100004,将其转化成整型指针加一,既编译器认为其指向一个整型变量,加一后就是加四个字节。

2024-03-21 07:00:00 551

原创 [C语言]一维数组二维数组的大小

对于一维数组我们知道取地址是取首元素的地址,二维数组呢,取地址是取第一行的地址,sizeof(数组名)这里计算的就是整个数组的大小,&数组名 表示整个数组,取出的是整个数组的地址,显示的是数组的首元素记住这些前提后,我们看一下下面的题目会多少呢?

2024-03-20 07:00:00 895 1

原创 [C语言]指针详解一、数组指针、二维数组传参、函数指针

对一个数组,如果我们想要让一个指针指向这个数组,我们应该如何定义呢?我们知道一个数组定义本来就是一个指针,那为何要多定义一个数组指针呢?我们来看看下面这个代码就理解了第一个是我们正常定义的数组int arr[]第二个就是我们定义这个数组的指针要注意与int*parr[5]的区别,我们上面打字的方式代表的是(*parr)指向了一个数组大小为[5]的指针,而int*parr[5]代表了有个parr[5]的数组里面装的都是指向整形的指针我们来看一下将他们的地址分别加一得到的结果。

2024-03-19 07:00:00 1116 1

原创 [C语言]qsort函数模拟实现

int(*com)(const void *,const void * )是传递的一个com函数来进行比较,里面两个参数分别是要比较的地址 如果第一个参数比第二个参数大返回的就是大于0的数,第二个比第一个大返回的是小于0的数,相等返回的就是等于0的数,其中的com函数需要自己来定义。qsort函数是C语言中进行排序的一种函数,其特别之处是在于,可以将任意类型的数据进行排序,让我们来看一下这个函数里面传递的参数,函数的使用如下。width是数组单个元素所占的内存大小。size 是传递的数组的大小。

2024-03-18 07:00:00 165

原创 [C语言]水仙花数打印、菱形打印、智力题

1、一元钱可以换一瓶水,两个空瓶可以换一瓶水,问如果有20元多少瓶水。A说A不是 B说凶手是C C说凶手是D D说C在说谎。

2024-03-17 07:00:00 340 1

原创 [C语言]数据的存储类型

数据的类型分为很多种,比如可以用short、int、char .....等定义数据的类型,我们已经知道每种类型所占用的字节数是多少,但是如果不同类型之间调用结果会不会相同呢?大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址 中;小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地 址中。我们可以发现,在三个数据存放的时候,赋给他们的二进制数均为11111111。在我们输入a的值的时候,系统内存存放的数据如下。

2024-03-16 07:00:00 584 1

原创 [C语言]ASSERT与CONST函数使用,移位操作符求二进制不同位数,打印二进制数奇数位和偶数位

assert函数为断言函数,当满足一定条件的时候起警示的作用,用来帮助判断程序是否出现问题,const函数的更多的作用是防止程序出现bug或者防止程序按照错误方向进行,比如要复制一个字符串给另外一个,我们来看看这两个函数的作用是怎么样的其中assert在此段代码的作用是防止数组里面传递的参数为空值,const防止要赋值的参数和赋值的参数前后顺序搞反。

2024-03-15 07:00:00 449 1

原创 [C语言]操作符优先级,整形提升,递归的数组逆序,不用临时变量数组交换

操作符都有一个优先级,比如最高优先级就是计算括号内的内容,还有就是我们都知道的乘法比加减法优先级高,如果是计算c+a*b肯定是先计算a*b在计算+c这样一来我们写代码便可能让程序发生歧义,一些比较不好的代码就会出现,比如下面这个计算我们可以有两种计算,如果是先在整个计算来看,肯定是先计算乘法再计算除法如下所示当然我们可以从左到右看,例如第一个a*b+c*d我们先计算a*b然后计算c*d再相加,然后整体在和后面e*f看我们先计算e*f再相加,就有了如下的顺序。

2024-03-14 07:00:00 177

原创 [C语言]异或操作符判断整数中二进制1的个数

今天听的是操作符的内容,大部分内容在之前的课堂上已经讲过了,所以今天动手打的代码比较少,今天有点印象的就是异或操作符判断二进制1的个数,鹏哥用的方法是先输入一个1,在逐次进行右移位的异或比较,总共比较31次,但是我觉得这种方法还是有点冗余了,如果数值相对较小,没比较移位这么多次来比较,所以我的想法是在这里再加一个判断,并且放弃移位比较,采用二进制数权重的思想对2的次方逐步增加比较,如果有2的次方比原来的数大就停止即可。

2024-03-13 07:00:00 266

原创 [C语言]还原原版的扫雷

说一下我的思路,遍历查找的思想,利用递归的方式就好,但是呢这里要防止他反复递归,就是有些递归过的点要让他不参与递归,所以在主函数一开始我用到了一个tabu的禁忌递归矩阵,就是如果里面有坐标递归过了,令其里面等于1,如果没有那就还是初始值0,按照这个思想就可以完成扫雷区域的扩充。其次就是如何实现第一次点击不会点到炸弹,只需要再游戏没进入play循环前,提前输入一次就好,然后再设置地雷的时候,不让那个坐标参与设置就行,如这行代码的条件。这里的xy就是排除上面输入的坐标设置的参数,具体可以在函数里看到。

2024-03-12 07:00:00 1032 2

原创 [C语言]C语言实现五子棋

在B站up学习井字棋的兴趣下,自己按照同样的逻辑编写了五子棋的程序,其中可以自己修改棋盘大小以及胜利条件,例如将棋盘大小改成3*3胜利条件为3个连续就可以把这个五子棋的程序变为井字棋,其中头文件game.h游戏程序game.c主函数test.c代码分别如下。现在我们依次让玩家输入(1,1)(1,2)(1,3)(1,4)(1,5)来看看执行的效果。另外,对二维数组进行传参的时候,函数命令直接输入数组名字加上后面的中括号即可。相比较老师的,如果是游玩五子棋还是需要在行和列备注每行每列的数字方便输入。

2024-03-11 07:00:00 334

原创 [C语言]井字棋双人对战小游戏

在学习b站bili大学的C语言课程的时候,学习到了C语言做一个井字棋小游戏的程序,兴趣始发自己按照自己的想发做了一个小游戏,无奈发现自己与老师的差距还是过大,一是他的棋盘看起来更加清晰,我用的是"#"键进行代替,而是老师按照他的语法做了一个AI进行游玩,做AI的难度跟我做双人游戏的难度是无法比较的,但是出于想要每天跟新的缘故,还是把自己的代码贴上来供大家指正。这个时候位置8地方的#变成了O。如我们让玩家1落子输入8。一轮游戏后大概如下所示。

2024-03-10 07:00:00 407 1

原创 [C语言]利用函数写出乘法表、函数递归字符串逆次序赋值、函数递归计算整数每个数之和

此题要求输入一个数,就写出相对的乘法表,如需要写出99乘法表,只需要用到两个循环即可,如果要对齐等号,应当在输出的时候%d变为%2d输出如下所示结果如下。

2024-03-09 07:00:00 335

原创 [C语言]利用函数递归自己编写strlen,n的阶乘,以及求第N个斐波那契数列值

函数递归思想就是一个函数在调用的时候运用自身,即可以完成一次递归,但是为了防止无限嵌套,我们应该加上一个终止条件,这个就是递归最本质的思想如利用函数递归来写一个strlen函数,strlen函数计算字符长度主要是借助字符串的结束标识为\0来判断字符串是否终止,利用这个思想,我们在每次递归的时候都让我们返回值增加1,在最后一次返回0那就可以判断有多少个字符。代码如下。

2024-03-08 07:00:00 363 1

原创 [C语言]代替冒泡法利用函数写出三个数从大到小顺序输出

这就涉及到我们函数的传值和传址调用了,其实如果我们仅仅让两个变量进入函数内部,我们只是选取了两个变量的值,但是存放需要改变两个变量的并未发生改变,因为传入的get_big函数内部重新又定义了两个变量x和y,只是改变了它们的值,我们计算机又为它们两个创造了地址,改变的是x、y地址的值,而并未改变a和b这两个地址内存放的值。这就是传址调用和传值调用的区别,传值调用改变的只是里面的形参,而我们的实参其实从未改变,如果要改变我们的实参得输入传址调用的方式。我们尝试输入11 22 33 看看输出的结果是什么。

2024-03-07 07:00:00 469 2

原创 [C语言]利用system函数写一个整蛊关机程序,利用flag来找出100~200之间的素数

这个程序用C来写其实非常简单,用到的对比使用字符串比较,也就是strcmp函数以及system函数system函数命令系统进行关机,两个函数对应的头文件分别为string.h以及stdlib.h具体代码如下当然如果将字符串的文字改成别的就可以让整蛊对象输入别的才能防止关机。

2024-03-06 07:00:00 510

原创 [C语言]利用C语言设置密码(字符串对比strcmp函数使用),以及猜数字1~100小游戏详解(伪随机数生成法)

设置密码的主要运用到的函数是strcmp,此函数包含的头文件为string.h函数的运用为,对比两个字符串,如果前面的字符串ASCII值大于后面的ASCII值则大于0,小于既小于0,等于既等于0,利用这个原理写以下程序即可得到一个输入密码的程序。

2024-03-05 07:00:00 646 2

原创 [C语言]初识指针、结构体、getchar以及putchar的使用(简单的密码系统)、if else 及 switch选择语句、break及continue在while循环和for循环的运用

内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的。所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。变量是存放在内存中的,每个内存都会拥有一个地址,所以每个变量也会有一个地址,如何取出变量储存在内存中的地址呢,如下代码这里的&a就是取出a的地址,而要打印地址呢需要用到%p可以看到输出的结果为。

2024-03-04 07:00:00 770 1

原创 C语言中while循环、if选择语句、函数、数组、关键字(typedef、static)及#define定义常量和宏 B站P16~25学习

if选择语句就是让程序判断是否满足给定条件,如果满足则执行if下面的程序步骤,不满足则执行else的下的程序步骤,如果if或者else有多个步骤需要执行可以在其底下加一个大括号来囊括所有的操作,利用if选择语句和while循环我们可以简单完成以下程序。可以看到对于不同文件来说,static修饰的全局变量让程序报错,其实,static修饰全局变量以后只能在此文件下进行调用,不可以在别的文件进行调用,相同的,函数也是如此。static的中文为静态的意思,可以用来修饰局部变量和全局变量以及函数。

2024-03-03 07:00:00 1231

原创 C语言调试技巧、变量的作用域和声明周期、常量的分类、字符串、转义字符

首先想要判断一个程序是否出bug或者清晰的理解程序的步骤我们就需要用到调试首先在程序输入F10既可以逐步进行判断程序进程,再而每次运行程序都可以再按F10进行逐步运行,在调试->窗口->监视 随便打开一个监视器既可以看到每个步骤的各个值是多少,方便我们理解每个值赋值的大小以及每个步骤具体操作,进而就可以判断程序是否哪一行有问题作用域作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用 的 而限定这个名字的可用性的代码范围就是这个名字的作用域。

2024-03-02 07:00:00 819

原创 初学C,第一个C语言程序、数据类型、变量常量、及发生生成错误解决方式、scanf函数在vs编译器的使用方法、B站视频P1~P7学习

从很久就知道C语言是一个很强大并且在编程语言中很重要的一门语言,之前断断续续学习C语言没有坚持很长的时间又或者中途去学习matlab和python,导致C语言的水平一直不上不下,也想用csdn来记录自己C语言从学习到精通的过程,把自己学到的知识做过的项目都分享到这个网站,今天就当作是第一天重新学习C语言,希望这次的坚持能过陪伴我研究生三年的时光。第一天的学习写了三个程序,分别如下。

2024-03-01 09:51:20 606 2

基于模糊神经网络的嘉陵江水质预测

data1为训练集和测试集 data2为嘉陵江的水质

2024-05-13

空空如也

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

TA关注的人

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