自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++历程之命名空间

经常要写在变量或函数前写命名空间名和域作用限定符也很麻烦,我们可以将命名空间展开(using namespace 命名空间名),这样编译时也就可以去命名空间寻找了。如果两个或多个展开的命名空间中有同名的变量或函数,在编译时会报错,无法确定用哪一个,所以就命名空间是否展开要注意。下面创建一个命名空间A,同时在其里面创建一个变量a,看编译的时候,是否会在命名空间寻找变量以及该变量与全局变量的优先级。从上图可以看出,编译时并不会自动地去命名空间寻找,只有在变量前指定命名空间才会在命名空间中寻找。

2024-06-01 19:32:29 218

原创 计数排序(非比较排序)

计数排序需要使用一个额外的数组count,其中第i个元素是待排序数组a的值减去a中最小值的值等于i是元素个数。然后根据数组count来将a中的元素排到正确的位置。4.反向填充目标数组:将每个元素i+min(最小值)放在数组a[j]中,每放一个元素就将count[i]减去1。直到数组count中的每个元素为0。2.开辟一个大小为m(上面求出的最大值减最小值再加1)的数组count,并将数组中的数据初始化为0;3.统计数组中每个值减去最小值的值的出现次数,存入数组count相应的位置;

2024-05-29 22:47:07 200 1

原创 归并排序实现

归并排序算法的思想是:假设初始序列含有n个记录,则可将其看成n个有序的子序列,每个子序列的长度为1,然后两两归并,得到[n/2]个长度为2或1的有序子序列;然后,找到最小区间(只有一个数据),让其与相邻的最小区间比较,按照升序存放在tmp数组相应位置上。这样就变成了只有两个数据的区间之间的比较,重复这个步骤,直到存放在tmp数组上的数据有序。归并排序就是将两个或两个以上的有序表合并成一个有序表的过程。其次,将整个数组分成左右两个区间,左右两个区间再次分成两个小的区间,直到每个区间只有一个数据。

2024-05-29 20:05:49 182

原创 快速排序(霍尔法、前后指针法)图文详细

通过创建两个指针(prev和cur),prev指针指向数组的第一个数据,cur指向数组的第二个数据,让cur遍历数组去寻找比基准值a[key]小的数,若找到了,判断prev的下一个位置是否为cur,若prev的下一个位置不是cur,则++prev,交换a[prev]和a[cur]的值,然后++cur,再次遍历数组去寻找比基准值a[key]小的数;(2)从数组的最右侧位置依次向左搜索,找到第一个小于基准值的数据,记住下标right的位置(若a[right]的值大于基准值时,则执行right--)。

2024-05-19 17:06:24 369

原创 希尔排序的实现

希尔排序实质上是采用分组插入的方法,先将整个待排序数据序列分割成几组,从而减少参与直接插入排序的数据量,对每组分别进行直接插入排序,然后增加每组的数据量,重新分组。(1)第一趟取增量d1=5,所有间隔为5的数据分在同一组,全部数据分成5组,在各个组中分别进行直接插入排序,排序结果为上图第一趟排序结果所示。(2)第二趟取增量d2=3,所有间隔为3的数据分在同一组,全部数据分成3组,在各个组中分别进行直接插入排序,排序结果为上图第二趟排序结果所示。②第二趟取增量d2(d2<d1),重复上述的分组和排序。

2024-05-19 12:08:52 191

原创 直接插入排序

比较tmp和a[end],如果a[end]>tmp,则a[end+1]=a[end],end--,再次比较tmp和a[end];②循环n-1次,每次使用顺序查找法,查找a[i](i=2,...,n)在已排好序的序列a[1...i-1]中的插入位置,然后将a[i]插入表长为i-1的有序序列a[1...i-1],直到将a[n]插入表长为n-1的有序序列a[1...i-1],最后得到一个表长为n的有序序列。①设待排序的数据存放在数组a[1...n]中,a[1]是一个有序序列。

2024-05-18 22:00:09 137

原创 冒泡排序的实现

