自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 VS中Realse版本和Debug版本的区别

vs中的工程有debug和release两个版本:Debug通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,但是不做任何优化(性能有影响),目的是为开发人员提供强大的应用程序调试能力,也就是说只有在Debug模式下,我们才可以使用vs所提供的所有的程序调试功能,比如:单步调试中将光标移至变量处即可以获取该变量的实时数据。Release通常称为发布版本,是为用户使用的,一般客户不允许在发布版本上进行调试,在Release模式下也无法使用vs所有的调试功能。所以不保存调试信息,同时,

2020-11-01 18:38:25 3155

原创 从编译器的角度来谈为什么C语言不支持函数重载

函数重载函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数或类型或顺序)必须不同,常用来处理实现功能类似数据类型不同的问题例如int Add(int left, int right) {return left+right; }double Add(double left, double right) { return left+right; }long Add(long left, long right) { return l

2020-11-01 18:38:16 244

原创 数据结构——各类排序算法结构的总结及实现

排序的概念排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。内部排序:数据元素全部放在内存中的排序。外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。先给大家附

2020-11-01 18:38:01 383 1

原创 数据结构——堆的结构及实现详解

堆如题,这里说的堆并不是计算机进程地址空间中的堆,而是数据结构中的堆堆的作用: 选最大数或最小数,不断选数,时间复杂度是O(LogN)注意: 在数据结构中,堆是一种完全二叉树,适合用数组存储。只有非完全二叉树不适合用线性表来存储,因为空白部分会浪费空间。堆的实现头文件#pragma once#include<stdio.h>typedef int HpDateType;typedef struct Heap{ HpDateType* _a; size_t _size;

2020-11-01 18:37:32 605

原创 数据结构——栈的概念及实现

栈栈的概念及结构栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。栈的实现// 下面是定长的静态栈的结构,实际中一般不实用,所以我们主要实现下面的支持动态增长的栈typedef int STDataType;#define N 10typedef

2020-11-01 18:37:17 243

原创 二叉树的遍历方式——前序/中序/后序/层序遍历

二叉树的遍历方式前序遍历(Preorder Traversal 亦称先序遍历)——访问根结点的操作发生在遍历其左右子树之前。中序遍历(Inorder Traversal)——访问根结点的操作发生在遍历其左右子树之中(间)。后序遍历(Postorder Traversal)——访问根结点的操作发生在遍历其左右子树之后。层序遍历:除了先序遍历、中序遍历、后序遍历外,还可以对二叉树进行层序遍历。设二叉树的根节点所在层数为1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问

2020-11-01 18:36:44 345

原创 数据结构——二叉树的概念及结构

树的概念及结构树的概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。有一个特殊的结点,称为根结点,根节点没有前驱结点除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1<= i <= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继。因此,树是递归定义的。树的表示树结构相对

2020-11-01 18:36:33 547

原创 经典递归问题——汉诺塔

每个新手在学习递归的时候,汉诺塔可以说是一个经典的不能再经典的例子汉诺塔我个人很喜欢的一部电影《猩球崛起》中,有一个通过汉诺塔测试猩猩凯撒的母亲智慧的桥段汉诺塔规定:在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘,最终要使左右圆盘都以正确的顺序移动到第三根柱子上。这个问题使用递归可以轻松解决。#include<stdio.h> void move(int n,char a,char b,char c){ if(n==1) printf("\t%

2020-11-01 18:36:05 528

原创 Linux基本指令介绍及拓展(详细的不能再详细辣!)欢迎收藏

Linux作为目前各大互联网企业使用相当广泛的操作系统,其重要性对于程序设计人员来说不言而喻。工欲善其事,必先利其器,接下来让我们了解一些使用Linux系统当中必须掌握的一些基本指令。注:重要指令我会标出,以供大家详细了解~如果本篇博客对您有帮助请点赞关注哦!欢迎转载,请注明出处。Linux的基本指令ls 指令语法: ls [选项][目录或文件]功能:对于目录,该命令列出该目录下的所有...

2019-12-07 12:58:03 183

原创 通过拼接将两个有序链表合并

本文主要介绍如何通过拼接(而不是创建新链表)的方式,合并两个有序链表成为一个新链表。思路如下:我们可以以两个链表其中一个为基点,对该链表使用双指针法遍历,对另一个链表使用一个指针即可。当非基点链表指针的当前指向值大于或等于基点链表的第一个指针指向值且小于或等于第二个指针指向值,将此时的非基项使用尾插法插入,紧接着指针向前移动重复处理即可。完整代码如下:PlistNode* mergeTwoLi...

2019-12-07 12:08:40 133

原创 数据结构——回文链表的实现

回文链表的实现包括以下两个步骤:1.遍历链表,知道链表的长度,并找到中间节点注:该步骤需要通过快慢指针实现。2.逆至后半段链表,使用两个指针分别从头和中间比较每一半的链表数值;注意链表长度奇偶数。 "或者遍历并用数组记录一遍链表节点数据,再将数组尾到头部与链表相比较,一致则为回文链表。注:该步骤需要开辟存储空间详细代码如下:/* Definition for singly-linked...

2019-12-07 12:08:27 357 2

原创 用快慢指针来解决链表相关问题

什么是快慢指针?顾名思义,快慢指针就是定义一个快一个慢的多个指针,通过快慢指针在链表中的运行方式,利用他们来解决问题。我们来通过例子进行进一步的了解。快慢指针的使用1、给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。分析:定义快慢指针,快指针一次走2,慢指针一次走1,当快指针为NULL时,慢指针为中点,编写时还需要注意边界问题。P...

2019-12-07 12:08:12 156

原创 单链表的逆置

上篇博客讲了单链表以及其各项功能的实现,本篇博客就来谈谈如何将一个单链表逆置。单链表的逆置主要有两种方法,我们结合代码来进行了解。方法一:翻转单链表中指针的指向要翻转一个单链表中指针的指向,我们一共需要新建三个指针,其中两个用来进行指针的翻转,第三个用来保存下一个的地址。1、将n1的初值设为头,n2为n1的next,n3为n2的next,以n2是否为空作为循环判断条件2、在进入循环前将n1...

2019-12-07 12:07:54 1187

原创 单链表的增删查改

本篇博客主要介绍C数据结构中的单链表有关的增删查改操作,并且介绍列表的快慢指针,链表的逆置和合并等用法,废话不说直接上代码链表相关.h#pragma once#include <stdio.h>#include <stdlib.h>#include <assert.h>typedef int DateType;typedef struct Plis...

2019-12-03 00:12:28 398

原创 C顺序表的增删查改

顺序表是物理地址连续的存储单元依次存储数据的线性结构,一般情况下采用数组存储,在数组上完成数据的增删查改。顺序表比数组更约束,顺序表物理地址上必须连续存储,数组是顺序表在实际编程中的具体实现方式。顺序表分为静态顺序表和动态顺序表,主要区别是他们的容量是否可变。静态顺序表静态顺序表的容量在静态时期(编译期间)确定,大小不可改变。静态顺序表的创建typedef struct SeqList...

2019-11-27 16:42:20 240

原创 C数据结构——时间复杂度

算法效率算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。...

2019-11-13 20:22:36 656

原创 C自定义类型详解(结构体,枚举,联合)

结构体结构体的声明结构体是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。例如:struct Stu { char name[20];//名字 int age;//年龄 char sex[5];//性别 char id[20];//学号 };//分号不能丢特殊的声明匿名结构体类型struct{ int a; ...

2019-11-06 20:56:29 498

原创 结构体内存对齐详解

在学习C语言结构体的时候,我们会遇到一个概念叫做内存对齐,为此专门写一篇博客来进行详细的解释结构体内存对齐规则1、首先要明白,结构体的第一个数据成员在偏移量为0的地址处。2、其他成员存放在对齐数的整数倍地址处。何为对齐数呢?对齐数取编译器默认和该数据成员大小的最小值,vs默认值是8,Linux没有默认对齐数。3、结构体总大小必须是最大对齐数的整数倍。4、结构体的整体对齐数=min(8,m...

2019-11-05 11:45:50 182

原创 C语言操作符详解

在C语言学习过程中我们遇到相当多的操作符,这里对它们进行了详细的分类说明供大家查阅。算术操作符算术操作符有以下几种:+ - * / %关于算术操作符:除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法.% 操作符的两个操作数必须为整数。返回的是整除之后的余数。移位操作符移位操...

2019-11-02 17:01:41 169

原创 C语言指针(3)——数组传参与指针传参

上部分内容总结了数组指针的用法,我们可以意识到指针是相当重要的一个概念。在编写程序,使用数组和指针的过程中,我们总是要将数组和指针传参给函数,那么函数的参数有什么设计规范呢?一维数组传参#include <stdio.h>void test(int arr[]){}void test(int arr[10]){}void test(int *arr){}void te...

2019-10-20 16:50:42 9800

原创 C语言指针(2)——数组指针

上部分内容只是浅显的了解了一下指针,接下来就要掌握一些进阶方面的知识了。指针数组其实本部分内容的重头戏在于数组指针以及它的使用,在总结数组指针之前先来了解一下什么叫做指针数组。指针数组,顾名思义是一个数组,指针数组就是一个存放指针的数组,其数组元素都为指针。指针数组的定义方式是int* arr[10];我们可以在其中存放指针作为元素int *arr[1]={&a}//将a的地...

2019-10-20 15:26:43 202

原创 指针——C语言之魂(1)

根据自己的学习进度,本篇博客将会对C语言的灵魂部分——指针做一个初级的描述,以及一些基本细节的讲解。欢迎阅读指正。指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。注意,指针是一个变量。...

2019-10-16 02:11:48 167 1

原创 C语言中conset的作用以及与define的区别

const的作用const在实际编程中使用不多,但是在我的学习过程中遇到了这个语句就要搞清楚。const 是 constant 的缩写,意思是“恒定不变的”。它是定义只读变量的关键字,或者说 const 是定义常变量的关键字。用 const 定义的变量的值是不允许改变的,即不允许给它重新赋值,即使是赋相同的值也不可以。所以说它定义的是只读变量。这也就意味着必须在定义的时候就给它赋初值。如果...

2019-10-09 17:01:15 5592

原创 C语言小练习【4】

来进行一些日常的小练习做题啦~1、函数实现交换两个数还是要注意要改变实参的值就需要用指针哦void work(int *a, int *b){ int c = 0; c = *a, *a = *b, *b = c;//此处需要定义c而不是*c,否则程序会崩溃}int main(){ int a = 1, b = 2; printf("%d,%d\n", a, b); w...

2019-10-07 14:47:02 115

原创 C语言小项目——三子棋

肝了一晚上终于肝出了真正意义上的写程序以来第一个小游戏,也算是个小程序。当当当当,是三子棋没错啦。在正文中讲解会有些混乱,所以我就直接用注释的方式来进行解释。三子棋头文件"三子棋.h"其实通过这个小项目慢慢体会到了编写一个C程序可以将头文件全部整合在一起放在名为.h的后缀文件中,之后再调用的话可以直接通过include来实现,方便快捷,还能使得程序更加有序。但是要注意不能使用<>...

2019-10-07 14:40:10 360 1

原创 用C语言完成猜数字小游戏

猜数字小游戏是我人生中第一次写的游戏,通过这个游戏初步理解到了C语言的趣味性以及简单游戏的基本框架,有点激动,废话不多说先把代码贴出来:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<time.h>void menu(){ printf("****...

2019-10-04 01:09:08 714

原创 关于自定义函数中通过形参改变实参的问题

在C语言函数中,有两个基础概念是形式参数和实际参数。实际参数(实参):真实传给函数的参数,叫实参。实参可以是:常量、变量、表达式、函数等。无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。形式参数(形参):形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),所以叫形式参数。形式参数当函数调用完成之后就自动销...

2019-10-03 14:21:44 4387 4

原创 用C语言求出0~999999之间的所有“水仙花数”并输出。

求出0~999999之间的所有“水仙花数”并输出。“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身。在数论中,水仙花数(Narcissistic number)也称为自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),是指一N位数,其各个数之N次方和等于该数。今天这道题真是让我头发都掉光了,真是不堪回首,具体思路我就写在程序备注了供大家参考了,真的想到...

2019-10-02 18:47:23 409

原创 C语言练习【3】

开始这次的练习啦~1、将数组A中的内容和数组B中的内容进行交换。(数组一样大)这道题就跟交换两个值一样,把数组的每一个元素都交换,写成一个循环就好了。int main(){ int a[3] = { 0, 1, 2 }, b[3] = { 3, 4, 5 }, i = 0, change = 0; for (i = 0; i <= 2; i++) { change = a[...

2019-10-02 16:02:05 310

原创 C语言练习【2】

1、给定两个整形变量的值,将两个值的内容进行交换非常简单,我们只需要多定义一个变量C来存放数据,就可以解决这个问题。#include<stdio.h>int main(){ int a = 1, b = 2, c; c = a, a = b, b = c; printf("%d %d", a, b); return 0;}2、求10 个整数中最大值。这道题需要...

2019-10-02 14:38:06 108

原创 C语言循环语句

循环语句是一种使程序可以循环执行的语句,应用非常广泛。循环语句大致分为while语句,for语句和do while语句。while循环直接写一个程序来了解。比如最基本的在屏幕上打印十个数字。#include <stdio.h>int main(){int i = 1;while(i<=10) {printf("%d ", i);i = i+1; }retu...

2019-10-02 13:58:40 677

原创 C语言分支语句

分支语句就是我们平常所说的选择语句,顾名思义就是有多个分支和选择结构的语句,这在C语言中的应用是非常广泛的,接下来看几个典型的C分支语句的结构。if语句语法结构:if(表达式) 语句;if(表达式) 语句1;else 语句2; if(表达式1) 语句1;else if(表达式2)//多分支 语句2;else 语句3;接下来做一个...

2019-10-02 13:58:05 705

原创 C语言练习【1】

现在来通过练习来进一步了解C语言这种编程语言。首先第一题:打印100~200之间的素数要打印素数首先要知道素数的概念,即在大于1的自然数中,除了1和它本身以外不再有其他因数。那么可以确认编程思路,即通过循环结构,让100-200之间的每一个整数都与每一个比自身小的正数相除取余,如果余数为0则证明除了1和该数本身,还有另外的数字能整除,即该数不是素数。而如果只有自身能整除自身(数字1已经确认可...

2019-10-02 01:50:36 150

原创 初探C语言

初识C语言首先我们来看一个最基本的C语言程序#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>int main(){ printf("hello world!\n"); return 0;}这个程序在许多的C语言书籍中都作为开篇程序来介绍,也是许多C语言的初学者所接触到的第一个程序。那么它到底是什么意思呢,其中又有什...

2019-10-01 15:18:16 169

原创 一个正经的学编程标题!!!!

**一个正经的标题**首先欢迎来到我博客的每一个读者,很幸运在漫长的川流时光中,我能把彼时彼刻所想,传达给此时此刻的你。我的名字是赵浪然,家乡在陕西省北部。那是一个朴实无华的小城,是繁忙世界中一个平凡不能再平凡的角落。但冰山再偏僻的一角也都属于冰山本身,我的家乡是我对这个世界的第一印象。无华的小城,我的心在这里诞生和生长。在这里,遭遇人类所有情感,作为一个悲喜分明的simple guy,...

2019-09-05 20:39:37 562

空空如也

空空如也

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

TA关注的人

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