①设待排序的数据存放在数组a[n]中。首先将第一个数据和第二个数据进行比较,若为逆序(即a[1]>a[2]),则交换这两个数据。冒泡排序是一种最简单的交换排序方法,它通过两两比较相邻记录的数据,如果为逆序,则进行交换,从而使数据小的记录如气泡一样向上“漂浮”(左移),或者使数据大的记录如石块一样向下“坠落”(右移)。②然后进行第二趟起泡排序,对前n-1个数据进行相同的操作,使次大的数据放置到第n-1的位置上。③重复上述比较和交换过程,第i趟是从a[1]到a[n-i+1]依次比较相邻两个数据。

2024-05-18 19:16:44 176

原创 树和二叉树

性质5: 如果对一棵有n个结点的完全二叉树( 其深度为| log2 N| +1)的结点按层序编号( 从第1层到第 | log2 N| +1层,每层从左到右)则对任一结点i(1<=i<=n),以下结论成立。(2)除根结点以外的其余结点可分为m(m>0)个互不相交的有限集T1,T2,...,Tm,其中每一个集合本身又是一颗树,并且称为根的子树。性质3: 对任意一颗二叉树T,如果其终端结点数(叶子结点数)为n0,度为2的结点数为n2,则n0=n2+1。(1)结点的度:结点拥有的子树数称为结点的度。

2024-05-08 22:06:11 332 1

原创 堆的创建和堆排序

向二叉树插入数据为6的节点,比较插入节点的值(child)与其父节点的值(parent)的大小,如果插入节点的值大,则不进行操作;如果插入节点的值小,则插入节点的值与其父节点的值互换,插入节点下标(child)=其父节点下标(parent),父节点下标(parent)=parent*2+1,然后再比较新子节点的值(插入节点的值)与新父节点的值,进行重复操作。根据这个特性,堆可以分为最大堆和最小堆两种。根据上述图片可以看出,最大堆的根节点的值是所有节点值中的最大值,最小堆的根节点的值是所有节点值中的最小值。

2024-04-20 17:54:54 133 1

原创 队列的定义和特点以及循环队列的实现

如果像以往一样,有n个数据开n个空间,那么队空和队满的条件分不清,因为队空和队满都用front==rear表示。因此可以采用n个数据开n+1个空间的方法,让front指针指向队头数据,rear指针指向队尾数据的下一位。通过对队列示意图的观察,发现可以用类似数组的方式来实现队列,定义两个指针,一个指针phead用来表示队头,一个指针ptail用来表示队尾。可以把该循环队列示意图看成一个首尾相连的数组,当队列满且要插入数据,将Tail指针指向回0下标,这样就形成了一个循环队列。

2024-04-04 14:43:21 203 1

原创 有关栈的详细讲解和括号匹配问题

栈又可称为后进先出(Last In First Out,LIFO)的线性表,也就是说如果一个数据先进入线性表,那么这个数据是最后离开线性表的。因此,对于栈来说,表尾端有着特殊含义,称为栈顶,相应地,表头端称为栈底。遍历字符串s, 根据栈后进先出的特点,让左括号入栈,再出栈与下一个字符进行匹配。在程序设计中,如果需要按照保存数据时相反的顺序来使用数据,则可以利用栈来实现。(3)每个右括号都有一个对应的相同类型的左括号。(1)左括号必须用相同类型的右括号闭合。什么是栈,以及它又有怎样的特点呢?

2024-04-01 20:41:44 304

原创 打印5位数中的所有变种水仙花数(Lily Number)

如1461 = 1*461 + 14*61 + 146*1,1可以看成是1461%(10^1)得到,146看成是1461/(10^1)得到,61是1461%(10^2)得到,14是1461/(10^2)得到,则认为一个数n, n%(10^k)×n/(10^k)——>(k=1,2,3...),令k=1,k=2,k=3,k=4都计算一次,将所得到的数全部相加起来,看是否与原本的n相等。再设计该函数之前,来认识一个函数——pow(x,y)函数,其作用是求x的y次方,它的头文件是<math.h>。

2023-12-03 21:42:31 648 2

原创 浮点数在内存中的存储

printf("*pFloat的值为:%f\n", *pFloat)表示将整数9的补码当成浮点数在内存中的存储,则S=0, E=0-127=-127,M=00000000000000000001001,即(-1)^0*1.00000000000000000001001*2^-127。对于64位的浮点数,最高的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M。对于32位的浮点数,最高的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M。

2023-12-02 19:07:01 1081

原创 打印0~~100000的水仙花数

在求每位数的几次幂及它们的和之前,先认识一个函数----pow函数,它的功能是计算x的y次幂,返回幂指数的结果,头文件为<math.h>。基于此,我们可以用for循环得到0~~100000的数字,求出该数是几位数,然后求出其每位数的几次幂及它们的和,再判断它们的和是否与该数相等。只是自幂数的一种,严格来说3位数的3次幂数才称为水仙花数。例如:153是一个水仙花数,因为153=1^3+5^3+3^3。上面图1已经求出该数是几位数,现在再设计一个函数求出各位位数的几次幂的和就可以了。五位自幂数:五角星数。

2023-11-26 10:58:44 402 1

原创 如何打印等腰三角形和菱形

下等腰三角形的总层数比上等腰三角形的总层数少一层,下等腰三角形可以看成上等腰三角形的翻转,上等腰三角形从第一行向下打印,那么我们也可以把下等腰三角形看成从最低层向上打印。打印下等腰三角形的代码跟打印上等腰三角形的代码基本一样,只需要改变控制层数的代码就行了,把for(i=1;通过以上图形可以发现,我们不仅需要打印“*”,也需要打印空格。再深入观察发现,一行空格数==总层数-当前层数,要打印的“*”数==2*当前层数-1(这里我是从第一行开始算,也就是i=1开始。等腰三角形知道怎么打印了,那怎么打印菱形呢?

2023-11-19 12:02:40 135 1

原创 分支和循环(下)

执行完一次循环体语句后,再判断表达式的值是否为非0,循环往复执行这一流程,直到该表达式为0,结束while语句,执行后面的语句;当i=5时,满足if语句的判断表达式,执行if内的语句,即执行break语句,执行break语句后,跳出for循环,执行后面的语句。当i=5时,满足if语句的判断表达式,执行if内的语句,即执行continue语句,不执行本次的printf,继续执行后面的循环。(3)循环体语句只能有一条语句,如果有一条以上的语句要循环执行,则用“{}”把这些语句括起来,构成一条复合语句。

2023-11-09 16:13:37 44 2

原创 分支和循环(上)

第一个if语句的表达式为假,不执行后面的语句,直接退出选择结构,因此什么都没输出。依次判断表达式的值,当出现某个表达式为真时,则执行相应的语句。如果表达式的值为假,则执行语句 n,然后退出选择结构,继续执行以后的程序。(1)计算switch后面的表达式的值,然后与每个case后面的常量表达式比较,当表达式的值与某个常量表达式相同时,则执行相应case后面的语句。(3)当switch后面表达式的值与所有case后的常量表达式都不等时,则执行default后的语句,然后退出switch语句。

2023-11-04 14:37:53 177 1

原创 C语言程序设计————猜数字游戏

这是因为rand函数生成的是伪随机数,不是真实的随机数,它是一个叫"种子"的基准值运算生成的随机数。程序在调用rand函数之前先调用srand函数,通过srand函数的参数seed来设置rand的种子,这样种子发生了改变,就可以生成真实的随机数。通过上述函数生成的随机数的范围是0到32767,要想得到0到100的随机数,可以使生成的随机数除100得到的余数加1,即随机数%100+1。猜的数字比随机数小,在屏幕上打印"猜小了″,猜的数字与随机数相等,在屏幕上打印"恭喜你,猜对了″。

2023-10-31 23:53:30 1118

原创 第一篇博客文章

广东某校计算机专业的学生,茂名地区的一名大二小青年。说是大二的学生,但对大一的知识压根没掌握。在大一时想着转专业,没怎么认真学习c语言和c++,结果转专业没成功,c和c++也不怎么会,浑浑噩噩浪费了一年的时间。:个人觉得就单单看书的话,总会有一些知识是不懂的或者有一些重要的知识漏掉的。大一爽了一年,只能在大二更加努力学习了,毕竟有些东西总是要还的嘛。:大厂没什么想法,想先进个中厂打拼几年,等知识和经验都有了,再去大厂尝试。因为如果没有扎实的知识,列举再多再好的目标也是空谈。最想进入的一家IT公司。

2023-10-16 20:10:04 75

空空如也

空空如也

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

TA关注的人

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